Laufzeit
Eine der wichtigsten Eigenschaften eines Algorithmus ist seine Laufzeit, das heißt, wie lange er benötigt, um seine Aufgabe zu erledigen.
Nun ist es natürlich offensichtlich, dass jeder Algorithmus eine kleine Eingabe schneller abarbeiten kann als eine große. Deswegen wird die Laufzeit eines Algorithmus immer in Abhängigkeit von der Länge seiner Eingabe angegeben.
Beispiele aus der Mathematik
Schriftliche Addition
Nehmen wir an, wir berechnen schriftlich die Summe . Diese Berechnung besteht aus drei kleinen Einzelsummen: , und , wobei die 1 der Übertrag aus der letzten Addition ist. Jede dieser einzelnen Summen führen wir im Kopf durch, entscheidend ist die Anzahl der einzelnen Summen, die berechnet werden müssen. Um zwei dreistellige Zahlen zu addieren, muss man also drei einzelne Additionen durchführen.
Allgemein gesprochen: wenn man zwei Zahlen mit jeweils Ziffern addiert, muss man kleine Einzel-Additionen durchführen.
Das heißt: Wenn sich die Länge der Summanden verdoppelt, verdoppelt sich auch die Rechenzeit bei der schriftlichen Addition. Verzehnfacht sich die Länge der Summanden, verzehnfacht sich auch die Rechenzeit.
Schriftliche Multiplikation
Nehmen wir an, wir berechnen schriftlich das Produkt . Für diese Berechnung müssen vier einzelne Multiplikationen durchgeführt werden: , , und , die dann versetzt aufeinander addiert werden. Jede dieser vier Multiplikationen besteht wiederum aus vier kleinen Multiplikationen aus dem Kleinen Einmaleins, wie zum Beispiel bei der Multiplikation :
- , 8 schreib hin, 1 im Sinn
- , 7 schreib hin, 3 im Sinn
- , 7 schreib hin, 5 im Sinn
- , 77 schreib hin, weil danach nichts mehr kommt.
Insgesamt müssen also sechzehn kleine Multiplikationen ausgeführt werden[1]. Zum Schluss werden noch vier Additionen durchgeführt, bei denen eine insgesamt achtstellige Zahl herauskommt. Jede Addition besteht dabei wieder aus acht einzelnen Additionen der Ziffern.
Für die Mulitplikation zweier -stelliger Ziffern müssen also kleine Mulitiplikationen und kleine Additionen ausgeführt werden.
Allgemein gesprochen: wenn man zwei Zahlen mit jeweils Ziffern multipliziert, muss man kleine Einzel-Multiplikationen und kleine Einzel-Additionen durchführen. Zwischen der Anzahl der Ziffern und der Anzahl der Rechenschritte besteht also ein quadratischer Zusammenhang.
Das heißt: Wenn sich die Länge der Faktoren verdoppelt, vervierfacht sich die Rechenzeit bei der schriftlichen Addition. Verzehnfacht sich die Länge der Summanden, verhundertfacht sich die Rechenzeit.
Teilbarkeit
Nehmen wir an, wir möchten bestimmen, ob eine Zahl durch 10 teilbar ist. Dafür betrachten wir die letzte Ziffer: ist sie eine 0, so ist durch 10 teilbar. Für diese Betrachtung ist es völlig unerheblich, ob die Zahl zwei, zwanzig oder zweihundert Ziffern hat. Die Laufzeit dieser Berechnung hängt nicht von der Länge der Eingabe ab.
Das heißt: Wenn sich die Länge der Zahl verdoppelt, bleibt die Laufzeit des Algorithmus konstant. Verzehnfacht sich die Länge der Zahl, bleibt die Laufzeit trotzdem konstant.
𝒪-Notation
Die genauen Details, wie viele Schritte nun exakt nötig sind, sind eher unerheblich. Interessant ist nur, in welcher groben Größenordnung man unterwegs ist. Deswegen benutzt man in der Informatik die -Notation, um Laufzeiten zu beschreiben.
- bedeutet: zwischen der Länge der Eingabe und der Laufzeit besteht ein linearer Zusammenhang; wenn die Länge der Eingabe sich ver--facht, ver--facht sich auch die Laufzeit des Algorithmus. Beispiele: Schriftliches Addieren, Suchen in einer unsortierten Liste.
- bedeutet: zwischen der Länge der Eingabe und der Laufzeit besteht ein quadratischer Zusammenhang; wenn die Länge der Eingabe sich ver--facht, ver--facht sich die Laufzeit des Algorithmus. Beispiele: Schriftliches Multiplizieren, Sortierverfahren wie Bubblesort.
- bedeutet: zwischen der Länge der Eingabe und der Laufzeit besteht kein Zusammenhang; wenn die Länge der Eingabe sich ver--facht, bleibt die Laufzeit des Algorithmus konstant. Beispiel: Teilbarkeit durch 10, Pop beim Stack.
Ganz allgemein gilt: Wenn ich sage: "Die Laufzeit vom Algorithmus X liegt in ", dann meine ich: "Die Laufzeit lässt sich als mathematischer Term mit der Variablen angeben und es gibt eine Zahl , sodass ab einer gewissen Schwelle der Term, der die Laufzeit beschreibt, kleiner ist als ".
Grundsätzlich kann in die Klammern hinter dem jeder beliebige mathematische Term geschrieben werden. Das Ziel der Notation ist es aber, die Größenordnung der Laufzeit schnell deutlich zu machen, weswegen man sich bemüht, den Term möglichst knapp, aber auch möglichst präzise zu halten.
Die -Notation gibt nämlich nur eine obere Schwelle an. heißt nicht, dass sich die Laufzeit exakt in der Größenordnung von bewegt, sondern nur, dass sie nicht schneller wächst.
Fußnoten
- ↑ Man könnte Multiplikationen mit 0 oder 1 abkürzen, indem man direkt 0 bzw. den anderen Faktor ausgibt, aber bei der Berechnung der Laufzeit darf man nicht davon ausgehen, dass die Faktoren 0en oder 1en enthalten.