Der Algorithmusbegriff
Aus ProgrammingWiki
Die Bezeichnung Algorithmus geht auf den Namen Muhammad ibn Musa, Abu Dscha'far al-Chwarizmi (* um 780; † um 850), einem persischen Mathematiker, Astronomen und Geographen, zurück.
Diesem Universalgelehrten verdanken wir nicht nur die Einführung der Null aus dem indischen in das arabische Zahlensystem, sondern auch das Wort "Algebra", das der lateinischen Übersetzung seines Buches Kitāb al-muchtasar fi hisab al-dschabr wa-l-muqabala ("Rechnen durch Ergänzung und Ausgleich") entnommen ist.
Inhaltsverzeichnis |
Der intuitive Algorithmusbegriff
Es ist recht schwierig, eine formal exakte Definition für den Begriff Algorithmus anzugeben.
Wir begnügen uns deshalb mit einer anschaulichen (intuitiven) Erklärung:
Ein Algorithmus ist eine endliche Folge von eindeutigen und ausführbaren Anweisungen zur Lösung eines allgemeinen Problems.
Eigenschaften von Algorithmen
- Endlichkeit:
- endliche Notation des Algorithmus,
- Nutzung endlicher Ressourcen (z.B. begrenzter Arbeitsspeicher / begrenzte Rechenzeit),
- endlich viele Abarbeitungsschritte (z.B. begrenzte Rekursionstiefe),
- Eindeutigkeit:
- nach jedem Abarbeitungsschritt besteht höchstens eine Möglichkeit der Fortsetzung,
- gleiche Eingabegrößen und Anfangsbedingungen liefern stets das gleiche Ergebnis (Determiniertheit),
- Ausführbarkeit:
- jede Anweisung ist (z.B. für einen Prozessor) verständlich und ausführbar,
- Allgemeingültigkeit:
- Anwendbarkeit auf gleiche Probleme einer Problemklasse.
Beispiele
Der Euklidische Algorithmus
Mit diesem Algorithmus, der nach dem griechischen Mathematiker Euklid von Alexandria (* um 360 v. Chr.; † um 280 v. Chr.) benannt ist, lässt sich der größte gemeinsame Teiler (ggT) zweier natürlicher Zahlen bestimmen.
Beschreibung:
- Der größte gemeinsame Teiler der Zahlen $m$ und $n$ ist $m$, falls $n=0$ ist.
- Anderenfalls berechnet er sich aus dem größten gemeinsamen Teiler von $n$ und dem Rest der ganzzahligen Division $\tfrac{m}{n}$.
Implementation:
Quelltext überprüfen:
Das Sieb des Eratosthenes
Der griechische Mathematiker, Geograph, Philosoph, Philologe und Dichter Eratosthenes von Kyrene (* zwischen 276 und 273 v. Chr.; † um 194 v. Chr.) war der erste Gelehrte der Antike, der durch eine wissenschaftlich fundierte Messung den Umfang der Erde mit erstaunlicher Genauigkeit bestimmt hat.
Auf ihn geht aber auch ein interessanter Algorithmus zur Bestimmung aller Primzahlen zurück.
Beschreibung:
- Notiere die natürlichen Zahlen, beginne mit $2$.
$2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...$
- Unterstreiche die $2$ und streiche alle Vielfachen von $2$.
$\underline{2}, 3, 4\!\!\!\!/, 5, 6\!\!\!\!/, 7, 8\!\!\!\!/, 9, 10\!\!\!\!\!\!/, 11, 12\!\!\!\!\!\!/, 13, 14\!\!\!\!\!\!/, 15, 16\!\!\!\!\!\!/, 17, 18\!\!\!\!\!\!/, 19, 20\!\!\!\!\!\!/, ...$
- Unterstreiche die erste freie Zahl (in diesem Falle die Zahl $3$) und streiche deren Vielfachen.
$\underline{2}, \underline{3}, 4\!\!\!\!/, 5, 6\!\!\!\!/, 7, 8\!\!\!\!/, 9\!\!\!\!/, 10\!\!\!\!\!\!/, 11, 12\!\!\!\!\!\!/, 13, 14\!\!\!\!\!\!/, 15\!\!\!\!\!\!/, 16\!\!\!\!\!\!/, 17, 18\!\!\!\!\!\!/, 19, 20\!\!\!\!\!\!/, ...$
- Verfahre mit allen weiteren freien Zahlen ebenso.
$\underline{2}, \underline{3}, 4\!\!\!\!/, \underline{5}, 6\!\!\!\!/, \underline{7}, 8\!\!\!\!/, 9\!\!\!\!/, 10\!\!\!\!\!\!/, \underline{11}, 12\!\!\!\!\!\!/, \underline{13}, 14\!\!\!\!\!\!/, 15\!\!\!\!\!\!/, 16\!\!\!\!\!\!/, \underline{17}, 18\!\!\!\!\!\!/, \underline{19}, 20\!\!\!\!\!\!/, ...$
- Alle unterstrichenen Zahlen sind Primzahlen.
Implementation:
Zunächst scheint diese Beschreibung gegen die Forderung der Endlichkeit zu verstoßen: Bereits das Notieren der natürlichen Zahlen, beginnend mit $2$, wäre endlos.
Wir benutzen deshalb das Konzept der verzögerten Evaluation und repräsentieren die natürlichen Zahlen als Stream.
Das Streichen teilbarer Zahlen erfolgt mit der bekannten Prozedur stream-filter:
Man beachte, dass primzahlstream keine Prozedur ist. Vielmehr werden an diesen Namen alle, d.h. unendlich viele Primzahlen gebunden!
Aufgaben
- Geben Sie typische Algorithmen aus dem Alltag an.
- Beschreiben Sie Vorgänge oder Abläufe, auf die sich offensichtlich der intuitive Algorithmusbegriff nicht anwenden lässt. Begründen Sie.
- Begründen Sie, warum auch das Sieb des Eratosthenes als Algorithmus bezeichnet werden kann.
Zum Weiterarbeiten
Erstellen Sie für einen der nachfolgenden Algorithmen die entsprechende Seite im ProgrammingWiki.
-
Lösen quadratischer Gleichungen
-
Das Newton-Verfahren
-
Das Heron-Verfahren
-
Primfaktorzerlegung
-
π-Bestimmung mit der Monte-Carlo-Methode
-
Lotto 6 aus 49
-
Paritätsprüfung eines Bitmusters
-
Die Punktladung im inhomogenen elektrischen Feld
-
Das NIM-Spiel
-
Der Morsecode
Zum Vergleich: Der Morsecode als Java-Programm