Kujutise allikas: pixabay.com

Programmeerimiskeeled algoritmide õppimiseks

Niisiis, enne kui ma alustan oma raskete suurtükitoodetega keelte ja nende maskide kohta algoritmidega, andke kõigepealt teada, millised on algoritmid.

Võib-olla olete seda kuulnud filmides, eriti sellistes filmides nagu The Swordfish või muudes wannabe-häkkimisfilmides, kus häkker väidab midagi sellist: kui ma lähen ja muutan algoritmi ning lisan blah bla ja blah, siis on mul võimalus CIA-sse häkkida. ja värki.

Kuid see on üsna hiilgav. Sellist asja pole olemas. Algoritmid pole mõeldud ainult häkkimiseks.

Esiteks, algoritmid lihtsalt andmestruktuurid. Need on meetod või viis asjade tegemiseks, tõenäolisemalt algoritmidega seotud probleemide lahendamiseks. Ikka segane, lubage mul seda käsitleda lihtsamal viisil.

Mõelge algoritmidele kui valemitele. Valemid, mis aitavad teil oma ülesannet ilma suurema vaevata täita. Midagi järgmist:

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

Kuid need on üsna lihtsad. Õigetest algoritmidest on palju rohkem kasu kui lihtsalt (a + b). Neid algoritme kasutatakse pankades, kuid mitte ainult turvalisuse ja muude asjade jaoks, vaid kõikjal. Oletame, et avate oma konto pangas.

Sisestad sinna X rahasumma ja soovid teada saada, kui palju intressi sa saaksid.

Panga raamatupidaja paneks siis lihtsalt numbrid summa, perioodi arvu ja intressimäära kohta kasti. Algoritmide tarkvara töötab ja annab teile väljundi.

Nüüd arvutati see väljund algoritmide abil… kooditükk, millel on juba valemid intressi arvutamiseks. Meie lihtsa huvi korral oleks see järgmine:

A = P (1 + rt)

A = summa

P = printsipaal

R = intressimäär

T = aeg või n

Nüüd peate tõenäoliselt saama idee algoritmide kohta. Üks asi, mida tuleks meeles pidada, kui olete programmeerimise algaja, see ei lähe kunagi segadusse funktsioonide ja algoritmidega. Mõlemad on kaks erinevat asja.

Kui teil on segadust, eemaldage need lihtsalt ja jätkake alles siis.

Keeled, matemaatika ja algoritm

Mõne asja juures tuleb meeles pidada, et algoritmide mõistmine on kõige olulisem, kui soovite kirjutada paremaid algoritme. Sarnane on ka purunematute või lollikindlate algoritmide puhul.

Need purunematuks nimetatud algoritmid on lihtsalt puhta matemaatika kooditükid, mis ei lahenda probleemi ilma vajalike osadeta. Ütleme näiteks: a + b = 20

Oletame, et siin on 5. Kui ma nüüd tean, et a on 5, võib see algoritm kergesti puruneda. Kuid kui ma isegi ei tea, mis see on, siis on siiski võimalus, et suudan selle algoritmi lahti mõtestada.

Tee lõhenemiseks oleks midagi sellist, nagu ma seda julmalt sunniksin. Jõhker jõud tähendab iga võimaliku kombinatsiooni proovimist.

Mida ma teeksin, oleksin hakanud arvama selliseid numbreid nagu 1 + 19, 2 + 18, 3 + 17, 10 + 10 ja nii edasi. Niisiis, nüüd juhtuks kumbki kahest asjast.

Esimene tõenäosus on see, et kuna kõik ülaltoodud kombinatsioonid annaksid mulle vastuse 20, võiksid nad kõik selle algoritmi purustada. Kuid kui programmeerija on selle kõvasti kodeerinud aktsepteerima ainult 5 + 15, siis kõik kombinatsioonid ei töötaks.

Kuid jällegi, kuna ma proovin kõiki võimalikke kombinatsioone, oleks aeg, kus prooviksin 5 + 15 ja see purustaks algoritmi.

Programmeerija võiks jällegi proovida hoida piiratud arvu katseid ja palju rohkem turvastruktuuri vahepeal, kuid isegi selleks on meil selleks palju tööriistu, et sellest mööda minna.

Purunematu algoritm või müüt?

Niisiis, küsimus on selles, kas leidub midagi, mida nimetatakse purunematuks algoritmiks, või on see lihtsalt müüt. Vastus on mõlemad. Lugesin hiljuti Internetis mõnda kraami, kus lugesin kuulsat tsitaati:

"Võimatu tähendab ainult seda, et kõiki lahendusi pole proovitud."

Jah. Nii töötavad algoritmid. Võtame ülaltoodud juhtumi. Oletame, et on veel üks algoritm, mis kehtib järgmiselt:

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

Jah. Nii kirjutate purunematu algoritmi. Asi on korralikus hea graafikakaardiga arvutiga, mis saab selle oclhashcat abil hõlpsalt lahti saada. Kuid see on vaid näide. Siin võivad kombinatsioonid olla ükskõik millised.

Vastus on eitav üheksa, mis tähendab, et punktides a, b, c, d, e ja f võib olla mõni arv, mis on negatiivsed, vähemalt ühe suure arvu lahutamisel väikese arvuga.

See viib mind tagasi meie algoritmi näidete juurde a + b = 20. Isegi siin võib olla palju rohkem kombinatsioone, näiteks -1 + 21 või -29354+ 29374. Minu mõte.

Niisiis, purunematu algoritmi teooria ulatub ainult nii kaugele, kui inimese mõistus suudab välja mõelda. Purunematud algoritmid pole müüt. Hästi kirjutatud algoritmil võib isegi arvuti abil toimuva purustamiseks kuluda kuni 2-3 kuud või isegi rohkem, nagu näiteks WPA2 krüptitud kraam.

Asi on selles, et inimesel peab olema kannatlikkust, et jääda vaimsesse rahu, kuni see lahendatakse. Matemaatika järgi pole sellist algoritmi, mida ei saaks krakitada. Selleks on vaja lihtsalt kedagi, kes selle vastu tegelikult huvi tunneks.

Parimad keeled algoritmide kirjutamiseks

Ausalt öeldes ei ole ametlikult ühtegi konkreetset keelt, mis sobiks suurepäraselt algoritmide kirjutamiseks.

Funktsionaalsetel keeltel on aga ülimuslikkus, kuna nad on arvutuste ja matemaatika osas palju paremad kui muud objektorienteeritud keeled. Kuid siiski loetleksin mõned algoritmid neist, mis on minu arvates piisavalt head matemaatika kodeerimiseks:

  • Python ja Ruby

Kõigepealt soovitaksin kõrgetasemelisi keeli. Kõrgetasemelisi keeli on kõige lihtsam saada. Põhjus, miks need keeled on lihtsamad, on see, et erinevalt C või mis tahes muust madala taseme keelest on need keeled hõlpsamini loetavad.

Isegi nende süntaks on nii lihtne, et lihtsalt puhas algaja saaks sellest aru, ilma et keegi neid õpetaks.

Kõigis levinud andmestruktuurides nendes keeltes on abstraktsioonid. Saate luua isegi oma rakendatud versioone ja luua andmestruktuuridele tuginedes andmestruktuure. Neid keeli trükitakse dünaamiliselt.

Kuid siin on ainult üks probleem, millega programmeerijal võib olla lihtsam alustada, kuid testide käivitamisel võivad nad erinevalt teistest madala taseme keeltest näha palju vigu, mida nad enne tööaega ei näinud.

  • C

C on siin täpselt Pythoni vastand. Võite siin isegi segadusse minna, sest kuigi C on kõrgetasemeline keel, peavad mõned inimesed seda oma kodeerimise viisi tõttu isegi madala taseme keeleks.

Isegi C on siin abstraktsiooni mõttes väga hea. Kui olete algoritmides, peate võib-olla hiljem ühel või teisel päeval õppima korralikke madala taseme keeli, näiteks koostu.

Punkt on see, et kui teate C-d väga hästi, oleks üsna lihtne liikuda C-st või mis tahes sarnasest keelest montaažikeelde. Ka mäluhaldus on C-s väga hea ja see on algoritmide jaoks väga oluline.

  • Java

Paljud inimesed vihkavad Java tegelikult liiga sõnatu ja range olemise pärast. Isegi mõned inimesed ütlevad, et sellel puudub palju funktsioone, mis on saadaval tänapäevastes keerukates keeltes. Kuid see ei tähenda tegelikult muret.

Java, erinevalt Pythonist, ei ole dünaamiliselt trükitud keel. See on staatiliselt trükitud keel ja selles on palju prügivedu.

See tähendab, et Java näitab kompileerimise ajal ja isegi enne tööaega tõrkeid. Ja võrreldes teiste kõrgetasemeliste keeltega, on Java-l äärmiselt madal mälulekke, mida saab ilmselt parandada ja millel pole segmenteerimisvigu.

  • C # ja C ++

C # on peaaegu sarnane Javaga. See sarnaneb rohkem Javaga, millel on kaasaegse keele võimalused. Mõnele inimesele meeldib kasutada isegi C ++. Kuid see on äärmiselt asjatult keeruline.

Mõned inimesed kasutavad seda, kuna kuna sellest on raske aru saada, kuid kui teil õnnestub see lahti mõtestada, on inimestel raske teie algoritmide mõistmiseks raske aeg, mis muudab selle töö jaoks ideaalseks. C # -l on seevastu prügivedu, mis sarnaneb Java omaga.

On ka teisi funktsionaalseid keeli, näiteks Haskell (Lisp Family) ja Scala (Java baasil). Te saate lugeda nende teiste minu ajaveebide kohta, kus ma olen üksikasjalikult kirjutanud, kuidas nad töötavad ja asju ajavad. Java, C ja C ++ töötavad kõik ühel või teisel virtuaalmasinal.

Ruby ja Python on nende tõlkide tõlgid.

Kui te minult küsiksite, eelistaksin C #, kuna sellel on kõik kaasaegsed võimalused ja see hõlbustaks ka madalamate programmeerimiskeelte teisaldamist. Teaduslikus mõttes on sellel Java, Scala, C ja madalama taseme keelte omadused.

Kui soovite lihtsalt algoritmidega alustada, võiksite arvatavasti kaaluda visuaalstuudio kogukonna väljaande või Visual studio expressi kasutamist. Tõenäoliselt peaksite selle ostma, välja arvatud see, et pütooni korral oleks enamik soovitud asju tasuta.

Soovitatavad artiklid: -

Siin on mõned artiklid, mis aitavad teil saada üksikasjalikumat teavet algoritmide õppimiseks mõeldud programmeerimiskeelte kohta, nii et külastage lihtsalt linki.

  1. 8 vinge algoritmiga intervjuu küsimust ja vastust
  2. Parimad algoritmid ja krüptograafia (näited)
  3. Parimad andmestruktuurid ja algoritmid C ++ | Põhitõed
  4. Intervjuu andmestruktuuride ja algoritmidega

Kategooria: