Ein Algorithmus ist ein genau definiertes, schrittweises Verfahren zur Lösung eines Problems oder zur Durchführung einer Aufgabe. Er beschreibt, welche Schritte in welcher Reihenfolge auszuführen sind, welche Eingaben benötigt werden und welche Ausgabe oder welches Ergebnis erwartet wird. Ein Algorithmus muss so beschreiben sein, dass er von einem Menschen oder einer Maschine ausgeführt werden kann.

Ein Rezept ist ein typisches, leicht verständliches Beispiel für einen Algorithmus: Es nimmt Eingaben (Zutaten, Werkzeuge, Anfangszustand) und beschreibt in einer festen Reihenfolge die Arbeitsschritte, wodurch am Ende eine Ausgabe (das fertige Gericht) entsteht.

Die Begriffe "Algorithmus" und "Algorismus" gehen auf den persischen Mathematiker Al-Khwārizmī (Persisch: خوارزمی, ca. 780–850) zurück. In der Informatik wird ein Algorithmus formaler gefasst: Er ist eine klare, endliche Abfolge von Operationen, die im Prinzip von einer Turing-Maschine ausgeführt werden könnte. Zur Beschreibung verwendet man oft Pseudocode, Flussdiagramme oder konkrete Programmiersprachen.

Wesentliche Eigenschaften eines Algorithmus

  • Determinismus (bei deterministischen Algorithmen): Gleiche Eingabe führt zu gleicher Ausgabe.
  • Endlichkeit: Der Algorithmus muss nach einer endlichen Anzahl von Schritten stoppen (Terminierung).
  • Ausführbarkeit / Effektivität: Jeder Schritt muss ausführbar und präzise beschrieben sein.
  • Eingabe und Ausgabe: Ein Algorithmus nimmt Eingaben entgegen und liefert Ausgaben.
  • Korrektheit: Der Algorithmus muss das gewünschte Problem korrekt lösen (für alle erlaubten Eingaben).

Arten von Algorithmen

  • Deterministische Algorithmen: Verhalten ist vollständig vorhersagbar.
  • Nichtdeterministische Algorithmen: Treffen Entscheidungen, die nicht vorbestimmt sind (theoretisch nützlich in Komplexitätstheorie).
  • Randomisierte Algorithmen: Nutzen Zufallszahlen, um oft schneller oder einfacher zu einer Lösung zu kommen.
  • Rekursive Algorithmen: Lösen ein Problem durch Aufruf derselben Methode für kleinere Teilprobleme (z. B. Divide-and-Conquer).
  • Greedy-, dynamische Programmierungs- und Backtracking-Algorithmen: Verschiedene Lösungsstrategien für Optimierungs- und Kombinationsprobleme.

Typische Beispiele

Ein paar einfache, häufig diskutierte Beispiele:

  • Rezept (Alltagsbeispiel): Klare Abfolge von Kochschritten.
  • Sortierverfahren: z. B. Bubble Sort, QuickSort; sie ordnen eine Liste von Zahlen.
  • Euclidischer Algorithmus: Bestimmt den größten gemeinsamen Teiler (GGT) zweier Zahlen — ein klassisches, effizientes Beispiel.
  • Suchalgorithmen: Lineare Suche, binäre Suche (bei sortierten Daten deutlich schneller).

Einfacher Algorithmus: Euklidischer Algorithmus (kurz beschrieben)

Aufgabe: GGT(a, b) finden

  1. Solange b ≠ 0: setze r = a mod b, dann a = b, b = r.
  2. Wenn b = 0, dann ist a der GGT.

Dieser Algorithmus ist kurz, endet immer (Terminierung) und liefert für ganze Eingaben korrekte Ergebnisse.

Wie beschreibt man einen Algorithmus?

Je nach Zweck wählt man eine Beschreibungsebene:

  • Natürliche Sprache: Gut für Menschen, aber oft mehrdeutig.
  • Pseudocode: Strukturierte, sprachunabhängige Form, die klarer als natürliche Sprache ist und leicht in Code übersetzbar.
  • Flussdiagramme: Visuelle Darstellung von Ablauf und Entscheidungswegen.
  • Programmiersprachen: Konkrete Implementierung, ausführbar auf Computern.

Effizienz: Zeit- und Platzbedarf

Praktisch wichtig ist nicht nur, ob ein Algorithmus funktioniert, sondern wie effizient er ist:

  • Zeitkomplexität: Wie viele Schritte werden in Abhängigkeit von der Eingabegröße benötigt? (Bekannte Notation: Big-O, z. B. O(n), O(n log n), O(n^2)).
  • Platzkomplexität: Wie viel zusätzlicher Speicher wird benötigt?

Die Wahl eines Algorithmus z. B. für Sortieren oder Suchen hängt stark von diesen Eigenschaften ab — für große Datenmengen sind effiziente Algorithmen entscheidend.

Korrektheit und Beweis

Korrektheit bedeutet, dass der Algorithmus für alle zulässigen Eingaben das erwartete Ergebnis liefert. Die Korrektheit wird in der Regel mithilfe von formalen Beweisen oder Induktion gezeigt. Wichtige Aspekte sind außerdem

  • Terminierung: Der Algorithmus beendet sich immer.
  • Invariante: Eine Bedingung, die vor und nach jedem Schritt wahr bleibt und beim Beweis hilft.

Algorithmen im Alltag und in Technik

Algorithmen stecken hinter vielen technischen Systemen: Suchmaschinen, Navigationssysteme, Verschlüsselungsverfahren, Empfehlungssysteme, medizinische Auswertungen und vieles mehr. Während manche klar definiert und einfach sind, sind andere komplex und adaptiv (lernen mit Daten).

Zusammenfassung

Ein Algorithmus ist eine präzise Schrittfolge zur Lösung eines Problems. Er braucht eindeutige Schritte, Eingaben, eine erwartete Ausgabe und muss in sinnvoller Zeit enden. Zur Beschreibung stehen natürliche Sprache, Pseudocode, Flussdiagramme oder konkrete Programme zur Verfügung. Verständnis von Korrektheit, Terminierung und Effizienz ist zentral, um gute Algorithmen zu entwerfen und anzuwenden.