Kuvan lähde: pixabay.com

Ohjelmointikielet algoritmien oppimiseen

Joten, ennen kuin aloitan kielillä ja niiden algoritmeilla varustetuilla tykistöaineillani, kerro ensin, mitkä algoritmit ovat.

Olet ehkä kuullut sen elokuvissa, etenkin elokuvissa kuten The Swordfish tai muissa wannabe-hakkerointielokuvissa, joissa hakkeri ilmoittaa jotain, jos menen vaihtamaan algoritmia ja lisäämään blah bla ja blah, niin pystyn hakkeroimaan CIA: han. ja tavaraa.

Mutta se on aika ahkera. Sellaista ei ole. Algoritmit eivät ole vain tarkoitettu hakkerointiin.

Ensinnäkin, algoritmit vain tietorakenteet. Ne ovat menetelmä tai tapa tehdä asioita, todennäköisemmin ratkaisemaan algoritmeihin liittyviä ongelmia. Silti hämmentynyt, anna minun ottaa tämä yksinkertaisemmalla tavalla.

Ajattele algoritmeja kaavoittajina. Kaavoja, jotka voivat auttaa sinua jatkamaan tehtävääsi ilman paljon vaivannäköä. Jotain seuraavaa:

(a + b) 2 = a 2 + 2ab + b2

Mutta nämä ovat melko yksinkertaisia. Oikeat algoritmit ovat paljon hyödyllisempiä kuin (a + b). Näitä algoritmeja käytetään pankeissa, mutta ei vain turvallisuuteen ja muihin asioihin, mutta kaikkialla. Oletetaan, että avaat tilisi pankissa.

Lisäät siihen X määrän rahaa ja haluat tietää koron määrän, jonka saisit.

Pankin kirjanpitäjä laittaa sitten numerot summan, ajanjakson lukumäärän ja koron ohjelmiston laatikkoon. Algoritmit ohjelmisto suorittaa ja antaa sinulle tuotoksen.

Nyt tämä lähtö laskettiin algoritmeilla … koodipala, jolla on jo kaavat koron laskemiseksi. Yksinkertaisen mielenkiinnon tapauksessamme se olisi:

A = P (1 + rt)

A = määrä

P = päähenkilö

R = korko

T = aika tai n

Nyt todennäköisesti sinulla on oltava idea siitä, mitkä algoritmit ovat. Yksi asia, joka on pidettävä mielessä, jos olet ohjelmoinnin aloittelija, joka ei koskaan sekoitu toimintoihin ja algoritmeihin. Molemmat ovat kaksi eri asiaa.

Jos sinulla on sekaannusta, poista ne vain ja jatka sitten vain eteenpäin.

Kielet, matematiikka ja algoritmi

Muutamia asioita on pidettävä mielessä, että matematiikan algoritmien ymmärtäminen on tärkeintä, kun haluat kirjoittaa parempia algoritmeja. Samankaltainen tilanne on murtumattomilla tai tyhmillä todistetuilla algoritmeilla.

Nämä algoritmit, joita kutsutaan murtumattomiksi, ovat vain puhtaan matematiikan koodin kappaleita, jotka eivät ratkaise ongelmaa ilman vaadittuja osia. Sanotaan esimerkiksi: a + b = 20

Oletetaan, että tässä on 5. Nyt, jos tiedän, että a on 5, niin tämä algoritmi voi olla helposti murtuva. Mutta jos en edes tiedä mikä on, silloin on edelleen mahdollista, että voin murtaa tämän algoritmin.

Tapa halkeilla olisi jotain, jolla voisin raa'asti pakottaa sen. Brute force tarkoittaa kaikkien mahdollisten yhdistelmien yrittämistä.

Joten tekisin, aloitan arvata numeroita, kuten 1 + 19, 2 + 18, 3 + 17, 10 + 10 ja niin edelleen. Joten nyt jompikumpi näistä asioista tapahtuisi.

Ensimmäinen todennäköisyys on, että koska kaikki yllä olevat yhdistelmät antaisivat minulle vastauksen 20: na, ne kaikki voisivat halkeilla tämän algoritmin. Mutta jos ohjelmoija on kovan koodauksen hyväksynyt vain 5 + 15, kaikki yhdistelmät eivät toimisi.

Mutta jälleen kerran, koska yritän kaikkia mahdollisia yhdistelmiä, olisi aika, jolloin yrittäisin 5 + 15 ja se säröisi algoritmin.

Ohjelmoija voisi jälleen yrittää pitää rajoitetun määrän yrityksiä ja paljon enemmän tietoturvarakennetta välillä, mutta jopa meille on meillä paljon työkaluja sen ohittamiseen.

Murtumaton algoritmi tai myytti?

Joten, kysymys on siitä, kutsutaanko jotain murtumattomaksi algoritmiksi vai onko se vain myytti. Vastaus on molemmat. Luin hiljattain juttuja Internetissä, missä luin kuuluisan tarjouksen:

"Mahdoton tarkoittaa vain sitä, että kaikkia ratkaisuja ei ole kokeiltu"

Joo. Näin algoritmit toimivat. Oletetaan yllä oleva tapaus. Oletetaan, että on olemassa toinen algoritmi, joka kuuluu seuraavasti:

a + b + c + d + e + f = (-9)

Joo. Näin kirjoitat särkymättömän algoritmin. Asia on kunnollinen tietokone, jolla on hyvä näytönohjain ja joka voi helposti murtaa tämän oclhashcatilla. Mutta se on vain esimerkki. Tässä yhdistelmät voivat olla mitä tahansa.

Vastaus on negatiivinen yhdeksän, mikä tarkoittaa, että lauseissa a, b, c, d, e ja f voi olla muutama luku, jotka ovat negatiivisia, jos ainakin yksi suuri luku vähennetään pienellä numerolla.

Tämä vie minut takaisin ensimmäisiin algoritmi-esimerkkeihimme a + b = 20. Jopa täällä voi olla paljon enemmän yhdistelmiä, kuten -1 + 21 tai -29354+ 29374.

Joten murtumattomien algoritmien teoria menee vain niin pitkälle kuin ihmisen mieli voi ajatella. Särkymättömät algoritmit eivät ole myytti. Hyvin kirjoitettu algoritmi voi viedä jopa 2–3 kuukautta tai jopa enemmän kuukausia murtautua jopa tietokoneella, kuten WPA2-salatut asiat.

Asia on, että ihmisellä on oltava kärsivällisyyttä pysyä mielenrauhassa, kunnes se ratkaistaan. Matematiikan mukaan ei ole sellaista algoritmia, jota ei voida murtaa. Se tarvitsee vain jonkun, joka todella kiinnostaa sitä.

Parhaat kielet algoritmien kirjoittamiseen

Suoraan sanottuna, virallisesti ei ole mitään erityistä kieltä, joka olisi erinomainen algoritmien kirjoittamiseen.

Toiminnallisilla kielillä on kuitenkin ylin käsi, syystä siihen, että ne ovat laskennan ja matematiikan suhteen paljon parempia kuin muut oliokohtaiset kielet. Mutta haluaisin kuitenkin vain algoritmeja luetella muutamista niistä, jotka minusta ovat tarpeeksi hyviä matematiikan koodaamiseksi:

  • Python ja Ruby

Ensinnäkin suosittelen korkean tason kieliä. Korkean tason kielillä on helpointa päästä käsiksi. Syy, miksi nämä kielet ovat helpompia, johtuu siitä, että toisin kuin C tai muu matalan tason kieli, nämä kielet ovat lukemisen kannalta helpompia.

Jopa heidän syntaksinsa on niin helppoa, että vain puhdas aloittelija ymmärtää sen ilman, että kukaan opettaisi heitä.

Kaikilla näiden kielten yleisillä tietorakenteilla on abstrakteja. Voit jopa rakentaa omia toteutettuja versioita ja rakentaa tietorakenteita tietorakenteisiin. Nämä kielet kirjoitetaan dynaamisesti.

Mutta tässä on vain yksi ongelma, josta ohjelmoijan voi olla helpompaa aloittaa, mutta testien suorittamisen aikana he voivat nähdä paljon virheitä, joita he eivät nähneet ennen suoritusta, toisin kuin muut matalan tason kielet.

  • C

C on täsmälleen päinvastainen kuin Python. Saatat jopa hämmentyä täällä, koska vaikka C on korkean tason kieli, jotkut ihmiset pitävät sitä jopa matalan tason kielenä koodaustavansa takia.

Jopa C on erittäin hyvä abstraktion suhteen. Jos harkitset algoritmeja, saatat joutua myöhemmin jonakin päivänä oppimaan asianmukaiset matalan tason kielet, kuten kokoonpano.

Tärkeää on, että jos tiedät C: n erittäin hyvin, se olisi melko helppo siirtyä C: stä tai vastaavasta kielestä kokoonpanokieleksi. Muistin hallinta on myös erittäin hyvä C-luokassa ja tämä on erittäin tärkeätä algoritmeille.

  • Jaava

Monet ihmiset todella vihaavat Javaa liian monipuolisesta ja tiukasta. Jopa jotkut sanovat, että siitä puuttuu paljon ominaisuuksia, jotka ovat saatavilla nykyaikaisilla hienostuneilla kielillä. Mutta tämä ei oikeastaan ​​tarkoita olevan huolissaan.

Java, toisin kuin Python, ei ole dynaamisesti tyypitetty kieli. Se on staattisesti kirjoitettu kieli, ja siinä on paljon roskien keräystä.

Tämä tarkoittaa, että Java näyttää tosiasiassa virheet kääntämisen aikana ja jopa ennen suoritusta. Ja verrattuna muihin korkean tason kieliin, Java: lla on erittäin alhainen muistivuoto, joka selvästi voidaan korjata, eikä siinä ole segmentointivirheitä.

  • C # ja C ++

C # on melkein samanlainen kuin Java. Se on enemmän kuin Java, jolla on modernin kielen ominaisuudet. Jotkut ihmiset haluavat käyttää jopa C ++ -sovellusta. Mutta se on erittäin tarpeettoman monimutkainen.

Jotkut ihmiset käyttävät sitä, koska koska sitä on vaikea ymmärtää, mutta kun onnistut murtaamaan sen, ihmisillä on vakavasti vaikea aika ymmärtää algoritmejasi, mikä tekee siitä täydellisen työhön. Toisaalta C #: llä on Java-kaltainen jätekeräys.

On myös muita toiminnallisia kieliä, kuten Haskell (Lisp-perhe) ja Scala (Java-pohjainen). Voit lukea muita blogejani heistä, joissa olen kirjoittanut yksityiskohtaisesti heidän toiminnastaan ​​ja tavaroistaan. Java, C ja C ++ toimivat kaikki yhdessä tai toisessa virtuaalikoneessa.

Ruby ja Python ovat tulkkiensa tulkkina.

Jos kysyt, haluaisin mieluummin C #: n, koska siinä on kaikki nykyaikaiset ominaisuudet ja se myös helpottaisi porttien siirtämistä alemmille ohjelmointikieleille. Tieteellisesti sillä on Java-, Scala-, C- ja alemman tason kielten ominaisuudet.

Jos haluat vain aloittaa algoritmeilla, voit todennäköisesti harkita Visual Studio Community Editionin tai Visual studio Express -ohjelman käyttöä. Sinun on todennäköisesti ostettava se paitsi, että python-tapauksessa suurin osa haluamaasi tavaraa olisi ilmainen.

Suositellut artikkelit: -

Tässä on artikkeleita, jotka auttavat sinua saamaan lisätietoja ohjelmointikielistä algoritmien oppimiseksi, joten mene vain linkin läpi.

  1. 8 mahtavaa algoritmihaastattelua koskevat kysymykset ja vastaukset
  2. Parhaat algoritmit ja salaus (esimerkit)
  3. Parhaat tietorakenteet ja algoritmit C ++ | Perusasiat
  4. Tietorakenteet ja algoritmit haastattelu