Landau-Symbole

Aus besserwiki.de
Beispiel für die Notation von Big O: da es gibt (z.B., ) und (z.B.,), so dass wenn .

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

wenn der Absolutwert von höchstens ein positives konstantes Vielfaches von für alle hinreichend großen Werte von x. Das heißt wenn es eine positive reelle Zahl M und eine reelle Zahl x0 gibt, so dass

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

Die Notation kann auch verwendet werden, um das Verhalten von f in der Nähe einer reellen Zahl a zu beschreiben (oft ist a = 0): Wir sagen
wenn es positive Zahlen gibt und M, so dass für alle x mit ,
Da g(x) so gewählt wird, dass es für Werte von x, die hinreichend nahe bei a liegen, ungleich Null ist, können diese beiden Definitionen mit Hilfe des Grenzwerts vereinheitlicht werden:
Wenn

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,

für eine geeignete Wahl von x0 und M und für alle x > x0. Um dies zu beweisen, sei x0 = 1 und M = 13. Dann gilt für alle x > x0:
also

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

Graphen von Funktionen, die häufig bei der Analyse von Algorithmen verwendet werden und die Anzahl der Operationen N im Verhältnis zur Eingabegröße n für jede Funktion zeigen

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 :

Die Bedeutung solcher Aussagen ist wie folgt: Für jede Funktion, die jedes O(-) auf der linken Seite erfüllt, gibt es einige Funktionen, die jedes O(-) auf der rechten Seite erfüllen, so dass das Einsetzen all dieser Funktionen in die Gleichung die beiden Seiten gleich macht. Die dritte Gleichung oben bedeutet zum Beispiel: "Für jede Funktion f(n) = O(1) gibt es eine Funktion g(n) = O(en), so dass nf(n) = g(n)." In Bezug auf die obige "Mengenschreibweise" bedeutet dies, dass die Klasse der Funktionen, die durch die linke Seite dargestellt wird, eine Teilmenge der Klasse der Funktionen ist, die durch die rechte Seite dargestellt wird. Bei dieser Verwendung ist das "=" ein formales Symbol, das im Gegensatz zur üblichen Verwendung von "=" keine symmetrische Beziehung darstellt. So impliziert z. B. nO(1) = O(en) nicht die falsche Aussage O(en) = nO(1).

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.

  1. T(n) = O(n100)
  2. T(n) = O(n3)
  3. T(n) = Θ(n3)

Die äquivalenten englischen Aussagen lauten entsprechend:

  1. T(n) wächst asymptotisch nicht schneller als n100
  2. T(n) wächst asymptotisch nicht schneller als n3
  3. 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" xxo 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.