Landau-Symbole
Anpassen der Approximation ⓘ |
---|
Konzepte |
Ordnungen der Annäherung Skalenanalyse - Big-O-Notation Kurvenanpassung - Falsche Genauigkeit Signifikante Zahlen |
Andere Grundlagen |
Annäherung - Generalisierungsfehler Taylor-Polynom Wissenschaftliche Modellierung |
Die Big-O-Notation ist eine mathematische Notation, die das begrenzende Verhalten einer Funktion beschreibt, wenn das Argument gegen einen bestimmten Wert oder gegen unendlich tendiert. Big O gehört zu einer Familie von Notationen, die von Paul Bachmann, Edmund Landau und anderen erfunden wurden und als Bachmann-Landau-Notation oder asymptotische Notation bezeichnet werden. Der Buchstabe O wurde von Bachmann gewählt, um für Ordnung zu stehen, d. h. für die Ordnung der Annäherung. ⓘ
In der Informatik wird die Big-O-Notation verwendet, um Algorithmen danach zu klassifizieren, wie ihre Laufzeit oder ihr Platzbedarf mit zunehmender Eingabegröße wächst. In der analytischen Zahlentheorie wird die Big-O-Notation häufig verwendet, um eine Grenze für den Unterschied zwischen einer arithmetischen Funktion und einer besser verstandenen Näherung anzugeben; ein berühmtes Beispiel für einen solchen Unterschied ist der Restterm im Primzahlensatz. Die Big-O-Notation wird auch in vielen anderen Bereichen verwendet, um ähnliche Schätzungen vorzunehmen. ⓘ
Die Big-O-Notation charakterisiert Funktionen nach ihren Wachstumsraten: Verschiedene Funktionen mit der gleichen Wachstumsrate können mit der gleichen O-Notation dargestellt werden. Der Buchstabe O wird verwendet, weil die Wachstumsrate einer Funktion auch als die Ordnung der Funktion bezeichnet wird. Die Beschreibung einer Funktion in der Big-O-Schreibweise liefert in der Regel nur eine obere Grenze für die Wachstumsrate der Funktion. ⓘ
In Verbindung mit der Big-O-Notation gibt es mehrere verwandte Notationen, die die Symbole o, Ω, ω und Θ verwenden, um andere Arten von Schranken für asymptotische Wachstumsraten zu beschreiben. ⓘ
Notation | Anschauliche Bedeutung ⓘ |
---|---|
oder
|
wächst langsamer als |
oder
|
wächst nicht wesentlich schneller als |
wächst genauso schnell wie | |
wächst nicht immer langsamer als (Zahlentheorie) | |
wächst nicht wesentlich langsamer als (Komplexitätstheorie) | |
wächst schneller als |
Formale Definition
Sei f, die zu schätzende Funktion, eine reelle oder komplexwertige Funktion und sei g, die Vergleichsfunktion, eine reellwertige Funktion. Beide Funktionen seien auf einer unbeschränkten Teilmenge der positiven reellen Zahlen definiert und seien streng positiv für alle ausreichend großen Werte von x. Man schreibt
In vielen Kontexten wird die Annahme, dass wir an der Wachstumsrate interessiert sind, wenn die Variable x gegen unendlich geht, nicht angegeben, und man schreibt einfach, dass
In der Informatik ist eine etwas restriktivere Definition üblich: und müssen beide Funktionen von den positiven ganzen Zahlen zu den nichtnegativen reellen Zahlen sein; wenn es positive ganze Zahlen M und n0 gibt, so dass für alle . Wo nötig, werden endliche Bereiche (stillschweigend) ausgeschlossen von 's und ausgeschlossen, indem n0 ausreichend groß gewählt wird. (Zum Beispiel, ist undefiniert bei .) ⓘ
Beispiel
Im allgemeinen Sprachgebrauch ist die O-Schreibweise asymptotisch, d. h. sie bezieht sich auf sehr große x. In diesem Fall wird der Beitrag der "am schnellsten" wachsenden Terme die anderen irgendwann irrelevant machen. Infolgedessen können die folgenden Vereinfachungsregeln angewandt werden:
- Wenn f(x) eine Summe mehrerer Terme ist, kann derjenige mit der größten Wachstumsrate beibehalten werden, während alle anderen weggelassen werden.
- Wenn f(x) ein Produkt aus mehreren Faktoren ist, können alle Konstanten (Terme im Produkt, die nicht von x abhängen) weggelassen werden.
Nehmen wir zum Beispiel an, f(x) = 6x4 - 2x3 + 5, und wollen diese Funktion mit Hilfe der O-Schreibweise vereinfachen, um ihre Wachstumsrate zu beschreiben, wenn x gegen unendlich geht. Diese Funktion ist die Summe von drei Termen: 6x4, -2x3 und 5. Von diesen drei Termen ist derjenige mit der höchsten Wachstumsrate derjenige mit dem größten Exponenten in Abhängigkeit von x, nämlich 6x4. Nun kann man die zweite Regel anwenden: 6x4 ist ein Produkt aus 6 und x4, wobei der erste Faktor nicht von x abhängt. Wenn man diesen Faktor weglässt, erhält man die vereinfachte Form x4. Wir sagen also, dass f(x) ein "großes O" von x4 ist. Mathematisch gesehen kann man f(x) = O(x4) schreiben. Man kann diese Berechnung anhand der formalen Definition bestätigen: f(x) = 6x4 - 2x3 + 5 und g(x) = x4. Wenn man die obige formale Definition anwendet, ist die Aussage, dass f(x) = O(x4) ist, äquivalent zu seiner Erweiterung,
Verwendung
Die Notation Big O hat zwei Hauptanwendungsgebiete:
- In der Mathematik wird sie häufig verwendet, um zu beschreiben, wie gut eine endliche Reihe eine gegebene Funktion annähert, insbesondere im Fall einer abgeschnittenen Taylor-Reihe oder einer asymptotischen Erweiterung.
- In der Informatik ist sie für die Analyse von Algorithmen nützlich. ⓘ
In beiden Anwendungen wird die Funktion g(x), die in der O(-) vorkommt, in der Regel so einfach wie möglich gewählt, wobei konstante Faktoren und Terme niedrigerer Ordnung weggelassen werden. ⓘ
Es gibt zwei formal ähnliche, aber deutlich unterschiedliche Verwendungen dieser Notation:
- unendliche Asymptotik
- infinitesimale Asymptotik. ⓘ
Diese Unterscheidung bezieht sich jedoch nur auf die Anwendung und nicht auf das Prinzip - die formale Definition für das "große O" ist in beiden Fällen dieselbe, nur mit unterschiedlichen Grenzen für das Funktionsargument. ⓘ
Unendliche Asymptotik
Die Big-O-Notation ist nützlich, wenn Algorithmen auf ihre Effizienz hin analysiert werden. Die Zeit (oder die Anzahl der Schritte), die zur Lösung eines Problems der Größe n benötigt wird, kann beispielsweise als T(n) = 4n2 - 2n + 2 ermittelt werden. Je größer n wird, desto mehr dominiert der Term n2, so dass alle anderen Terme vernachlässigt werden können - wenn beispielsweise n = 500 ist, ist der Term 4n2 1000 Mal so groß wie der Term 2n. Die Vernachlässigung des letztgenannten Terms hätte für die meisten Zwecke vernachlässigbare Auswirkungen auf den Wert des Ausdrucks. Darüber hinaus werden die Koeffizienten irrelevant, wenn man sie mit Ausdrücken anderer Ordnung vergleicht, z. B. mit einem Ausdruck, der einen Term n3 oder n4 enthält. Selbst wenn T(n) = 1.000.000n2, wenn U(n) = n3 ist, übersteigt letzterer immer den ersteren, sobald n größer als 1.000.000 wird (T(1.000.000) = 1.000.0003 = U(1.000.000)). Außerdem hängt die Anzahl der Schritte von den Details des Maschinenmodells ab, auf dem der Algorithmus ausgeführt wird, aber verschiedene Maschinentypen unterscheiden sich in der Regel nur um einen konstanten Faktor in der Anzahl der Schritte, die zur Ausführung eines Algorithmus erforderlich sind. Die Big-O-Notation fasst also zusammen, was bleibt: Wir schreiben entweder
oder
und sagen, dass der Algorithmus eine Zeitkomplexität der Ordnung n2 hat. Das Zeichen "=" soll nicht "ist gleich" im normalen mathematischen Sinne ausdrücken, sondern eher ein umgangssprachliches "ist", so dass der zweite Ausdruck manchmal als genauer angesehen wird (siehe die Diskussion über das "Gleichheitszeichen" weiter unten), während der erste Ausdruck von einigen als Missbrauch der Notation angesehen wird. ⓘ
Infinitesimale Asymptotik
Big O kann auch verwendet werden, um den Fehlerterm in einer Annäherung an eine mathematische Funktion zu beschreiben. Die signifikantesten Terme werden explizit geschrieben, und die weniger signifikanten Terme werden in einem einzigen Big-O-Term zusammengefasst. Betrachten wir zum Beispiel die Exponentialreihe und zwei Ausdrücke, die gültig sind, wenn x klein ist:
Der zweite Ausdruck (der mit O(x3)) bedeutet, dass der Absolutwert des Fehlers ex - (1 + x + x2/2) höchstens einige konstante Male |x3| ist, wenn x nahe genug bei 0 liegt. ⓘ
Eigenschaften
Wenn die Funktion f als endliche Summe anderer Funktionen geschrieben werden kann, dann bestimmt die am schnellsten wachsende Funktion die Ordnung von f(n). Ein Beispiel,
Wenn eine Funktion durch ein Polynom in n begrenzt werden kann, kann man, wenn n gegen unendlich tendiert, die Terme niedrigerer Ordnung des Polynoms außer Acht lassen. Die Mengen O(nc) und O(cn) sind sehr unterschiedlich. Wenn c größer als eins ist, wächst die letztere viel schneller. Eine Funktion, die für jedes c schneller wächst als nc, wird als Superpolynom bezeichnet. Eine Funktion, die langsamer wächst als eine Exponentialfunktion der Form cn, wird subexponentiell genannt. Ein Algorithmus kann sowohl superpolynomielle als auch subexponentielle Zeit benötigen; Beispiele hierfür sind die schnellsten bekannten Algorithmen für die ganzzahlige Faktorisierung und die Funktion nlog n. ⓘ
Wir können alle Potenzen von n innerhalb der Logarithmen ignorieren. Die Menge O(log n) ist genau dasselbe wie O(log(nc)). Die Logarithmen unterscheiden sich nur um einen konstanten Faktor (da log(nc) = c log n) und die große O-Notation ignoriert dies. Ebenso sind Logarithmen mit unterschiedlichen konstanten Basen äquivalent. Andererseits sind Exponentiale mit unterschiedlichen Basen nicht von der gleichen Ordnung. Zum Beispiel sind 2n und 3n nicht von derselben Ordnung. ⓘ
Das Ändern von Einheiten kann sich auf die Reihenfolge des resultierenden Algorithmus auswirken, muss es aber nicht. Eine Änderung der Einheiten ist gleichbedeutend mit der Multiplikation der entsprechenden Variablen mit einer Konstanten, wo immer sie auftaucht. Wenn ein Algorithmus beispielsweise in der Reihenfolge n2 abläuft, bedeutet das Ersetzen von n durch cn, dass der Algorithmus in der Reihenfolge c2n2 abläuft, und die große O-Notation ignoriert die Konstante c2. Dies kann als c2n2 = O(n2) geschrieben werden. Wenn ein Algorithmus jedoch in der Größenordnung von 2n abläuft, ergibt das Ersetzen von n durch cn 2cn = (2c)n. Dies ist im Allgemeinen nicht äquivalent zu 2n. Das Ändern von Variablen kann sich auch auf die Reihenfolge des resultierenden Algorithmus auswirken. Wenn beispielsweise die Laufzeit eines Algorithmus O(n) ist, wenn sie anhand der Anzahl n der Ziffern einer Eingabezahl x gemessen wird, dann ist seine Laufzeit O(log x), wenn sie in Abhängigkeit von der Eingabezahl x selbst gemessen wird, da n = O(log x). ⓘ
Produkt
Summe
Wenn und dann . Daraus folgt, dass wenn und dann . Mit anderen Worten, diese zweite Aussage besagt, dass ein konvexer Kegel ist. ⓘ
Multiplikation mit einer Konstanten
Sei k eine Konstante ungleich Null. Dann ist . Mit anderen Worten: Wenn , dann ⓘ
Mehrere Variablen
Big O (und little o, Ω, usw.) kann auch mit mehreren Variablen verwendet werden. Um big O für mehrere Variablen formal zu definieren, nehmen wir an und sind zwei Funktionen, die auf einer Teilmenge von . Wir sagen
wenn und nur wenn es Konstanten gibt und derart, dass für alle mit für einige Äquivalent dazu ist die Bedingung, dass für einige kann geschrieben werden geschrieben werden, wobei die Tschebyscheff-Norm bezeichnet. Zum Beispiel kann die Aussage
besagt, dass es Konstanten C und M gibt, so dass
wenn entweder oder gilt. Diese Definition erlaubt, dass alle Koordinaten von ins Unendliche wachsen. Insbesondere ist die Aussage
(d.h., ) ist ganz anders als
(d.h., ). ⓘ
Nach dieser Definition ist die Teilmenge, auf der eine Funktion definiert ist, bei der Verallgemeinerung von Aussagen aus dem univariaten Bereich in den multivariaten Bereich von Bedeutung. Zum Beispiel, wenn und , dann wenn wir einschränken und auf definiert sind, aber nicht, wenn sie auf . ⓘ
Dies ist nicht die einzige Verallgemeinerung von Big O auf multivariate Funktionen, und in der Praxis gibt es eine gewisse Inkonsistenz bei der Wahl der Definition. ⓘ
Fragen der Notation
Gleichheitszeichen
Die Aussage "f(x) ist O(g(x))", wie oben definiert, wird gewöhnlich als f(x) = O(g(x)) geschrieben. Manche halten dies für einen Missbrauch der Notation, da die Verwendung des Gleichheitszeichens irreführend sein könnte, da es eine Symmetrie suggeriert, die diese Aussage nicht hat. Wie de Bruijn sagt, ist O(x) = O(x2) wahr, aber O(x2) = O(x) ist es nicht. Knuth bezeichnet solche Aussagen als "Einweggleichungen", denn wenn die Seiten umgedreht werden könnten, "könnten wir aus den Identitäten n = O(n2) und n2 = O(n2) lächerliche Dinge wie n = n2 ableiten". In einem anderen Brief wies Knuth auch darauf hin, dass "das Gleichheitszeichen in Bezug auf solche Notationen nicht symmetrisch ist", da in dieser Notation "Mathematiker das =-Zeichen üblicherweise so verwenden, wie sie das Wort "is" im Englischen verwenden: Aristoteles ist ein Mann, aber ein Mann ist nicht unbedingt Aristoteles". ⓘ
Aus diesen Gründen wäre es präziser, die Mengenschreibweise zu verwenden und f(x) ∈ O(g(x)) zu schreiben (gelesen als: "f(x) ist ein Element von O(g(x))" oder "f(x) ist in der Menge O(g(x))"), wobei man sich O(g(x)) als die Klasse aller Funktionen h(x) vorstellt, für die gilt: |h(x)| ≤ C|g(x)| für eine Konstante C. Die Verwendung des Gleichheitszeichens ist jedoch üblich. ⓘ
Andere arithmetische Operatoren
Die Big-O-Notation kann auch in Verbindung mit anderen arithmetischen Operatoren in komplizierteren Gleichungen verwendet werden. Zum Beispiel bezeichnet h(x) + O(f(x)) die Sammlung von Funktionen mit dem Wachstum von h(x) plus einem Teil, dessen Wachstum auf das von f(x) beschränkt ist. Somit,
dasselbe ausdrücken wie
Beispiel
Angenommen, es wird ein Algorithmus entwickelt, der mit einer Menge von n Elementen arbeitet. Seine Entwickler sind daran interessiert, eine Funktion T(n) zu finden, die ausdrückt, wie lange der Algorithmus (in einem beliebigen Zeitmaß) in Abhängigkeit von der Anzahl der Elemente in der Eingabemenge benötigt. Der Algorithmus arbeitet, indem er zunächst ein Unterprogramm zum Sortieren der Elemente in der Menge aufruft und dann seine eigenen Operationen durchführt. Die Sortierung hat eine bekannte Zeitkomplexität von O(n2), und nachdem das Unterprogramm ausgeführt wurde, muss der Algorithmus weitere 55n3 + 2n + 10 Schritte ausführen, bevor er beendet wird. Die gesamte Zeitkomplexität des Algorithmus lässt sich also als T(n) = 55n3 + O(n2) ausdrücken. Hier werden die Terme 2n + 10 unter das schneller wachsende O(n2) subsumiert. Auch hier wird ein Teil der formalen Bedeutung des Symbols "=" außer Acht gelassen, aber es ermöglicht die Verwendung der Notation Big O als eine Art praktischen Platzhalter. ⓘ
Mehrfache Verwendungen
Bei komplizierteren Verwendungen kann O(-) an verschiedenen Stellen in einer Gleichung erscheinen, sogar mehrmals auf jeder Seite. Zum Beispiel gilt Folgendes für :
Schriftsatz
Das große O wird als kursives Großbuchstaben-"O" gesetzt, wie im folgenden Beispiel: . In TeX wird es durch die Eingabe von O im mathematischen Modus erzeugt. Im Gegensatz zu den Bachmann-Landau-Notationen mit griechischem Namen benötigt es kein spezielles Symbol. Einige Autoren verwenden jedoch die kalligrafische Variante stattdessen. ⓘ
Ordnungen der üblichen Funktionen
Hier ist eine Liste von Funktionsklassen, die bei der Analyse der Laufzeit eines Algorithmus häufig vorkommen. In jedem Fall ist c eine positive Konstante und n wächst unbegrenzt. Die langsamer wachsenden Funktionen werden im Allgemeinen zuerst aufgeführt. ⓘ
Schreibweise | Bezeichnung | Beispiel ⓘ |
---|---|---|
Konstante | Feststellen, ob eine Binärzahl gerade oder ungerade ist; Berechnen ; Verwendung einer Nachschlagetabelle mit konstanter Größe | |
doppelt logarithmisch | Anzahl der Vergleiche bei der Suche nach einem Element mit Hilfe der Interpolationssuche in einem sortierten Feld mit gleichmäßig verteilten Werten | |
logarithmisch | Suche nach einem Element in einem sortierten Feld mit binärer Suche oder einem ausgeglichenen Suchbaum sowie alle Operationen in einem binomischen Heap | |
polylogarithmisch | Die Matrix-Kettenordnung kann in polylogarithmischer Zeit auf einer parallelen Maschine mit wahlfreiem Zugriff gelöst werden. | |
Bruchteilspotenz | Suche in einem k-d-Baum | |
linear | Suche nach einem Element in einer unsortierten Liste oder in einem unsortierten Array; Addition zweier n-Bit-Ganzzahlen durch Ripple-Carry | |
n log-Stern n | Triangulation eines einfachen Polygons mit dem Seidel-Algorithmus oder dem Union-Find-Algorithmus. Beachten Sie, dass | |
linearithmisch, loglinear, quasilinear oder "n log n" | Durchführen einer schnellen Fourier-Transformation; schnellstmögliche Vergleichssortierung; Heapsort und Merge-Sortierung | |
quadratisch | Multiplikation zweier n-stelliger Zahlen mit einem einfachen Algorithmus; einfache Sortieralgorithmen wie Bubble Sort, Selection Sort und Insertion Sort; (Worst-Case-)Schranke für einige in der Regel schnellere Sortieralgorithmen wie Quicksort, Shellsort und Tree Sort | |
polynomial oder algebraisch | Parsing von baumadjungierten Grammatiken; Maximum Matching für bipartite Graphen; Ermittlung der Determinante mit LU-Zerlegung | |
L-Notation oder subexponentiell | Faktorisierung einer Zahl mit Hilfe des quadratischen Siebs oder des Zahlenfeldsiebs | |
exponentiell | Suche nach der (exakten) Lösung des Problems des Handlungsreisenden mit Hilfe der dynamischen Programmierung; Bestimmung der Äquivalenz zweier logischer Aussagen mit Hilfe der Brute-Force-Suche | |
faktoriell | Lösung des Handelsreisenden-Problems mittels Brute-Force-Suche; Erzeugung aller unbeschränkten Permutationen einer Menge; Bestimmung der Determinante mit Laplace-Erweiterung; Aufzählung aller Partitionen einer Menge |
Die Aussage wird manchmal abgeschwächt zu um einfachere Formeln für die asymptotische Komplexität abzuleiten. Für beliebige und , ist eine Teilmenge von für jede und kann daher als Polynom mit einer größeren Ordnung betrachtet werden. ⓘ
Verwandte asymptotische Notationen
Big O wird in der Informatik häufig verwendet. Zusammen mit einigen anderen verwandten Notationen bildet es die Familie der Bachmann-Landau-Notationen. ⓘ
Little-o-Notation
Intuitiv bedeutet die Behauptung "f(x) ist o(g(x))" (lies "f(x) ist little-o von g(x)"), dass g(x) viel schneller wächst als f(x). Wie zuvor sei f eine reelle oder komplexwertige Funktion und g eine reelle Funktion, beide definiert auf einer unbeschränkten Teilmenge der positiven reellen Zahlen, so dass g(x) für alle ausreichend großen Werte von x streng positiv ist. Man schreibt
wenn es für jede positive Konstante ε eine Konstante gibt derart, dass
Zum Beispiel hat man
- und sowohl als ⓘ
Der Unterschied zwischen der Definition der big-O-Notation und der Definition von little-o besteht darin, dass erstere für mindestens eine Konstante M gelten muss, während letztere für jede noch so kleine positive Konstante ε gelten muss. Auf diese Weise macht die little-o-Notation eine stärkere Aussage als die entsprechende big-O-Notation: Jede Funktion, die little-o von g ist, ist auch big-O von g, aber nicht jede Funktion, die big-O von g ist, ist auch little-o von g. Zum Beispiel, aber . ⓘ
Da g(x) ungleich Null ist oder zumindest ab einem bestimmten Punkt ungleich Null wird, ist die Beziehung äquivalent zu
- (und dies ist in der Tat die ursprüngliche Definition der Little-O-Notation durch Landau). ⓘ
Little-o berücksichtigt eine Reihe von arithmetischen Operationen. Zum Beispiel,
- wenn c eine Konstante ungleich Null ist und dann , und
- Wenn und dann
Sie erfüllt auch eine Transitivitätsbeziehung:
- Wenn und dann ⓘ
Big-Omega-Notation
Eine andere asymptotische Notation ist gelesen "großes Omega". Es gibt zwei weit verbreitete und unvereinbare Definitionen der Aussage ⓘ
- als , ⓘ
wobei a eine reelle Zahl ist, ∞ oder -∞, wobei f und g reelle Funktionen sind, die in einer Umgebung von a definiert sind, und wobei g in dieser Umgebung positiv ist. ⓘ
Die Hardy-Littlewood-Definition wird hauptsächlich in der analytischen Zahlentheorie verwendet, die Knuth-Definition hauptsächlich in der Komplexitätstheorie; die Definitionen sind nicht äquivalent. ⓘ
Die Hardy-Littlewood-Definition
Im Jahr 1914 führten Godfrey Harold Hardy und John Edensor Littlewood das Symbol mit der Bedeutung ⓘ
ein. Also ist die Negation von . ⓘ
Im Jahr 1916 führten dieselben Verfasser zwei neue Symbole und mit den Bedeutungen ⓘ
- ; ⓘ
ein. Also ist die Negation von und die Negation von . ⓘ
Im Gegensatz zu einer späteren Aussage von Donald E. Knuth verwendete Landau diese drei Symbole im Jahre 1924 mit den gleichen Bedeutungen. ⓘ
Diese Hardy-Littlewood-Symbole sind Prototypen, sie werden nie genau so verwendet. ist zu und zu geworden. ⓘ
Diese drei Symbole sowie (dies bedeutet, dass die beiden Eigenschaften und erfüllt sind) werden heute noch systematisch in der analytischen Zahlentheorie verwendet. ⓘ
Einfache Beispiele
Wir haben ⓘ
- als ⓘ
und genauer gesagt ⓘ
- als ⓘ
Wir haben ⓘ
- als ⓘ
und genauer gesagt ⓘ
- als ⓘ
jedoch ⓘ
- als ⓘ
Wir haben ⓘ
und speziell ⓘ
Wir haben ⓘ
und speziell ⓘ
aber ⓘ
Die Knuth-Definition
1976 veröffentlichte Donald Knuth einen Aufsatz, in dem er die Verwendung des -Symbols zur Beschreibung einer stärkeren Eigenschaft zu rechtfertigen. Knuth schrieb: "Für alle Anwendungen, die ich bisher in der Informatik gesehen habe, ist eine stärkere Anforderung ... viel angemessener". Er definierte ⓘ
mit dem Kommentar: "Obwohl ich Hardy und Littlewoods Definition von geändert habe, fühle ich mich dazu berechtigt, weil ihre Definition keineswegs weit verbreitet ist und weil es andere Wege gibt, das zu sagen, was sie in den vergleichsweise seltenen Fällen, in denen ihre Definition zutrifft, sagen wollen." ⓘ
Familie der Bachmann-Landau-Notationen
Schreibweise | Bezeichnung | Beschreibung | Formale Definition | Definition der Grenze ⓘ |
---|---|---|---|---|
Kleines O; Kleines Oh | f wird asymptotisch von g dominiert | |||
Groß O; Groß Oh; Groß Omicron | ist oben durch g (bis zu einem konstanten Faktor) asymptotisch begrenzt | |||
Großes Theta | f ist sowohl nach oben als auch nach unten asymptotisch durch g begrenzt | und (Knuth-Version) | ||
In der Größenordnung von | f ist asymptotisch gleich g | |||
Big Omega in der Komplexitätstheorie (Knuth) | f ist unten asymptotisch durch g begrenzt | |||
Kleines Omega | f dominiert g asymptotisch | |||
Großes Omega in der Zahlentheorie (Hardy-Littlewood) | wird nicht asymptotisch von g dominiert |
Die Grenzwertdefinitionen nehmen an für hinreichend große . Die Tabelle ist (teilweise) vom kleinsten zum größten sortiert, in dem Sinne, dass (Knuths Version von) auf Funktionen entsprechen auf der reellen Linie entsprechen (die Hardy-Littlewood-Version von entspricht jedoch keiner solchen Beschreibung). ⓘ
Die Informatik verwendet das große , großes Theta , kleines , kleines Omega und Knuths großes Omega Notationen. Die analytische Zahlentheorie verwendet häufig die Bezeichnungen big , kleines , Hardy-Littlewoods großes Omega (mit oder ohne die Indizes +, - oder ±) und Bezeichnungen. Das kleine Omega Notation wird in der Analysis nicht so häufig verwendet. ⓘ
Verwendung in der Informatik
Informell, insbesondere in der Informatik, kann die große O-Notation oft etwas anders verwendet werden, um eine asymptotische enge Schranke zu beschreiben, wo die Verwendung der großen Theta-Θ-Notation in einem bestimmten Kontext sachlich angemessener sein könnte. Betrachtet man zum Beispiel eine Funktion T(n) = 73n3 + 22n2 + 58, so sind alle der folgenden Möglichkeiten im Allgemeinen akzeptabel, aber engere Schranken (wie die Nummern 2 und 3 unten) werden in der Regel gegenüber lockeren Schranken (wie Nummer 1 unten) stark bevorzugt.
- T(n) = O(n100)
- T(n) = O(n3)
- T(n) = Θ(n3)
Die äquivalenten englischen Aussagen lauten entsprechend:
- T(n) wächst asymptotisch nicht schneller als n100
- T(n) wächst asymptotisch nicht schneller als n3
- T(n) wächst asymptotisch so schnell wie n3.
Während also alle drei Aussagen wahr sind, ist in jeder von ihnen immer mehr Information enthalten. In einigen Bereichen wird jedoch die große O-Notation (Nummer 2 in den obigen Listen) häufiger verwendet als die große Theta-Notation (Nummer 3 in den obigen Listen). Wenn beispielsweise T(n) die Laufzeit eines neu entwickelten Algorithmus für die Eingabegröße n darstellt, könnten die Erfinder und Benutzer des Algorithmus eher geneigt sein, eine obere asymptotische Grenze für die Laufzeit anzugeben, ohne eine explizite Aussage über die untere asymptotische Grenze zu machen. ⓘ
Andere Notation
In ihrem Buch Introduction to Algorithms betrachten Cormen, Leiserson, Rivest und Stein die Menge der Funktionen f, die folgende Bedingungen erfüllen ⓘ
In einer korrekten Schreibweise kann diese Menge z. B. O(g) genannt werden, wobei ⓘ
Die Autoren stellen fest, dass die Verwendung des Gleichheitsoperators (=) zur Bezeichnung der Mengenzugehörigkeit anstelle des Mengenzugehörigkeitsoperators (∈) ein Missbrauch der Notation ist, aber Vorteile hat. Innerhalb einer Gleichung oder Ungleichung steht die Verwendung der asymptotischen Notation für eine anonyme Funktion in der Menge O(g), wodurch Terme niedrigerer Ordnung eliminiert werden, was z. B. dazu beiträgt, unwesentliche Unordnung in Gleichungen zu reduzieren:
Erweiterungen der Bachmann-Landau-Notationen
Eine andere Notation, die manchmal in der Informatik verwendet wird, ist Õ (soft-O): f(n) = Õ(g(n)) ist eine Abkürzung für f(n) = O(g(n) logk n) für ein gewisses k. Einige Autoren schreiben O* für den gleichen Zweck. Im Wesentlichen handelt es sich dabei um eine Big-O-Notation, bei der logarithmische Faktoren ignoriert werden, weil die Wachstumsrateneffekte einer anderen superlogarithmischen Funktion eine Wachstumsratenexplosion für große Eingabeparameter anzeigen, die für die Vorhersage schlechter Laufzeitleistungen wichtiger ist als die feineren Effekte, die von dem/den logarithmischen Wachstumsfaktor(en) verursacht werden. Diese Notation wird häufig verwendet, um die "Erbsenzählerei" bei Wachstumsraten zu vermeiden, die als zu eng begrenzt für die vorliegende Problematik angegeben werden (da logk n immer o(nε) für jede Konstante k und jedes ε > 0 ist). ⓘ
Auch die Notation L, definiert als
ist geeignet für Funktionen, die zwischen polynomiell und exponentiell liegen, was die . ⓘ
Verallgemeinerungen und verwandte Verwendungen
Die Verallgemeinerung auf Funktionen, die Werte in jedem normierten Vektorraum annehmen, ist einfach (Ersetzen der absoluten Werte durch Normen), wobei f und g ihre Werte nicht im selben Raum annehmen müssen. Eine Verallgemeinerung auf Funktionen g, die Werte in einer beliebigen topologischen Gruppe annehmen, ist ebenfalls möglich. Der "Begrenzungsprozess" x → xo kann auch verallgemeinert werden, indem man eine beliebige Filterbasis einführt, d. h. auf gerichtete Netze f und g. Die o-Notation kann verwendet werden, um Ableitungen und Differenzierbarkeit in ganz allgemeinen Räumen zu definieren, und auch (asymptotische) Äquivalenz von Funktionen,
was eine Äquivalenzrelation und ein restriktiverer Begriff ist als die Beziehung "f ist Θ(g)" von oben. (Sie reduziert sich auf lim f / g = 1, wenn f und g positive reellwertige Funktionen sind.) Zum Beispiel ist 2x Θ(x), aber 2x - x ist nicht o(x). ⓘ
Geschichte (Bachmann-Landau-, Hardy- und Vinogradov-Notationen)
Das Symbol O wurde erstmals vom Zahlentheoretiker Paul Bachmann 1894 im zweiten Band seines Buches Analytische Zahlentheorie eingeführt. Der Zahlentheoretiker Edmund Landau übernahm es und wurde dadurch inspiriert, 1909 die Notation o einzuführen; daher werden beide nun Landau-Symbole genannt. Diese Notationen wurden in der angewandten Mathematik in den 1950er Jahren für die asymptotische Analyse verwendet. Das Symbol (im Sinne von "ist nicht ein o von") wurde 1914 von Hardy und Littlewood eingeführt. Hardy und Littlewood führten 1916 auch die Symbole ("rechts") und ("links") ein, Vorläufer der modernen Symbole ("ist nicht kleiner als ein kleines o von") und ("ist nicht größer als ein kleines o von"). Daher werden die Omega-Symbole (mit ihren ursprünglichen Bedeutungen) manchmal auch als "Landau-Symbole" bezeichnet. Diese Notation wurde spätestens seit den 1950er Jahren in der Zahlentheorie verwendet. In den 1970er Jahren wurde das große O in der Informatik von Donald Knuth popularisiert, der die verwandte Theta-Notation einführte und eine andere Definition für die Omega-Notation vorschlug. ⓘ
Landau hat die großen Theta- und kleinen Omega-Symbole nie verwendet. ⓘ
Hardy's Symbole waren (in Bezug auf die moderne O-Notation)
- und ⓘ
(Hardy definierte oder verwendete jedoch nie die Notation , noch , wie manchmal berichtet wurde). Hardy führte die Symbole und (sowie einige andere Symbole) in seinem 1910 erschienenen Traktat "Orders of Infinity" ein und verwendete sie nur in drei Arbeiten (1910-1913). In seinen verbleibenden fast 400 Arbeiten und Büchern verwendete er durchweg die Landau-Symbole O und o. ⓘ
Hardys Notation wird heute nicht mehr verwendet. Andererseits führte der russische Zahlentheoretiker Ivan Matveyevich Vinogradov in den 1930er Jahren seine Notation ein, die in der Zahlentheorie zunehmend anstelle der Notation. Wir haben
und häufig werden beide Notationen in ein und derselben Arbeit verwendet. ⓘ
Das große O steht ursprünglich für "Ordnung" (Bachmann 1894) und ist somit ein lateinischer Buchstabe. Weder Bachmann noch Landau nennen es jemals "Omicron". Das Symbol wurde viel später (1976) von Knuth als großes Omikron angesehen, wahrscheinlich in Anlehnung an seine Definition des Symbols Omega. Die Ziffer Null sollte nicht verwendet werden. ⓘ
Erstmals drückte der deutsche Zahlentheoretiker Paul Bachmann 1894 „durch das Zeichen eine Größe aus […], deren Ordnung in Bezug auf die Ordnung von nicht überschreitet […].“ Der ebenfalls deutsche Zahlentheoretiker Edmund Landau, durch den die - und -Symbolik bekannt wurde und mit dessen Namen sie insbesondere im deutschen Sprachraum heute verbunden ist, übernahm Bachmanns Bezeichnung und führte zudem die -Bezeichnung für „von kleiner Ordnung“ ein. ⓘ
Sonderfall: Omega-Symbol
Zahlentheoretische Notation
Die strenge Notation wird in der Zahlentheorie nie benutzt und man schreibt weniger streng immer . Dies bedeutet hier „ ist ein Omega von “. ⓘ
Folgerung
Für jede Funktion werden durch
jeweils Mengen von Funktionen beschrieben. Es gelten folgende Beziehungen zwischen diesen:
Notationsfallen
Vergessener Grenzwert
Eine weitere Falle besteht darin, dass oft nicht angegeben wird, auf welchen Grenzwert sich das Landausymbol bezieht. Der Grenzwert ist aber wesentlich; so ist beispielsweise
für , nicht aber für den einseitigen Grenzwert mit
Jedoch wird normalerweise der zu betrachtende Grenzwert aus dem Zusammenhang klar und Mehrdeutigkeiten treten nur selten auf. ⓘ
Anwendung in der Komplexitätstheorie
In der Komplexitätstheorie werden die Landau-Symbole vor allem verwendet, um den (minimalen, mittleren oder maximalen) Zeit- oder Speicherplatzbedarf eines Algorithmus zu beschreiben. Man spricht dann von Zeitkomplexität bzw. Platzkomplexität. Die Komplexität kann vom verwendeten Maschinenmodell abhängen. In der Regel nimmt man jedoch ein „normales“ Modell an, zum Beispiel ein der Turingmaschine äquivalentes. ⓘ