Vir slike: pixabay.com

Programiranje jezikov za učenje algoritmov

Preden začnem s svojimi težkimi artiljerijskimi predmeti o jezikih in njihovih maskah z algoritmi, naj najprej vem, kaj so algoritmi.

Morda ste slišali v filmih, zlasti v filmih, kot je The Swordfish, ali v katerem koli drugem filmu o hendikepu wannabe, v katerem heker navaja nekaj takega, kot če grem in spremenim algoritem ter dodam bla bla in bla, potem bom lahko vdrl v CIA in podobne stvari.

Ampak to je precej brezskrbno. Česa takega ni. Algoritmi niso namenjeni samo hekerstvu.

Najprej stvari, algoritmi samo strukture podatkov. So metoda ali način, kako narediti stvari, bolj verjetno rešujejo težave z algoritmi. Še vedno zmeden, naj to sprejmem na enostavnejši način.

Zamislite algoritme kot formule. Formule, ki vam lahko pomagajo pri opravljanju svoje naloge brez večjega veselja. Nekaj ​​takega:

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

Toda te so povsem preproste. Ustrezni algoritmi so veliko bolj uporabni kot zgolj (a + b). Ti algoritmi se uporabljajo v bankah, vendar ne le za varnost in druge stvari, ampak povsod. Recimo, da odprete svoj račun v banki.

Vanj vstavite X količino denarja in želite vedeti, koliko zanimanja bi dobili.

Računovodja v banki bi nato v programsko opremo le vnesel številke o znesku, številu obdobja in obrestnih merah. Programska oprema za algoritme teče in daje rezultate.

Zdaj so ta rezultat izračunali algoritmi… del kode, ki že ima formule za izračun obresti. V našem primeru za preprosto zanimanje bi to bilo:

A = P (1 + rt)

A = znesek

P = glavno

R = obrestna mera

T = čas ali n

Zdaj ste najverjetneje že dobili idejo o tem, kateri algoritmi so. Samo ena stvar, ki jo morate upoštevati, če ste začetnik v programiranju, se ne in nikoli ne zamenjajte s funkcijami in algoritmi. Obe sta dve različni stvari.

Če imate kakšno zmedo, jih počistite in šele nato nadaljujte naprej.

Jeziki, matematika in algoritem

Nekaj ​​stvari je treba upoštevati, da je razumevanje matematike algoritmov najpomembnejše, če želite pisati boljše algoritme. Podobno je tudi z nepremagljivimi ali neprepustnimi algoritmi.

Ti algoritmi, ki jih imenujemo nepremagljivi, so le deli kode čiste matematike, ki problema ne bodo rešili brez zahtevanih delov. Recimo na primer: a + b = 20

Predpostavimo, da je a tukaj 5. Zdaj, če vem, da je a 5, potem je ta algoritem lahko zlomljiv. Če pa sploh ne vem, kaj je, potem še vedno obstaja možnost, da ta algoritem zlomim.

Način, da se zlomim, bi bil nekaj takega, kot bi ga na silo izsiljeval. Brute force pomeni preizkus vseh možnih kombinacij.

Torej, kar bi naredil, bi začel ugibati številke, kot so 1 + 19, 2 + 18, 3 + 17, 10 + 10 in tako naprej. Torej, zdaj bi se zgodila katera koli od obeh stvari.

Prva verjetnost je, da ker bi mi vse zgornje kombinacije odgovorile kot 20, bi lahko vsi algoritem pokvarili ta algoritem. Če pa je programator težko kodiral, da sprejme le 5 + 15, potem vse kombinacije ne bi delovale.

Ampak spet, ker preizkušam vse možne kombinacije, bi prišel čas, ko bi preizkusil 5 + 15 in to bi pokvarilo algoritem.

Spet bi programer lahko skušal omejiti omejeno število poskusov in veliko več varnostne strukture vmes, toda tudi za to imamo veliko orodij, da ga zaobidemo.

Nepremagljiv algoritem ali mit?

Vprašanje je torej, ali obstaja kaj imenovano kot nerazlomljiv algoritem ali je to samo mit. Odgovor je oboje. Pred kratkim sem na internetu bral nekaj stvari, kjer sem prebral znan citat:

"Nemogoče samo pomeni, da nihče ni preizkusil vseh rešitev."

Ja. Tako delujejo algoritmi. Vzemimo zgornji primer. Predpostavimo, da obstaja še en algoritem:

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

Da. Tako pišete nepremagljiv algoritem. Stvar je v spodobnem računalniku z dobro grafično kartico, ki to zlahka pokvari z oclhashcatom. Ampak to je samo primer. Tu so kombinacije lahko kakršne koli.

Odgovor je negativni devet, kar pomeni, da je v a, b, c, d, e in f lahko nekaj številk, ki so negativne, vsaj eno veliko število se odšteje z majhnim številom.

To me vrne k našim prvim primerom algoritmov a + b = 20. Tudi tukaj je lahko veliko več kombinacij, kot sta -1 + 21 ali -29354+ 29374. Razumevam.

Torej, teorija neprelomljivih algoritmov gre samo toliko, kot si človeški um lahko zamisli. Nezlomljivi algoritmi niso mit. Dobro napisan algoritem lahko traja do 2-3 ali celo več mesecev, da se računalnik celo pokvari, kot so WPA2, šifrirane stvari.

Stvar je v tem, da mora imeti potrpljenje, da ostane v duševnem miru, dokler se ne reši. Po matematiki ni takega algoritma, ki ga ni mogoče zrušiti. Potrebuje le nekoga, ki se zanj dejansko zanima.

Najboljši jeziki za pisanje algoritmov

Iskreno povedano, uradno ni posebnega jezika, ki bi bil odličen za pisanje algoritmov.

Vendar imajo funkcijski jeziki prednost, tako da so glede izračunov in matematike veliko boljši od drugih predmetno usmerjenih jezikov. Vendar bi samo algoritmi našteli nekaj takšnih, ki se mi zdijo dovolj dobri za kodiranje matematike v:

  • Python in Ruby

V prvi vrsti bi priporočil jezike na visoki ravni. Jezike na visoki ravni je najlažje doseči. Razlog za to je, da so ti jeziki lažji, ker so ti jeziki, za razliko od jezika C ali katerega koli drugega jezika nizke ravni, lažji za branje.

Tudi njihova sintaksa je tako enostavna, da bi jo čisto čisti začetnik razumel, ne da bi jih kdo učil.

Vse skupne strukture podatkov v teh jezikih imajo abstrakcije. Lahko celo sestavite svoje lastne implementirane različice in zgradite podatkovne strukture na strukturah podatkov. Ti jeziki se vtipkajo dinamično.

Vendar je tu le ena težava, da je programerju lahko lažje začeti, ko pa izvajajo teste, lahko opazi veliko napak, ki jih pred izvajanjem niso videli, za razliko od drugih jezikov nizke ravni.

  • C

C je ravno obratno od Pythona tukaj. Tu se boste morda celo zmedli, ker čeprav je C jezik na visoki ravni, ga nekateri ljudje zaradi načina kodiranja celo obravnavajo kot jezik na nizki ravni.

Tudi C je v smislu abstrakcije tukaj zelo dober. Če se ukvarjate z algoritmi, boste morda pozneje enega ali drugega dne morali naučiti pravilne jezike nizke ravni, kot je sestavljanje.

Če C zelo dobro poznate, bi bilo enostavno prestopiti s jezika C ali katerega koli podobnega jezika na jezik montaže. Upravljanje spomina je tudi pri C zelo dobro in to je zelo pomembno za algoritme.

  • Java

Veliko ljudi dejansko sovraži Javo, ker je preveč besedna in stroga. Celo nekateri pravijo, da nima veliko funkcij, ki so na voljo v sodobnih prefinjenih jezikih. Vendar to pravzaprav ne pomeni, da bi se morali zastavljati.

Java, za razliko od Pythona, ni dinamično vtipkan jezik. Je statično vtipkan jezik in vsebuje veliko smeti.

To pomeni, da bo Java dejansko prikazala napake med prevajanjem in še pred izvajanjem. V primerjavi z drugimi jeziki na visoki ravni ima Java izjemno malo uhajanja pomnilnika, ki ga je očitno mogoče odpraviti in nima napak v segmentaciji.

  • C # in C ++

C # je skoraj podoben Javi. Bolj je podobna Javi z zmogljivostmi modernega jezika. Nekateri radi uporabljajo celo C ++. Je pa izredno nepotrebno zapleteno.

Nekateri jo uporabljajo, ker jo je težko razumeti, a ko jo enkrat uspeš, bo res težko razumel tvoje algoritme, zaradi česar je popoln za to delo. Po drugi strani ima C # nabiranje smeti podobno kot pri Javi.

Obstajajo tudi drugi funkcionalni jeziki, kot sta Haskell (družina Lisp) in Scala (temelji na Javi). Na njih lahko preberete druge moje bloge, kjer sem podrobno napisal, kako delujejo in kako se ukvarjajo. Java, C in C ++ delujejo na enem ali drugem virtualnem računalniku.

Medtem ko sta Ruby in Python tolmača svojega tolmača.

Če vprašate mene, bi raje C #, saj ima vse sodobne zmogljivosti in bi tudi lažje prenašal na nižje programske jezike. V znanstvenem smislu ima lastnosti Java, Scala, C in jezikov nižje stopnje.

Če želite samo začeti z algoritmi, bi verjetno morali razmisliti o uporabi vizualne izdaje skupnosti Studio Edition ali Visual studio express. Verjetno bi ga morali kupiti, le da bi v primeru pythona večina stvari, ki jih želite, bila brezplačna.

Priporočeni članki: -

Tukaj je nekaj člankov, ki vam bodo pomagali do podrobnosti o programskih jezikih za učenje algoritmov, zato pojdite po povezavi.

  1. 8 Vprašanja in odgovori za osupljiv algoritem in intervju
  2. Najboljši algoritmi in kriptografija (primeri)
  3. Najboljše podatkovne strukture in algoritmi C ++ | Osnove
  4. Intervju podatkovnih struktur in algoritmov