Einführung: Difference between revisions
Line 12: | Line 12: | ||
=== Zur Frage der elementaren Schritte === | === Zur Frage der elementaren Schritte === | ||
Welche Schritte | Welche Schritte als elementar angesehen werden können, hängt sehr stark vom Kontext der Aufgabe ab. Ein interesssantes Beispiel ist die Geometrie der alten Griechen, wo geometrische Probleme in der Ebene allein mit Zirkel und Lineal gelöst werden. In diesem Fall sind folgenden elementare Operationen erlaubt: | ||
* das Markieren eines Punktes (beliebig in der Ebene oder als Schnittpunkt zwischen bereits gezeichneten Linien), | * das Markieren eines Punktes (beliebig in der Ebene oder als Schnittpunkt zwischen bereits gezeichneten Linien), | ||
* das Zeichnen einer | * das Zeichnen einer Geraden durch zwei Punkte, | ||
* das Zeichnen eines Kreises um einen Punkt, | * das Zeichnen eines Kreises um einen Punkt, | ||
* das Abgreifen des Abstands zwischen zwei Punkten mit dem Zirkel. | * das Abgreifen des Abstands zwischen zwei Punkten mit dem Zirkel. | ||
Eine | Auf der Basis dieser Operationen kann zum Beispiel kein Algorithmus für die Dreiteilung eines Winkels definiert werden, während der Algorithmus für die Zweiteilung ganz einfach ist. | ||
Eine völlig andere Menge von elementaren Operationen ergibt sich für arithmetische Berechnungen mit Hilfe des Abacus (Rechenbrett), der seit der Römerzeit in Europa weit verbreitet war. Hier werden Zahlen durch die Position und Berechnungen durch das Verschieben von Perlen auf Rillen oder Drähten dargestellt. Eine ausführliche Beschreibung der wichtigsten Abacus-Algorithmen findet sich unter [http://webhome.idirect.com/~totton/abacus/ The Bead Unbuffled] von Totton Heffelfinger und Gary Flom. | |||
Was dies genau bedeutet, hängt vom Kontext ab. Im Zusammenhang mit Computern kann der Begriff stets auf die Berechenbarkeitstheorie zurückgeführt werden. Schritte gelten demnach als elementar, wenn sie Grundoperationen einer Turingmaschine (oder einer äquivalenten Formalisierung, wie beispielsweise Lambda-Kalkül, μ-Rekursion oder WHILE-Programm) sind. Dies ist Gegenstand der theoretischen Informatik. Für uns ist diese Problemzerlegung aber zu feinkörnig. Eine geeignetere Definition besagt, dass Operationen elementar sind, wenn sie von einer typischen Programmiersprache und einer typischen Bibliothek von Unterprogrammen unterstützt werden. In unserem Falle sind das die Operationen und Bibliotheken der Programmiersprache [http://www.python.org Python]. | Was dies genau bedeutet, hängt vom Kontext ab. Im Zusammenhang mit Computern kann der Begriff stets auf die Berechenbarkeitstheorie zurückgeführt werden. Schritte gelten demnach als elementar, wenn sie Grundoperationen einer Turingmaschine (oder einer äquivalenten Formalisierung, wie beispielsweise Lambda-Kalkül, μ-Rekursion oder WHILE-Programm) sind. Dies ist Gegenstand der theoretischen Informatik. Für uns ist diese Problemzerlegung aber zu feinkörnig. Eine geeignetere Definition besagt, dass Operationen elementar sind, wenn sie von einer typischen Programmiersprache und einer typischen Bibliothek von Unterprogrammen unterstützt werden. In unserem Falle sind das die Operationen und Bibliotheken der Programmiersprache [http://www.python.org Python]. |
Revision as of 18:39, 6 April 2008
Definition von Algorithmen
Es gibt viele Definitionen von Algorithmen. Hier sind die Ergebnisse einer Google-Suche auf englisch und auf deutsch. Die Grundidee ist aber immer gleich:
Ein Algorithmus ist eine Problemlösung durch endlich viele elementare Schritte. Die Teile der Definition bedürfen näherer Erläuterung:
- Problemlösung
- Damit ein Algorithmus ein Problem (genauer: eine Menge von gleichartigen Problemen) lösen kann, muss das Problem zunächst definiert (spezifiziert) werden. Die Spezifikation beschreibt, was der Algorithmus erreichen soll, sagt aber nichts über das wie. Der Algorithmus repräsentiert dann einen bestimmten Lösungsweg. Mit Hilfe der Spezifikation muss gezeigt werden, dass der Algorithmus tatsächlich eine Lösung des gestellten Problems liefert. Diese Frage untersuchen wir im Kapitel Korrektheit.
- Endlich viele Schritte
- Die Forderung nach endlich vielen Schritten unterstellt, dass jeder einzelne Schritt eine gewisse Zeit benötigt, also nicht unendlich schnell ausgeführt werden kann. Damit ist diese Forderung äquivalent zu der Forderung, dass der Algorithmus in endlicher Zeit zum Ergebnis kommen muss. Der Sinn einer solchen Forderung leuchtet aus praktischer Sicht unmittelbar ein. Interessant ist darüber hinaus die Frage, wie man mit möglichst wenigen Schritten, also möglichst schnell, zur Lösung kommt. Diese Frage untersuchen wir im Kapitel Effizienz.
- Elementare Schritte
- Im weiteren Sinne verstehen wir unter einem elementaren Schritt ein Teilproblem, für das bereits ein Algorithmus bekannt ist. Im engeren Sinne ist die Menge der elementaren Schritte durch die Hilfsmittel vorgegeben, mit der der Algorithmus ausgeführt werden soll. Wir gehen darauf unten näher ein.
Zur Frage der elementaren Schritte
Welche Schritte als elementar angesehen werden können, hängt sehr stark vom Kontext der Aufgabe ab. Ein interesssantes Beispiel ist die Geometrie der alten Griechen, wo geometrische Probleme in der Ebene allein mit Zirkel und Lineal gelöst werden. In diesem Fall sind folgenden elementare Operationen erlaubt:
- das Markieren eines Punktes (beliebig in der Ebene oder als Schnittpunkt zwischen bereits gezeichneten Linien),
- das Zeichnen einer Geraden durch zwei Punkte,
- das Zeichnen eines Kreises um einen Punkt,
- das Abgreifen des Abstands zwischen zwei Punkten mit dem Zirkel.
Auf der Basis dieser Operationen kann zum Beispiel kein Algorithmus für die Dreiteilung eines Winkels definiert werden, während der Algorithmus für die Zweiteilung ganz einfach ist.
Eine völlig andere Menge von elementaren Operationen ergibt sich für arithmetische Berechnungen mit Hilfe des Abacus (Rechenbrett), der seit der Römerzeit in Europa weit verbreitet war. Hier werden Zahlen durch die Position und Berechnungen durch das Verschieben von Perlen auf Rillen oder Drähten dargestellt. Eine ausführliche Beschreibung der wichtigsten Abacus-Algorithmen findet sich unter The Bead Unbuffled von Totton Heffelfinger und Gary Flom.
Was dies genau bedeutet, hängt vom Kontext ab. Im Zusammenhang mit Computern kann der Begriff stets auf die Berechenbarkeitstheorie zurückgeführt werden. Schritte gelten demnach als elementar, wenn sie Grundoperationen einer Turingmaschine (oder einer äquivalenten Formalisierung, wie beispielsweise Lambda-Kalkül, μ-Rekursion oder WHILE-Programm) sind. Dies ist Gegenstand der theoretischen Informatik. Für uns ist diese Problemzerlegung aber zu feinkörnig. Eine geeignetere Definition besagt, dass Operationen elementar sind, wenn sie von einer typischen Programmiersprache und einer typischen Bibliothek von Unterprogrammen unterstützt werden. In unserem Falle sind das die Operationen und Bibliotheken der Programmiersprache Python.
Zur Geschichte
Definition von Datenstrukturen
Der Speicher eines Computers enthält eine Folge von Zeichen aus einem gegebenen Alphabet. Bei fast allen heutigen Computern ist dies eine Folge von Bits aus dem Alphabet {0,1}. Eine Datenstruktur ordnet eine Bitfolge in Gruppen und gibt jeder Gruppe eine Bedeutung. Der Gruppierungsprozess kann dann hierarchisch wiederholt werden.