Izvor slike: pixabay.com

Programiranje jezika za učenje algoritama

Dakle, prije nego što započnem s mojom teškom artiljerijom o jezicima i njihovim maskama s algoritmima, neka prvo znate što su algoritmi.

Možda ste to čuli u filmovima, posebno filmovima poput The Swordfish ili bilo kojeg drugog filma o hakiranju wannabea u kojem haker navodi nešto poput ako odem i promijenim algoritam i dodam bla i bla, tada ću moći upasti u CIA i stvari.

Ali to je prilična glupost. Ne postoji tako nešto. Algoritmi nisu namijenjeni samo hakiranju.

Prvo prvo, algoritmi samo strukture podataka. Oni su metoda ili način vršenja stvari, vjerojatnije da će se riješiti problemi s algoritmima. Još uvijek zbunjen, dopustite mi da uzmem ovo na jednostavniji način.

Zamislite algoritme kao formule. Formule koje vam mogu pomoći bez zadrške u izvršavanju zadatka. Nešto poput sljedećeg:

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

Ali to su prilično jednostavne. Pravilni algoritmi su mnogo korisniji nego samo (a + b). Ovi se algoritmi koriste u bankama, ali ne samo za sigurnost i druge stvari, već i svugdje. Recimo da otvorite svoj račun u banci.

U njega umetnete X iznos novca i želite znati iznos kamate koji biste dobili.

Računovođa u banci tada bi u softver samo unijela brojeve u iznosu, broju razdoblja i kamatnoj stopi. Softver za algoritme pokreće i daje vam izlaz.

Taj je rezultat izračunao algoritam … dio koda koji već sadrži formule za izračun kamata. U našem slučaju za jednostavan interes, to bi bilo:

A = P (1 + rt)

A = Iznos

P = glavno

R = Kamatna stopa

T = Vrijeme ili n

Sada ste najvjerojatnije stekli ideju o tome koji su algoritmi. Samo, jedna stvar koju treba imati na umu ako ste početnik u programiranju, a to se ne može i nikad ne brkati sa funkcijama i algoritmima. Obje su dvije različite stvari.

Ako imate bilo kakve zabune, samo ih uklonite i tek tada nastavite dalje.

Jezici, matematika i algoritam

Nekoliko stvari koje morate imati na umu da je razumijevanje matematike algoritama najvažnije kada želite pisati bolje algoritme. Slično je i u slučaju neraskidivih algoritama koji ne moraju postojati i bez gluposti.

Ovi algoritmi koji se nazivaju neraskidivima samo su dijelovi koda čiste matematike koji neće riješiti problem bez traženih dijelova. Recimo za primjer: a + b = 20

Pretpostavimo da je ovdje 5. Dakle, ovdje ako znam da je a 5, onda se ovaj algoritam može vrlo lako pokvariti. No, ako i ne znam što je, onda još uvijek postoji mogućnost da ovaj algoritam probijem.

Način za pucanje bio bi nešto poput čega bih ga na silu silovao. Brute force znači isprobavanje svake moguće kombinacije.

Dakle, ono što bih učinio je da bih započeo pogađati brojeve poput 1 + 19, 2 + 18, 3 + 17, 10 + 10 i tako dalje. Dakle, sada bi se dogodila bilo koja od dvije stvari.

Prva vjerojatnost je da, budući da bi mi sve gore navedene kombinacije dale odgovor kao 20, sve bi mogle pokvariti ovaj algoritam. Ali, ako je programer tvrdo kodirao da prihvaća samo 5 + 15, tada sve kombinacije neće uspjeti.

Ali opet, budući da isprobam sve moguće kombinacije, bilo bi vrijeme kada bih isprobao 5 + 15 i to bi pokvarilo algoritam.

Opet, programer bi mogao pokušati zadržati između sebe ograničen broj pokušaja i mnogo veću sigurnosnu strukturu, ali čak i za to, imamo puno alata da ga zaobiđu.

Neraskidivi algoritam ili mit?

Dakle, pitanje je postoji li nešto što se naziva neraskidivim algoritmom ili je to samo mit. Odgovor je oboje. Nedavno sam na internetu čitao neke stvari u kojima sam pročitao poznati citat:

"Nemoguće samo znači da neko nije isprobao sva rješenja"

Da. Tako rade algoritmi. Uzmimo gornji slučaj. Pretpostavimo da postoji još jedan algoritam koji glasi:

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

Da. Ovako pišete neraskidivi algoritam. Stvar je u tome što pristojno računalo s dobrom grafičkom karticom ovo može lako pokvariti oclhashcatom. Ali to je samo primjer. Ovdje kombinacije mogu biti poput bilo čega.

Odgovor je negativan devet, što znači da u a, b, c, d, e i f može biti nekoliko brojeva koji su negativni, barem jedan veliki broj koji se oduzima od malog broja.

To me vraća na naše prve primjere algoritama od + b = 20. Čak i ovdje može biti puno više kombinacija poput -1 + 21 ili -29354+ 29374. Upućivanje na to.

Dakle, teorija neraskidivih algoritama ide samo onoliko koliko ljudski um može smisliti. Neraskidivi algoritmi nisu mit. Dobro napisan algoritam može potrajati 2-3 ili čak i više mjeseci da se čak i računalo pokvari, poput tih stvari zaštićenih WPA2.

Stvar je u tome što čovjek mora imati strpljenja da ostane u mentalnom miru dok se ne riješi. Prema matematici, ne postoji takav algoritam koji se ne može probiti. Samo treba nekoga da se zapravo zainteresira za to.

Najbolji jezici za pisanje algoritama

Iskreno govoreći, službeno ne postoji određeni jezik koji je vrhunski za pisanje algoritama.

Međutim, funkcionalni jezici imaju prednost, a što se tiče računanja i matematike su mnogo superiorniji od ostalih objektno orijentiranih jezika. Ali, samo bih algoritam nabrojao nekoliko njih za koje smatram da su dovoljno dobre za kodiranje matematike u:

  • Python i Ruby

Prije svega, preporučio bih jezike visoke razine. Jezici na visokoj razini lakše se snalaze. Razlog zašto su ovi jezici lakši je taj što su za razliku od jezika C ili bilo kojeg drugog jezika niske razine lakši za čitanje.

Čak je i njihova sintaksa tako jednostavna da bi je samo čisti početnik razumio bez da ih je itko podučavao.

Sve uobičajene strukture podataka na ovim jezicima imaju apstrakcije. Možete čak i graditi vlastite implementirane verzije i graditi podatkovne strukture na strukturama podataka. Ti se jezici uvode dinamički.

No, ovdje postoji samo jedan problem koji programeru može biti lakše s tim, ali kad pokreću testove, mogu vidjeti puno pogrešaka koje nisu vidjeli prije izvođenja, za razliku od drugih jezika niske razine.

  • C

C je upravo suprotno od Pythona ovdje. Ovdje se čak možete i zbuniti jer iako je jezik visoke razine neki ga čak smatraju i jezikom niske razine zbog načina kodiranja.

Čak je i C vrlo dobar u pogledu apstrakcije. Ako se bavite algoritmima, kasnije ćete možda trebati jedan ili drugi dan da naučite pravilne jezike niske razine poput sastavljanja.

Ako se C dobro poznaje, vrlo je lako migrirati s C ili bilo kojeg sličnog jezika na skupni jezik. Upravljanje memorijom je također vrlo dobro u C i to je vrlo važno za algoritme.

  • Java

Puno ljudi zapravo mrzi Javu jer je previše složena i stroga. Čak neki kažu da mu nedostaje mnoštvo značajki koje su dostupne na modernim sofisticiranim jezicima. Ali to zapravo ne treba biti zabrinuto.

Java, za razliku od Pythona, nije dinamički tipkan jezik. To je statički tip jezika i ima mnoštvo odvoza smeća.

To znači da će Java zapravo prikazivati ​​pogreške tijekom sastavljanja, pa čak i prije izvođenja. A u usporedbi s drugim jezicima visoke razine, Java ima izuzetno nizak nivo curenja memorije koji se očito može popraviti i nema grešaka u segmentaciji.

  • C # i C ++

C # je gotovo sličan Javi. Više sliči Javi sa mogućnostima modernog jezika. Neki vole koristiti čak C ++. Ali to je krajnje nepotrebno komplicirano.

Neki ga koriste jer je to teško razumjeti, ali jednom kad ga uspijete probiti, ljudi će ozbiljno imati vremena razumjeti vaše algoritme, što ga čini savršenim za posao. Sa druge strane, C # ima skupljanje smeća slično kao na Javi.

Postoje i drugi funkcionalni jezici poput Haskell-a (obitelj Lisp) i Scala (temeljenog na Javi). Na njima možete pročitati i moje ostale blogove gdje sam detaljno napisao o tome kako djeluju i kako rade. Java, C i C ++ svi rade na jednom ili drugom virtualnom stroju.

Dok su Ruby i Python na njihovom tumačenju.

Ako mene pitate, više bih volio C #, jer ima sve moderne mogućnosti i također bi olakšao prijenos na niže programske jezike. Znanstveno gledano, ona ima svojstva Java, Scala, C i jezika niže razine.

Ako samo želite započeti s algoritmima, vjerojatno biste mogli razmotriti korištenje izdanja vizualne zajednice zajednice ili Visual studio express. Vjerojatno biste ga trebali kupiti, osim što u slučaju pytona, većina stvari koje želite bila bi besplatna.

Preporučeni članci: -

Evo nekoliko članaka koji će vam pomoći da saznate više detalja o jezicima programiranja za učenje algoritama, pa samo prođite vezu.

  1. 8 Pitanja i odgovori za intervju sa strahovitim algoritmom
  2. Najbolji algoritmi i kriptografija (primjeri)
  3. Najbolje strukture podataka i algoritmi C ++ | Osnove
  4. Intervju sa strukturom podataka i algoritmima

Kategorija: