Bildquelle: pixabay.com

Programmiersprachen zum Lernen von Algorithmen

Also, bevor ich mit meinem schweren Artillerie-Zeug über Sprachen und ihre Masken mit Algorithmen beginne, lass uns zuerst wissen, was Algorithmen sind.

Sie haben es vielleicht in Filmen gehört, insbesondere in Filmen wie The Swordfish oder in anderen Möchtegern-Hacking-Filmen, in denen der Hacker behauptet, wenn ich den Algorithmus ändere und bla bla und bla hinzufüge, kann ich mich in die CIA hacken und Zeug.

Aber das ist ziemlich Kauderwelsch. So etwas gibt es nicht. Algorithmen sind nicht nur zum Hacken gedacht.

Das Wichtigste zuerst, Algorithmen nur Datenstrukturen. Sie sind eine Methode oder ein Weg, um Dinge zu tun, eher um Algorithmenprobleme zu lösen. Noch immer verwirrt, lassen Sie mich das einfacher nehmen.

Stellen Sie sich Algorithmen als Formeln vor. Formeln, die Ihnen helfen können, Ihre Aufgabe ohne viel Lärm fortzusetzen. So etwas wie das folgende:

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

Aber das ist ganz einfach. Geeignete Algorithmen sind viel nützlicher als nur (a + b). Diese Algorithmen werden in Banken nicht nur für Sicherheitszwecke, sondern überall eingesetzt. Angenommen, Sie eröffnen ein Konto bei einer Bank.

Sie geben X Geldbetrag ein und möchten wissen, welchen Zinsbetrag Sie erhalten würden.

Der Buchhalter in der Bank würde dann einfach die Zahlen in Bezug auf den Betrag, die Anzahl der Perioden und den Zinssatz in eine Box in einer Software eingeben. Die Algorithmensoftware wird ausgeführt und gibt die Ausgabe aus.

Diese Ausgabe wurde nun von den Algorithmen berechnet … dem Teil des Codes, der bereits die Formeln zur Berechnung der Zinsen enthält. In unserem Fall für einfaches Interesse wäre es:

A = P (1 + RT)

A = Betrag

P = Principal

R = Zinssatz

T = Zeit oder n

Wahrscheinlich haben Sie eine Vorstellung davon, was Algorithmen sind. Nur eine Sache, die Sie beachten sollten, wenn Sie Anfänger in der Programmierung sind, die nicht mit Funktionen und Algorithmen verwechselt wird. Beides sind zwei verschiedene Dinge.

Wenn Sie Verwirrung stiften, lassen Sie sie einfach klären und fahren Sie erst dann fort.

Sprachen, Mathematik und Algorithmus

Einige Dinge zu beachten, dass das Verstehen von Algorithmen Mathematik das Wichtigste ist, wenn Sie bessere Algorithmen schreiben möchten. Ähnliches gilt für unzerbrechliche oder narrensichere Algorithmen.

Diese Algorithmen, die als unzerbrechlich bezeichnet werden, sind nur Teile des Codes der reinen Mathematik, die das Problem ohne die erforderlichen Teile nicht lösen können. Sagen wir zum Beispiel: a + b = 20

Nehmen wir an, a ist hier 5. Wenn ich hier weiß, dass a 5 ist, kann dieser Algorithmus leicht zerbrechlich sein. Aber wenn ich nicht einmal weiß, was ein Algorithmus ist, besteht immer noch die Möglichkeit, dass ich diesen Algorithmus knacken kann.

Der Weg zu knacken wäre so etwas wie ich würde es brutal erzwingen. Brute Force bedeutet, jede mögliche Kombination auszuprobieren.

Ich würde also Zahlen wie 1 + 19, 2 + 18, 3 + 17, 10 + 10 und so weiter erraten. Nun würde also eines der beiden Dinge passieren.

Die erste Wahrscheinlichkeit ist, dass, da alle obigen Kombinationen mir die Antwort als 20 geben würden, alle diesen Algorithmus knacken könnten. Wenn der Programmierer es jedoch fest programmiert hat, nur 5 + 15 zu akzeptieren, würden alle Kombinationen nicht funktionieren.

Aber da ich alle möglichen Kombinationen ausprobiere, würde es eine Zeit geben, in der ich 5 + 15 probieren würde, und das würde den Algorithmus knacken.

Auch hier könnte der Programmierer versuchen, die begrenzte Anzahl von Versuchen und die viel größere Sicherheitsstruktur dazwischen beizubehalten, aber selbst dafür haben wir eine Menge Werkzeuge, um dies zu umgehen.

Unzerbrechlicher Algorithmus oder Mythos?

Die Frage ist also, ob es irgendetwas gibt, das als unzerbrechlicher Algorithmus bezeichnet wird, oder ob es nur ein Mythos ist. Die Antwort ist beides. Ich habe kürzlich einige Artikel im Internet gelesen, in denen ich ein berühmtes Zitat las:

„Unmöglich heißt nur, dass man nicht alle Lösungen ausprobiert hat“

Ja. So funktionieren Algorithmen. Nehmen wir den obigen Fall. Nehmen wir an, es gibt einen anderen Algorithmus, der wie folgt lautet:

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

Ja. So schreiben Sie einen unzerbrechlichen Algorithmus. Die Sache ist, dass ein anständiger Computer mit einer guten Grafikkarte dies mit oclhashcat leicht knacken kann. Aber das ist nur ein Beispiel. Hier können die Kombinationen beliebig sein.

Die Antwort ist eine negative Neun, was bedeutet, dass es in a, b, c, d, e und f einige negative Zahlen geben kann, wobei mindestens eine große Zahl von einer kleinen Zahl subtrahiert wird.

Dies bringt mich zurück zu unseren ersten Algorithmusbeispielen für a + b = 20. Auch hier kann es viel mehr Kombinationen wie -1 + 21 oder -29354+ 29374 geben.

Die Theorie der unzerbrechlichen Algorithmen geht also nur so weit, wie es sich ein menschlicher Verstand vorstellen kann. Unzerbrechliche Algorithmen sind kein Mythos. Ein gut geschriebener Algorithmus kann bis zu 2-3 oder mehr Monate dauern, bis er auch von einem Computer wie dem mit WPA2 verschlüsselten Teil geknackt wird.

Die Sache ist, man muss die Geduld haben, in mentaler Ruhe zu bleiben, bis es gelöst wird. Laut Mathematik gibt es keinen solchen Algorithmus, der nicht geknackt werden kann. Es braucht nur jemanden, der sich wirklich dafür interessiert.

Beste Sprachen zum Schreiben von Algorithmen

Ehrlich gesagt gibt es offiziell keine bestimmte Sprache, die sich hervorragend zum Schreiben von Algorithmen eignet.

Funktionale Sprachen haben jedoch die Oberhand, da sie in Bezug auf Berechnungen und Mathematik viel besser sind als andere objektorientierte Sprachen. Aber ich würde nur ein paar Algorithmen auflisten, die ich gut genug finde, um Mathematik zu programmieren:

  • Python und Ruby

In erster Linie würde ich Hochsprachen empfehlen. Hochsprachen sind am einfachsten zu beherrschen. Der Grund, warum diese Sprachen einfacher sind, liegt darin, dass diese Sprachen im Gegensatz zu C oder einer anderen einfachen Sprache leichter zu lesen sind.

Sogar ihre Syntax ist so einfach, dass nur ein reiner Anfänger sie verstehen würde, ohne dass jemand sie unterrichtet.

Alle gängigen Datenstrukturen in diesen Sprachen haben Abstraktionen. Sie können sogar Ihre eigenen implementierten Versionen erstellen und Datenstrukturen auf Datenstrukturen aufbauen. Diese Sprachen werden dynamisch eingegeben.

Es gibt jedoch nur ein Problem, mit dem ein Programmierer leichter anfangen kann, aber wenn er Tests ausführt, werden im Gegensatz zu anderen Low-Level-Sprachen möglicherweise viele Fehler angezeigt, die er vor der Laufzeit nicht gesehen hat.

  • C

C ist hier genau das Gegenteil von Python. Sie können hier sogar verwirrt sein, da C zwar eine Hochsprache ist, von manchen aber aufgrund seiner Codierungsweise sogar als Niedrigsprache eingestuft wird.

Sogar C ist hier sehr gut in Bezug auf Abstraktion. Wenn Sie sich mit Algorithmen auskennen, müssen Sie möglicherweise zu einem späteren Zeitpunkt die richtigen einfachen Sprachen wie die Assembly lernen.

Wenn Sie C sehr gut kennen, ist es sehr einfach, von C oder einer ähnlichen Sprache in die Assemblersprache zu migrieren. Die Speicherverwaltung ist auch in C sehr gut und dies ist für Algorithmen sehr wichtig.

  • Java

Viele Leute hassen Java, weil es zu wortreich und streng ist. Sogar einige Leute sagen, es fehlen viele Funktionen, die in modernen, hoch entwickelten Sprachen verfügbar sind. Aber das ist eigentlich kein Grund zur Sorge.

Java ist im Gegensatz zu Python keine dynamisch typisierte Sprache. Es ist eine statisch typisierte Sprache und hat jede Menge Speicherbereinigung.

Dies bedeutet, dass Java während des Kompilierens und sogar vor der Laufzeit tatsächlich Fehler anzeigt. Und im Vergleich zu anderen Hochsprachen weist Java einen extrem geringen Speicherverlust auf, der offensichtlich behoben werden kann und keine Segmentierungsfehler aufweist.

  • C # und C ++

C # ist fast ähnlich zu Java. Es ist eher Java mit den Fähigkeiten der modernen Sprache. Manche Leute benutzen sogar gerne C ++. Aber es ist äußerst unnötig kompliziert.

Einige Leute benutzen es, weil es schwer zu verstehen ist, aber wenn Sie es erst einmal geschafft haben, es zu knacken, werden die Leute ernsthaft Schwierigkeiten haben, Ihre Algorithmen zu verstehen, was es perfekt für den Job macht. C # hingegen verfügt über eine ähnliche Garbage Collection wie Java.

Es gibt auch andere funktionale Sprachen wie Haskell (Lisp Family) und Scala (basierend auf Java). Sie können meine anderen Blogs lesen, in denen ich ausführlich beschrieben habe, wie sie funktionieren und was sie tun. Java, C und C ++ werden alle auf der einen oder anderen virtuellen Maschine ausgeführt.

Während Ruby und Python Dolmetscher auf ihrem Dolmetscher sind.

Wenn Sie mich fragen, würde ich C # vorziehen, da es über alle modernen Funktionen verfügt und es auch einfacher macht, auf niedrigere Programmiersprachen zu portieren. In wissenschaftlichen Begriffen hat es die Eigenschaften von Java, Scala, C und niedrigeren Sprachen.

Wenn Sie nur mit Algorithmen beginnen möchten, können Sie möglicherweise Visual Studio Community Edition oder Visual Studio Express verwenden. Sie müssten das wahrscheinlich kaufen, außer dass im Fall von Python das meiste, was Sie wollen, umsonst wäre.

Empfohlene Artikel:-

In den folgenden Artikeln erfahren Sie mehr über die Programmiersprachen für Lernalgorithmen. Gehen Sie also einfach den Link durch.

  1. 8 Awesome Algorithm Interview Fragen und Antworten
  2. Die besten Algorithmen und Kryptographie (Beispiele)
  3. Beste Datenstrukturen und Algorithmen C ++ | Grundlagen
  4. Datenstrukturen und Algorithmen Interview