Brute-Force-Algorithmen erklärt

Brute-Force-Algorithmen sind genau das, wonach sie klingen - einfache Methoden zur Lösung eines Problems, die auf reiner Rechenleistung beruhen und alle Möglichkeiten und nicht fortschrittliche Techniken zur Verbesserung der Effizienz ausprobieren.

Stellen Sie sich zum Beispiel vor, Sie haben ein kleines Vorhängeschloss mit 4 Ziffern von jeweils 0-9. Sie haben Ihre Kombination vergessen, möchten aber kein weiteres Vorhängeschloss kaufen. Da Sie sich an keine der Ziffern erinnern können, müssen Sie eine Brute-Force-Methode verwenden, um das Schloss zu öffnen.

Sie setzen also alle Zahlen auf 0 zurück und versuchen es nacheinander: 0001, 0002, 0003 usw., bis es geöffnet wird. Im schlimmsten Fall wären 104 oder 10.000 Versuche erforderlich, um Ihre Kombination zu finden.

Ein klassisches Beispiel in der Informatik ist das Travelling Salesman Problem (TSP). Angenommen, ein Verkäufer muss 10 Städte im ganzen Land besuchen. Wie bestimmt man die Reihenfolge, in der diese Städte besucht werden sollen, so dass die zurückgelegte Gesamtstrecke minimiert wird?

Die Brute-Force-Lösung besteht einfach darin, die Gesamtentfernung für jede mögliche Route zu berechnen und dann die kürzeste auszuwählen. Dies ist nicht besonders effizient, da es möglich ist, viele mögliche Routen durch clevere Algorithmen zu eliminieren.

Die zeitliche Komplexität der rohen Gewalt ist O (m n ) , was manchmal als O (n * m) geschrieben wird.. Wenn wir also mit Brute Force nach einer Zeichenfolge von "n" Zeichen in einer Zeichenfolge von "m" Zeichen suchen würden, würden wir n * m Versuche benötigen.

Weitere Informationen zu Algorithmen

In der Informatik ist ein Algorithmus einfach eine Reihe von schrittweisen Verfahren zur Lösung eines bestimmten Problems. Algorithmen können entworfen werden, um Berechnungen durchzuführen, Daten zu verarbeiten oder automatisierte Argumentationsaufgaben auszuführen.

So definiert Wikipedia sie:

Ein Algorithmus ist eine effektive Methode, die innerhalb einer begrenzten Menge von Raum und Zeit und in einer genau definierten formalen Sprache zur Berechnung einer Funktion ausgedrückt werden kann. Ausgehend von einem Anfangszustand und einer Anfangseingabe (möglicherweise leer) beschreiben die Anweisungen eine Berechnung, die bei Ausführung eine endliche Anzahl genau definierter aufeinanderfolgender Zustände durchläuft, schließlich eine „Ausgabe“ erzeugt und an einem Endzustand endet. Der Übergang von einem Zustand zum nächsten ist nicht unbedingt deterministisch; Einige Algorithmen, sogenannte randomisierte Algorithmen, enthalten zufällige Eingaben.

Es gibt bestimmte Anforderungen, die ein Algorithmus erfüllen muss:

  1. Bestimmtheit: Jeder Schritt im Prozess ist genau angegeben.
  2. Effektive Berechenbarkeit: Jeder Schritt im Prozess kann von einem Computer ausgeführt werden.
  3. Endlichkeit: Das Programm wird schließlich erfolgreich beendet.

Einige gebräuchliche Arten von Algorithmen umfassen:

  • Sortieralgorithmen
  • Suchalgorithmen
  • Komprimierungsalgorithmen.

Klassen von Algorithmen umfassen

  • Graph
  • Dynamische Programmierung
  • Sortierung
  • Suchen
  • Saiten
  • Mathematik
  • Computergeometrie
  • Optimierung
  • Verschiedenes.

Obwohl es sich technisch gesehen nicht um eine Klasse von Algorithmen handelt, werden Datenstrukturen häufig mit ihnen gruppiert.

Effizienz

Algorithmen werden am häufigsten anhand ihrer Effizienz und der Menge an Rechenressourcen beurteilt, die sie zur Erfüllung ihrer Aufgabe benötigen.

Eine übliche Methode zur Bewertung eines Algorithmus besteht darin, seine zeitliche Komplexität zu untersuchen. Dies zeigt, wie die Laufzeit des Algorithmus mit zunehmender Eingabegröße zunimmt. Da die Algorithmen heutzutage mit großen Dateneingaben arbeiten müssen, ist es für unsere Algorithmen wichtig, eine relativ schnelle Laufzeit zu haben.

Sortieralgorithmen

Sortieralgorithmen gibt es je nach Bedarf in verschiedenen Varianten. Einige, sehr häufig und weit verbreitet sind:

Schnelle Sorte

Es gibt keine Sortierdiskussion, die ohne schnelles Sortieren beendet werden kann. Hier ist das Grundkonzept: Schnelle Sortierung

Zusammenführen, sortieren

Ein Sortieralgorithmus, der auf dem Konzept basiert, wie Arrays sortiert werden, wird zu einem sortierten Array zusammengeführt. Lesen Sie hier mehr darüber: Mergesort

Der Lehrplan von freeCodeCamp legt großen Wert auf die Erstellung von Algorithmen. Dies liegt daran, dass das Erlernen von Algorithmen ein guter Weg ist, um Programmierkenntnisse zu üben. Interviewer testen Kandidaten am häufigsten auf Algorithmen während Vorstellungsgesprächen für Entwickler.

Bücher über Algorithmen in JavaScript:

Datenstrukturen in JavaScript

  • Kostenloses Buch über Datenstrukturen in JavaScript
  • GitBook

Lernen von JavaScript-Datenstrukturen und -Algorithmen - Zweite Ausgabe

  • Deckt objektorientierte Programmierung, prototypische Vererbung, Sortier- und Suchalgorithmen, Quicksort, Mergesort, binäre Suchbäume und erweiterte Algorithmuskonzepte ab
  • Amazonas
  • ISBN-13: 978-1785285493

Datenstrukturen und Algorithmen mit JavaScript: Bringen Sie klassische Computeransätze ins Web

  • Deckt Rekursions-, Sortier- und Suchalgorithmen, verknüpfte Listen und binäre Suchbäume ab.
  • Amazonas
  • ISBN-13: 978-1449364939