Képforrás: pixabay.com

Programozási nyelvek az algoritmusok tanulásához

Tehát, mielőtt elkezdenék a nyelvekről és azok algoritmusokkal ellátott maszkjairól szóló nehéz tüzérségemmel foglalkozni, először tudd meg, mi az algoritmus.

Lehet, hogy hallotta már filmekben, különösen olyan filmekben, mint a Swordfish, vagy bármely más wannabe-hackelési filmben, amelyben a hacker kijelenti valami olyasmit, ha megyek, megváltoztatom az algoritmust, és hozzáadom bla-bla és bla-ot, majd képesek vagyok feltörni a CIA-ra. és dolog.

De ez elég zamatos. Nincs ilyen dolog. Az algoritmusok nemcsak a hackelésre szolgálnak.

Először az algoritmusok csak az adatstruktúrák. Ezek a módszerek vagy módok a dolgok elvégzéséhez, valószínűbben megoldják az algoritmusokkal kapcsolatos problémákat. Még mindig zavaros, hadd vegyék ezt egyszerűbb módon.

Gondolj az algoritmusokra mint formulákra. Olyan képletek, amelyek segítséget nyújtanak a feladat elvégzésében, anélkül, hogy túl sok lenne. Valami ehhez hasonló:

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

De ezek nagyon egyszerűek. A megfelelő algoritmusok sokkal hasznosabbak, mint egyszerűen (a + b). Ezeket az algoritmusokat a bankokban is használják, de nem csak a biztonság és az egyéb dolgok érdekében, hanem mindenhol. Tegyük fel, hogy bankszámlát nyitott.

Helyezzen be benne X összeget, és szeretné tudni, hogy milyen kamatot kapna.

A bank könyvelője ekkor csak egy számot helyez az összegbe, az időszak számába és a kamatlába egy szoftver dobozába. Az algoritmus szoftver fut, és megadja a kimenetet.

Ezt az outputot az algoritmusok kiszámították … a kóddarab, amely már rendelkezik a kamat kiszámításához szükséges képletekkel. Az egyszerű érdeklődés esetén a következők lennének:

A = P (1 + rt)

A = összeg

P = fő

R = kamatláb

T = Idő vagy n

Most valószínűleg elképzelést kell szereznie arról, hogy mi az algoritmus. Csak egy dolgot kell szem előtt tartani, ha kezdő vagy a programozásban, akkor ezt soha nem szabad összekeverni a funkciókkal és az algoritmusokkal. Mindkettő két különböző dolog.

Ha bármilyen zavarod van, csak törölje őket, és csak akkor folytassa tovább.

Nyelvek, matematika és algoritmus

Néhány dolgot kell szem előtt tartani, hogy az algoritmusok megértése a legfontosabb, ha jobb algoritmusokat szeretne írni. Hasonló a helyzet a törhetetlen vagy a bolond-mentes algoritmusok esetében is.

Ezek az algoritmusok, amelyeket törhetetlennek hívnak, csupán a tiszta matematika kódjai, amelyek a szükséges részek nélkül nem oldják meg a problémát. Tegyük fel például: a + b = 20

Tegyük fel, hogy az a itt 5. Most, ha tudom, hogy a 5, akkor ez az algoritmus könnyen törhető. De ha még csak nem is tudom, mi az, akkor továbbra is fennáll annak a lehetősége, hogy megtörjem ezt az algoritmust.

A repedés módja valami olyasmi, mint amit erőszakkal kényszerítenék. A brutális erő azt jelenti, hogy minden lehetséges kombinációt meg kell próbálni.

Tehát azt tenném, hogy elkezdek kitalálni az olyan számokat, mint 1 + 19, 2 + 18, 3 + 17, 10 + 10 és így tovább. Tehát most a két dolog történne.

Az első valószínűség az, hogy mivel a fenti kombinációk 20-os választ adnának nekem, mindegyik feltörheti ezt az algoritmust. De ha a programozó keményen kódolta, hogy csak 5 + 15-et fogadjon el, akkor az összes kombináció nem működne.

De ismét, mivel megpróbálom az összes lehetséges kombinációt, eljön az idő, amikor megpróbálom az 5 + 15-et, és ez feltörheti az algoritmust.

A programozó megint megpróbálhatta megtartani a korlátozott számú próbálkozást és sokkal több biztonsági struktúrát a között, de még ehhez is nagyon sok eszköz van, hogy megkerüljük.

Törhetetlen algoritmus vagy mítosz?

Tehát a kérdés az, hogy van-e valami törhetetlen algoritmus, vagy csak mítosz. A válasz mindkettő. Nemrég olvastam néhány dolgot az interneten, ahol egy híres idézetet olvastam:

„A lehetetlen csak azt jelenti, hogy az összes megoldást nem próbálták ki”

Igen. Így működnek az algoritmusok. Vegyük a fenti esetet. Tegyük fel, hogy van egy másik algoritmus, amely így szól:

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

Igen. Így írhat egy törhetetlen algoritmust. A helyzet egy megfelelő számítógép, jó grafikus kártyával, ezt könnyen megtörheti az oclhashcat segítségével. De ez csak egy példa. A kombinációk itt bármilyenek lehetnek.

A válasz egy negatív kilenc, ami azt jelenti, hogy az a, b, c, d, e és f esetében lehet néhány negatív szám, amelyek közül legalább egy nagy számot kivonnak egy kis szám.

Ez visszavezet az a + b = 20 első algoritmus példáira . Még itt is sokkal több kombináció létezhet, mint például -1 + 21 vagy -29354+ 29374.

Tehát a törhetetlen algoritmusok elmélete csak annyira megy, amennyire az emberi elme képes gondolni. A törhetetlen algoritmusok nem mítosz. Egy jól megírt algoritmus akár 2-3 hónapot is igénybe vehet, hogy akár számítógép is feltörje, például a WPA2 titkosított cucc.

A helyzet az, hogy türelemmel kell élnie a mentális békében, amíg megoldódik. A matematika szerint nincs olyan algoritmus, amelyet nem lehet megtörni. Csak arra van szüksége, hogy valaki ténylegesen érdeklődjön az iránt.

A legjobb nyelvek algoritmusok írásához

Őszintén szólva, hivatalosan nincs olyan nyelv, amely kiválóan alkalmas az algoritmusok írására.

A funkcionális nyelvek azonban felsőbbrendűek, ennek oka, hogy sokkal jobbak, mint a számítások és a matematika, mint a többi objektum-orientált nyelv. De az algoritmusok közül néhányat felsorolnék, amelyek elég jónak bizonyulnak a matematika kódolásához:

  • Python és Ruby

Mindenekelőtt a magas szintű nyelveket ajánlom. A magas szintű nyelvekkel a legkönnyebb megismerkedni. Ezeknek a nyelveknek a könnyebb oka az, hogy ellentétben a C vagy más alacsony szintű nyelvvel, ezek a nyelvek könnyebben elérhetők az olvasás szempontjából.

Még a szintaxisuk is olyan egyszerű, hogy csak egy tiszta kezdő tudná megérteni anélkül, hogy bárki megtanítaná őket.

Az ezeken a nyelveken alkalmazott összes általános adatszerkezet absztrakcióval rendelkezik. Akár saját megvalósított verziókat is készíthet, és adatszerkezeteket építhet az adatszerkezetekre. Ezeket a nyelveket dinamikusan gépeljük be.

De itt csak egy probléma merül fel, amikor a programozó könnyebben indulhat el, de amikor teszteket futtatnak, sok hibát láthatnak, amelyeket a futásidő előtt nem láttak, ellentétben más alacsony szintű nyelvekkel.

  • C

C pontosan ellentétes a Python-lal. Itt is megzavarhatja, mert bár a C magas szintű nyelv, néhány ember a kódolási módja miatt alacsony szintű nyelvnek is tartja.

Még a C is nagyon jó absztrakció szempontjából. Ha algoritmusokat vesz igénybe, később előfordulhat, hogy egyik vagy másik nap el kell tanulnia a megfelelő alacsony szintű nyelveket, például a szerelvényt.

A lényeg az, hogy ha nagyon jól ismeri a C-t, akkor nagyon könnyű lenne áttérni a C vagy bármilyen hasonló nyelvről a közgyűlés nyelvére. A memóriakezelés a C-ben is nagyon jó, és ez nagyon fontos az algoritmusoknál.

  • Jáva

Nagyon sok ember utálja a Java-t, mert túl szóbeli és szigorú. Még néhányan azt mondják, hogy hiányzik sok olyan funkció, amely elérhető a modern kifinomult nyelveken. De ez valójában nem utal aggodalomra.

A Java, a Python-nal ellentétben, nem dinamikusan tipizált nyelv. Ez statikusan tipizált nyelv, rengeteg szemetet gyűjt.

Ez azt jelenti, hogy a Java valóban hibákat fog mutatni fordítás során és még futásidej előtt is. A többi magas szintű nyelvhez képest a Java memóriaszivárgása rendkívül alacsony, amely nyilvánvalóan javítható, és nincs szegmentálási hibája.

  • C # és C ++

A C # majdnem hasonló a Java-hoz. Több, mint a Java, a modern nyelv képességeivel. Néhányan szeretik akár a C ++ -ot is használni. De ez rendkívül szükségtelenül bonyolult.

Vannak, akik ezt használják, mert mivel nehéz megérteni, de ha sikerül megtörni, az embereknek komoly nehéz idő lesz megérteni az algoritmusaikat, ami tökéletesvé teszi ezt a munkát. A C # viszont a Javahoz hasonló hulladékgyűjtéssel rendelkezik.

Vannak más funkcionális nyelvek is, például a Haskell (Lisp Family) és a Scala (Java alapú). Elolvashatja a többi blogomat, ahol részletesen írtam arról, hogyan működnek és mi a dolguk. A Java, C és C ++ egy vagy másik virtuális gépen futnak.

Míg a Ruby és a Python tolmácsok.

Ha kérdezel, inkább a C #-t részesítenék előnyben, mivel rendelkezik minden modern képességgel, és megkönnyítené az alacsonyabb programozási nyelvek portolását. Tudományos szempontból a Java, a Scala, a C és az alacsonyabb szintű nyelvek tulajdonságai.

Ha csak az algoritmusokkal szeretné kezdeni, akkor valószínűleg megfontolhatja a Visual Studio Community Edition vagy a Visual studio Express használatát. Ezt valószínűleg meg kell vásárolnia, kivéve azt, hogy python esetén a legtöbb cucc ingyenes lesz.

Ajánlott cikkek: -

Íme néhány cikk, amely segít részletesebben megtudni az algoritmusok elsajátításához szükséges programozási nyelveket, így csak keresse meg a linket.

  1. 8 félelmetes algoritmusos interjú kérdése és válasz
  2. A legjobb algoritmusok és kriptográfia (példák)
  3. Legjobb adatszerkezetek és algoritmusok C ++ alapjai
  4. Adatruktúrák és algoritmusok Interjú

Kategória: