Zum Hauptinhalt springen

Algorithmen

Ein Algorithmus ist ein schrittweises Verfahren zur Lösung eines Problems mit einer endlichen Anzahl klar definierter Anweisungen. Er nimmt eine Eingabe entgegen und liefert eine entsprechende Ausgabe. Alltagsbeispiele für Algorithmen sind Kochrezepte, Aufbauanleitungen oder Beipackzettel.

Das nachfolgende Rezept beschreibt die Zubereitung von Pancakes:

  1. 3 Eiweiß zu festem Eischnee verarbeiten
  2. 3 Eigelb und 50 g Zucker schaumig rühren
  3. 300 g Mehl, 300 g Milch, 1 TL Backpulver und etwas Salz unter die Eigelb-Zuckermasse rühren
  4. Sollte der Teig zu fest sein, zusätzlich Milch unterrühren
  5. Den Eischnee unter den Teig heben
  6. Eine Pfanne mit etwas Fett erhitzen
  7. Die Pancakes goldgelb ausbacken
  8. Die Pancakes mit Puderzucker und Ahornsirup servieren
info

Die Überführung einer formalen Anleitung, also ein Algorithmus, in ein ausführbares Programm bezeichnet man als Programmierung.

Eigenschaften von Algorithmen

Damit ein Verfahren als Algorithmus gilt, muss es die folgenden Eigenschaften erfüllen:

  • Determiniertheit: Bei gleicher Eingabe und gleichen Rahmenbedingungen führt der Algorithmus immer zum gleichen Ergebnis.
  • Determinismus (Eindeutigkeit): Die Schrittfolge ist eindeutig festgelegt und führt immer zu einem eindeutigen Ergebnis.
  • Terminiertheit (Endlichkeit): Der Algorithmus endet nach einer endlichen Anzahl von Schritten.
  • Korrektheit: Der Algorithmus liefert für alle gültigen Eingaben das richtige Ergebnis.

Komplexität von Algorithmen

Da die Laufzeit eines Algorithmus von Faktoren wie Hardware, paralleler Verarbeitung oder der Eingabereihenfolge abhängt, wird sie nicht absolut gemessen, sondern mit der Landau-Notation 𝒪 (Ordnung von) beschrieben. Diese teilt Algorithmen in Komplexitätsklassen ein (z.B. logarithmisch, linear, polynomial) und gibt an, wie viele Schritte der Algorithmus in Abhängigkeit von der Eingabegröße benötigt.

Suchalgorithmen

Suchalgorithmen finden innerhalb einer Datensammlung einen oder mehrere Einträge mit bestimmten Eigenschaften.

AlgorithmusKomplexität Best CaseKomplexität Average CaseKomplexität Worst Case
Linearsuche𝒪(1)𝒪(𝑛)𝒪(𝑛)
Binärsuche𝒪(1)𝒪(𝑙𝑜𝑔 ⁡𝑛)𝒪(𝑙𝑜𝑔 ⁡𝑛)
Interpolationssuche𝒪(1)𝒪(𝑙𝑜𝑔 𝑙𝑜𝑔 ⁡𝑛)𝒪(𝑛)

Bei der Linearsuche werden alle Einträge der Datensammlung nacheinander durchlaufen. Im besten Fall wird das gesuchte Element beim ersten Zugriff gefunden, im schlechtesten Fall erst beim letzten. Bei einer erfolglosen Suche werden alle Einträge durchlaufen.

Im nachfolgenden Beispiel wird die Zahlenfolge 12, 16, 36, 49, 50, 68, 70, 76, 99 nach dem Wert 70 durchsucht.

Index1234567
0[12]121212121212
116[16]1616161616
23636[36]36363636
3494949[49]494949
450505050[50]5050
56868686868[68]68
6707070707070[70]
776767676767676
899999999999999
info

Durch vorheriges Sortieren der Sammlung kann die Leistung des Algorithmus verbessert werden.

Sortieralgorithmen

Sortieralgorithmen bringen eine Datensammlung in eine definierte Reihenfolge. Man unterscheidet zwischen einfachen und rekursiven Verfahren sowie zwischen stabilen (gleichwertige Elemente behalten ihre ursprüngliche Reihenfolge) und nicht-stabilen Verfahren. Arbeitet ein Algorithmus ohne zusätzlichen Speicherplatz aus, bezeichnet man ihn als in-place, andernfalls als out-of-place.

AlgorithmusKomplexität Best CaseKomplexität Average CaseKomplexität Worst CaseStabilIn-Place
Bubblesort𝒪(𝑛2)𝒪(𝑛2)𝒪(𝑛2)jaja
Insertionsort𝒪(𝑛)𝒪(𝑛2)𝒪(𝑛2)jaja
Selectionsort𝒪(𝑛2)𝒪(𝑛2)𝒪(𝑛2)neinja
Quicksort𝒪(𝑛 𝑙𝑜𝑔 ⁡𝑛)𝒪(𝑛 𝑙𝑜𝑔 ⁡𝑛)𝒪(𝑛2)neinja
Mergesort𝒪(𝑛 𝑙𝑜𝑔 ⁡𝑛)𝒪(𝑛 𝑙𝑜𝑔 ⁡𝑛)𝒪(𝑛 𝑙𝑜𝑔 ⁡𝑛)janein
Heapsort𝒪(𝑛 𝑙𝑜𝑔 ⁡𝑛)𝒪(𝑛 𝑙𝑜𝑔 ⁡𝑛)𝒪(𝑛 𝑙𝑜𝑔 ⁡𝑛)neinja

Beim Bubblesort werden benachbarte Elemente miteinander verglichen und bei falscher Reihenfolge getauscht. Nach jedem Durchlauf steht das größte Element am Ende des noch unsortierten Bereichs — ähnlich einer aufsteigenden Blase.

Index0123456789
012121212121212121212
199505036363636161616
250683649494916363636
368364950501649494949
436496868165050505050
549767016686868686868
676701670707070707070
770167676767676767676
816999999999999999999