Afbeeldingsbron: pixabay.com

Programmeertalen voor het leren van algoritmen

Dus, voordat ik begin met mijn zware artillerie-dingen over talen en hun maskers met algoritmen, laat ik eerst weten wat algoritmen zijn.

Je hebt het misschien gehoord in films, vooral films zoals The Swordfish, of elke andere wannabe-hackfilm waarin de hacker zoiets zegt als als ik het algoritme ga wijzigen en blah blah en blah toevoeg, dan kan ik de CIA hacken en dingen.

Maar dat is behoorlijk wartaal. Zoiets bestaat niet. Algoritmen zijn niet alleen bedoeld om te hacken.

Allereerst, algoritmen alleen datastructuren. Ze zijn een methode of een manier om dingen te doen, waarschijnlijker om algoritmenproblemen op te lossen. Nog steeds in de war, laat me dit eenvoudiger nemen.

Zie Algoritmen als formules. Formules die u zonder veel moeite kunnen helpen uw taak uit te voeren. Zoiets als het volgende:

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

Maar deze zijn vrij eenvoudig. Juiste algoritmen zijn veel nuttiger dan alleen (a + b). Deze algoritmen worden gebruikt in banken, maar niet alleen voor beveiliging en zo, maar overal. Stel dat u uw account bij een bank opent.

Je steekt er X geld in en wilt weten hoeveel rente je zou krijgen.

De accountant in de bank zou dan gewoon de cijfers met betrekking tot het bedrag, het aantal periode en de rentevoet in een doos in een software plaatsen. De algoritmesoftware wordt uitgevoerd en geeft u de uitvoer.

Nu werd deze uitvoer berekend door de algoritmen … het stuk code dat al de formules heeft om rente te berekenen. In ons geval voor eenvoudige interesse zou het zijn:

A = P (1 + rt)

A = bedrag

P = opdrachtgever

R = rentevoet

T = Tijd of n

Nu moet je waarschijnlijk een idee hebben gekregen over wat algoritmen zijn. Eén ding om in gedachten te houden als u een beginner bent in programmeren, dat niet en nooit verward raakt met functies en algoritmen. Beide zijn twee verschillende dingen.

Als je enige verwarring hebt, haal ze dan gewoon weg en ga dan verder.

Talen, wiskunde en algoritme

Weinig dingen om in gedachten te houden, dat het begrijpen van algoritmen wiskunde het belangrijkste is als je betere algoritmen wilt schrijven. Hetzelfde is het geval met onbreekbare of fool-proof algoritmen.

Deze algoritmen die onbreekbaar worden genoemd, zijn stukjes code van pure wiskunde die het probleem niet oplossen zonder de vereiste onderdelen. Laten we bijvoorbeeld zeggen: a + b = 20

Laten we aannemen dat a hier 5 is. Nu, als ik weet dat a 5 is, kan dit algoritme gemakkelijk breekbaar zijn. Maar als ik niet eens weet wat een is, dan is er nog steeds een mogelijkheid dat ik dit algoritme kan kraken.

De manier om te kraken zou zoiets zijn als ik het bruut zou forceren. Brute kracht betekent proberen elke mogelijke combinatie.

Dus wat ik zou doen is dat ik zou beginnen met het raden van getallen zoals 1 + 19, 2 + 18, 3 + 17, 10 + 10 enzovoort. Dus nu zou een van de twee dingen gebeuren.

De eerste kans is dat, aangezien alle bovenstaande combinaties mij het antwoord als 20 zouden geven, ze allemaal dit algoritme zouden kunnen kraken. Maar als de programmeur het hard heeft gecodeerd om alleen 5 + 15 te accepteren, zouden alle combinaties niet werken.

Maar nogmaals, omdat ik alle mogelijke combinaties probeer, zou er een tijd zijn dat ik 5 + 15 zou proberen en dat zou het algoritme kraken.

Nogmaals, de programmeur zou kunnen proberen het beperkte aantal pogingen en veel meer beveiligingsstructuren ertussen te houden, maar zelfs daarvoor hebben we veel tools om het te omzeilen.

Onbreekbaar algoritme of mythe?

De vraag is dus of er iets wordt genoemd als een onbreekbaar algoritme of is het gewoon een mythe. Het antwoord is beide. Ik las onlangs wat dingen op internet, waar ik een beroemd citaat las:

"Onmogelijk betekent alleen dat men niet alle oplossingen heeft geprobeerd"

Ja. Dat is hoe algoritmen werken. Laten we het bovenstaande geval nemen. Laten we aannemen dat er een ander algoritme is dat gaat als:

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

Ja. Dit is hoe je een onbreekbaar algoritme schrijft. Het ding is dat een fatsoenlijke computer met een goede grafische kaart dit gemakkelijk kan kraken met oclhashcat. Maar dat is slechts een voorbeeld. Hier kunnen de combinaties van alles zijn.

Het antwoord is een Negatief negen, wat betekent dat in a, b, c, d, e en f een aantal getallen negatief kunnen zijn, waarbij ten minste één groot getal wordt afgetrokken door een klein getal.

Dit brengt me terug naar onze eerste algoritme-voorbeelden van a + b = 20. Zelfs hier kunnen er nog veel meer combinaties zijn, zoals -1 + 21 of -29354+ 29374. Ik begrijp het.

De theorie van onbreekbare algoritmen gaat dus alleen zover als een menselijke geest kan bedenken. Onbreekbare algoritmen zijn geen mythe. Een goed geschreven algoritme kan tot 2-3 of zelfs meer maanden duren om te kraken, zelfs door een computer, zoals dat WPA2-gecodeerde spul.

Het ding is, men moet het geduld hebben om in mentale vrede te blijven totdat het wordt opgelost. Volgens de wiskunde bestaat er geen dergelijk algoritme dat niet kan worden gekraakt. Het heeft gewoon iemand nodig om er echt interesse in te hebben.

Beste talen om algoritmen te schrijven

Eerlijk gezegd is er officieel geen specifieke taal die uitstekend is voor het schrijven van algoritmen.

Functionele talen hebben echter de overhand, omdat ze veel beter zijn in termen van berekeningen en wiskunde dan andere objectgeoriënteerde talen. Maar ik zou echter slechts enkele algoritmen opsommen die ik goed genoeg vind om wiskunde te coderen:

  • Python en Ruby

Allereerst zou ik talen op hoog niveau aanbevelen. Talen op hoog niveau zijn het gemakkelijkst om mee om te gaan. De reden waarom deze talen gemakkelijker zijn, is omdat deze talen, in tegenstelling tot C of een andere taal op laag niveau, gemakkelijker te lezen zijn.

Zelfs hun syntaxis is zo eenvoudig, dat alleen een pure beginner het zou begrijpen zonder dat iemand het hen onderwees.

Alle gemeenschappelijke gegevensstructuren in deze talen hebben abstracties. U kunt zelfs uw eigen geïmplementeerde versies bouwen en datastructuren op datastructuren bouwen. Deze talen worden dynamisch getypt.

Maar er is hier slechts één probleem waarmee het voor een programmeur gemakkelijker kan zijn om mee te beginnen, maar wanneer ze tests uitvoeren, zien ze mogelijk veel fouten die ze niet vóór runtime zagen, in tegenstelling tot andere talen op laag niveau.

  • C

C is precies het tegenovergestelde van Python hier. Je kunt hier zelfs in de war raken, want hoewel C een taal op hoog niveau is, beschouwen sommige mensen het zelfs als een taal op laag niveau vanwege de manier van coderen.

Zelfs C is hier erg goed in abstractie. Als u van algoritmen houdt, moet u misschien op een later tijdstip de ene of de andere dag de juiste talen op laag niveau leren, zoals de assemblage.

Als je C heel goed kent, zou het vrij eenvoudig zijn om te migreren van C of een vergelijkbare taal naar assembler. Geheugenbeheer is ook erg goed in C en dit is erg belangrijk voor algoritmen.

  • Java

Veel mensen haten Java eigenlijk omdat het te uitgebreid en streng is. Zelfs sommige mensen zeggen dat het veel functies mist die beschikbaar zijn in moderne geavanceerde talen. Maar dit duidt er eigenlijk niet op.

Java is, in tegenstelling tot Python, geen dynamisch getypte taal. Het is een statisch getypte taal en heeft veel afvalinzameling.

Dit betekent dat Java tijdens het compileren en zelfs vóór runtime daadwerkelijk fouten zal tonen. En in vergelijking met andere talen op hoog niveau, heeft Java een extreem laag geheugenlek dat duidelijk kan worden opgelost en geen segmentatiefouten heeft.

  • C # en C ++

C # is bijna vergelijkbaar met Java. Het lijkt meer op Java met de mogelijkheden van de moderne taal. Sommige mensen gebruiken zelfs C ++. Maar het is buitengewoon onnodig ingewikkeld.

Sommige mensen gebruiken het omdat het moeilijk te begrijpen is, maar als het je eenmaal lukt om het te kraken, zullen mensen het moeilijk hebben om je algoritmen te begrijpen, waardoor het perfect is voor het werk. C # heeft daarentegen een afvalinzameling die vergelijkbaar is met die van Java.

Er zijn ook andere functionele talen zoals Haskell (Lisp Family) en Scala (gebaseerd op Java). Je kunt mijn andere blogs over hen lezen waar ik gedetailleerd heb geschreven over hoe ze werken en zo. Java, C en C ++ draaien allemaal op de ene of de andere virtuele machine.

Terwijl Ruby en Python tolken zijn op hun tolk.

Als je het mij vraagt, geef ik de voorkeur aan C #, omdat het over alle moderne mogelijkheden beschikt en het ook gemakkelijker zou maken om naar lagere programmeertalen over te zetten. In wetenschappelijke termen heeft het de eigenschappen van Java, Scala, C en talen van een lager niveau.

Als je gewoon met algoritmen wilt beginnen, zou je waarschijnlijk kunnen overwegen om de Visual Studio Community Edition of Visual Studio Express te gebruiken. Dat zou je waarschijnlijk moeten kopen, behalve dat in het geval van python de meeste dingen die je wilt gratis zijn.

Aanbevolen artikelen: -

Hier zijn enkele artikelen die u zullen helpen om meer details te krijgen over de programmeertalen voor het leren van algoritmen, dus ga gewoon via de link.

  1. 8 geweldige vragen en antwoorden over het algoritme van het algoritme
  2. De beste algoritmen en cryptografie (voorbeelden)
  3. Beste gegevensstructuren en algoritmen C ++ | Basics
  4. Gegevensstructuren en algoritmen Interview