Hauptinhalt
Informationstechnik
Kurs: Informationstechnik > Lerneinheit 1
Lektion 3: Asymptotische NotationFunktionen in asymptotischer Schreibweise
Wenn wir die asymptotische Notation verwenden, um die Wachstumsrate der Laufzeit eines Algorithmus in Bezug auf die Eingabegröße n zum Ausdruck zu bringen, ist es gut, ein paar Dinge im Hinterkopf zu behalten.
Fangen wir mit etwas einfachem an. Angenommen, ein Algorithmus benötigt eine konstante Ausführungszeit, unabhängig von der Eingabegröße. Als Beispiel betrachten wir ein Array, das bereits in aufsteigender Reihenfolge sortiert ist. Du willst darin das minimale Element finden. Das würde dann unabhängig von der Größe des Arrays immer eine konstante Zeit dauern, da das minimale Element stets bei Index 0 anzufinden ist. Da wir die asymptotische Notation gerne als Funktion in Abhängigkeit von n angeben, könnte man die Laufzeit dieses Algorithmus als \Theta, left parenthesis, n, start superscript, 0, end superscript, right parenthesis angeben. Warum? Weil n, start superscript, 0, end superscript, equals, 1 ist und die Laufzeit des Algorithmus ein konstantes Vielfaches von 1 ist. In der Praxis schreiben wir allerdings nicht \Theta, left parenthesis, n, start superscript, 0, end superscript, right parenthesis sondern \Theta, left parenthesis, 1, right parenthesis.
Angenommen, ein Algorithmus dauert \Theta, left parenthesis, log, start base, 10, end base, n, right parenthesis. Ebensogut könnte man die Laufzeit als \Theta, left parenthesis, log, start base, 2, end base, n, right parenthesis angeben. Wenn die Basis des Logarithmus eine Konstante (2,10, usw.) ist, spielt es keine Rolle, welche Basis wir in der asymptotischen Notation verwenden. Was ist der Grund dafür? Es gibt eine mathematische Formel, die besagt:
für alle positiven Zahlen a, b, and n. Wenn a and b konstant sind, dann unterscheiden sich log, start base, a, end base, n und log, start base, b, end base, n nur durch den Faktor log, start base, b, end base, a, und das ist ein konstanter Faktor, denn wir bei der asymptotischen Notation vernachlässigen dürfen.
Daher können wir sagen, dass die Worst-Case-Laufzeit der Binärsuche \Theta, left parenthesis, log, start base, a, end base, n, right parenthesis für jeden positiv konstanten Wert von a ist. Warum? Die Anzahl der Vermutungen ist höchstens log, start base, 2, end base, n, plus, 1. Das Erzeugen und Testen jedes Ratewertes nimmt eine konstante Zeit in Anspruch, ebenso die Einrichtung und Rückgabe. Die Binärsuche dauert also \Theta, left parenthesis, log, start base, 2, end base, n, right parenthesis, Wir verwenden dabei den Logarithmus zur Basis 2 weil Informatiker gerne in Potenzen von 2 denken.
Wenn wir mit asymptotischer Notation arbeiten sehen wir eine Ordnung der häufig verwendeten Funktionen. Wenn a und b Konstanten sind und a, is less than, b ist, dann wächst eine Laufzeit von \Theta, left parenthesis, n, start superscript, a, end superscript, right parenthesis langsamer als eine Laufzeit von \Theta, left parenthesis, n, start superscript, b, end superscript, right parenthesis . Zum Beispiel wächst eine Laufzeit von \Theta, left parenthesis, n, right parenthesis, die ja \Theta, left parenthesis, n, start superscript, 1, end superscript, right parenthesis ist, langsamer als eine Laufzeit von \Theta, left parenthesis, n, squared, right parenthesis. Die Exponenten müssen dabei keine ganzen Zahlen sein. Zum Beispiel wächst eine Laufzeit von \Theta, left parenthesis, n, squared, right parenthesis langsamer als eine Laufzeit von \Theta, left parenthesis, n, squared, square root of, n, end square root, right parenthesis, was \Theta, left parenthesis, n, start superscript, 2, comma, 5, end superscript, right parenthesis ist.
Das folgende Diagramm vergleicht das Wachstum von n,n, squared und n, start superscript, 2, point, 5, end superscript:
Logarithmen wachsen langsamer als Polynome. Das heißt, dass \Theta, left parenthesis, log, start base, 2, end base, n, right parenthesis langsamer wächst als \Theta, left parenthesis, n, start superscript, a, end superscript, right parenthesis für beliebige positive Werte für a. Aber da der Wert von log, start base, 2, end base, n mit steigendem n wächst, wächst \Theta, left parenthesis, log, start base, 2, end base, n, right parenthesis schneller als \Theta, left parenthesis, 1, right parenthesis.
Das folgende Diagramm vergleicht das Wachstum von 1, n und log, start base, 2, end base, n:
Hier ist eine Liste von Funktionen in asymptotische Notation, denen wir bei der Analyse von Algorithmen oft begegnen. Wir sortieren sie nach ihrer Wachstumsgeschwindigkeit - von langsam nach schnell:
- \Theta, left parenthesis, 1, right parenthesis
- \Theta, left parenthesis, log, start base, 2, end base, n, right parenthesis
- \Theta, left parenthesis, n, right parenthesis
- \Theta, left parenthesis, n, log, start base, 2, end base, n, right parenthesis
- \Theta, left parenthesis, n, squared, right parenthesis
- \Theta, left parenthesis, n, squared, log, start base, 2, end base, n, right parenthesis
- \Theta, left parenthesis, n, cubed, right parenthesis
- \Theta, left parenthesis, 2, start superscript, n, end superscript, right parenthesis
- \Theta, left parenthesis, n, !, right parenthesis
Beachte, dass die Exponentialfunktion a, start superscript, n, end superscript, mit a, is greater than, 1, schneller wächst as eine polynomische Funktion n, start superscript, b, end superscript, mit b als Konstante.
Diese Liste ist nicht erschöpfend; es gibt viele Algorithmen, deren Laufzeiten hier nicht angezeigt werden. Du wirst hoffentlich ein paar davon auf deiner Reise durch die Informatik treffen.
Dieses Tutorial ist in Zusammenarbeit zwischen den Professoren Thomas Cormen und Devin Bock von Dartmouth Computer Sience und dem Khan Academy Computing Curiculum-Team entstanden und wurde von der KA Deutsch Community übersetzt. Das Tutorial ist unter der Lizenz CC-BY-NC-SA lizenziert.
Willst du an der Diskussion teilnehmen?
Noch keine Beiträge.