Hauptinhalt
Kurs: Informationstechnik > Lerneinheit 1
Lektion 3: Asymptotische Notationθ-Symbol (Theta)
Betrachten wir eine einfache Implementation der linearen Suche:
var doLinearSearch = function(array, targetValue) {
for (var guess = 0; guess < array.length; guess++) {
if (array[guess] === targetValue) {
return guess; // found it!
}
}
return -1; // didn't find it
};
Lass uns die Größe des Arrays ( bezeichnen. Dann ist die maximale Anzahl Durchläufe der for-Schleife . Dieser schlechteste Fall tritt dann ein, wenn der gesuchte Wert im Array gar nicht vorkommt.
array.length
) mit Bei jeder Ausführung der Schleife, müssen mehrere Dinge gemacht werden:
- vergleiche
guess
mitarray.length
- vergleiche
array[guess]
mittargetValue
- liefere eventuell den Wert von
guess
- erhöhe
guess
.
Jede dieser kleinen Berechnungen benötigt bei jeder Ausführung eine konstante Zeitspanne. Wenn die for-Schleife mal iteriert, dann ist die Zeit für alle Iterationen , wobei die Summe der Zeiten für die Berechnungen in einer Schleifeniteration ist.
Leider kennen wir hier aber den Wert von nicht, da dieser von der Geschwindigkeit des Prozessors, der verwendeten Programmiersprache, Compilers oder Interpreters, der den Quellcode in ausführbaren Maschinencode umwandelt, und anderen Faktoren abhängt.
Dieser Code hat ein wenig zusätzlichen Overhead, um die for-Schleife einzurichten (einschließlich der Initialisierung von , was auch eine Konstante ist. Daher ist die Gesamtzeit für die lineare Suche im schlimmsten Fall .
guess
auf 0) und möglicherweise der Rückgabe von -1
am Ende. Nennen wir die Zeit für diesen Overhead Wie wir bereits gesehen haben, sagen der konstante Faktor und der niederwertige Term nichts über die Wachstumsrate der Laufzeit aus. Bedeutsam ist hingegen, dass die Worst-case Laufzeit der linearen Suche mit der Arraygröße wächst. Die Notation, die wir für diese Laufzeit verwenden, ist . Das ist der griechische Buchstabe "Theta", und wir sagen "big-Theta von " oder einfach nur "Theta von ".
Wenn eine bestimmte Laufzeit ist, dann bedeutet dies, dass wenn groß genug wird, die Laufzeit mindestens und höchstens für die Konstanten und ist. Man kann sich so vorstellen:
Für kleine Werte von ist uns gleichgültig, wie die Laufzeit im Vergleich zu oder ist. Aber sobald groß genug ist - also auf oder rechts von der gestrichelten Linie - muss die Laufzeit zwischen und liegen. Solange die Konstanten und existieren, sagen wir, dass die Laufzeit ist.
Wir sind übrigens nicht auf in Big-Θ Notation beschränkt. Wir können jede Funktion verwenden, wie z. B. , oder jede andere Funktion von . Man kann siech eine Laufzeit von für eine beliebige Funktion so vorstellen:
Sobald groß genug ist, liegt die Laufzeit zwischen und .
Ein weiterer Vorteil der Verwendung der Big-Θ-Notation ist, dass wir uns keine Sorgen machen müssen, welche Zeiteinheiten wir verwenden. Angenommen, wir berechnen, dass eine Laufzeit Mikrosekunden ist. Oder vielleicht sind es auch Millisekunden? Wenn du die Big-Θ Notation benutzt, nennst Du keine Zeiteinheit. In der Praxis suchen wir den bestimmenden Term und lassen also Konstanten und Terme geringerer Ordnung fallen. Du lässt also den Faktor 6 und die Terme fallen, und gibst lediglich an, dass die Laufzeit ist.
Wenn wir die Big-Θ Notation verwenden, sagen wir, dass wir ein asymptotisch enges Intervall der Laufzeit haben. "Asymptotisch", weil es nur für große Werte von zutrifft ist. "Intervall", weil die Laufzeit nach oben und nach unten beschränkt ist.
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.