Wie verhalten sich O und Ω zum schlechtesten und besten Fall?


33

Heute haben wir in einer Vorlesung einen sehr einfachen Algorithmus zum Finden eines Elements in einem sortierten Array unter Verwendung der binären Suche besprochen . Wir wurden gebeten, die asymptotische Komplexität für ein Array von Elementen zu bestimmen .n

Meine Idee war, dass es offensichtlich oder , um genauer zu sein, weil die Anzahl der Operationen im schlimmsten Fall ist. Aber ich kann es besser machen, zum Beispiel, wenn ich das gesuchte Element zum ersten Mal drücke - dann ist die untere Schranke .O ( log 2 n ) log 2 n Ω ( 1 )O(logn)O(log2n)log2nΩ(1)

Der Dozent präsentierte die Lösung als da wir normalerweise nur Worst-Case-Eingaben für Algorithmen berücksichtigen.Θ(logn)

Aber wenn wir nur die schlimmsten Fälle betrachten, was ist der Sinn von und -Notation, wenn alle schlimmsten Fälle des gegebenen Problems die gleiche Komplexität haben ( wäre alles, was wir brauchen, oder?).Ω ΘOΩΘ

Was vermisse ich hier?


@ Smaji: Was meinst du mit "Aber wenn du nur die schlimmsten Fälle betrachtest, was ist der Sinn von Big O und Big Omega Notation, wenn alle schlimmsten Fälle + - die gleiche Komplexität haben (Theta wäre alles, was wir brauchen, richtig?)." bitte kläre es.
Tanmoy

@ Smajl: Ich denke, Ihre Frage ist: Was ist die Notwendigkeit der Big O- und Big Omega-Notation bei der Algorithmusanalyse? hab ich recht?
Tanmoy

5
O ( log n )O(log2n) ist nicht spezifischer als , sie bezeichnen dieselbe Klasse von Funktionen. O(logn)
Raphael

l o g ( b ) / l o g ( 2 ) × l o g b ( n )log2(n) ist dasselbe wie daher gibt die 2 nur einen Faktor an, der entfernt werden kann (wie andere Faktoren in big-O.log(b)/log(2)×logb(n)
ctrl-alt-delor

Antworten:


39

Die Landau-Notation bezeichnet asymptotische Funktionsgrenzen . Sehen Sie hier für eine Erklärung der Unterschiede zwischen , und .Ω ΘOΩΘ

Worst-, Best-, Average- oder You-Name-It-Case-Zeit beschreiben unterschiedliche Laufzeitfunktionen: eine für die Sequenz der höchsten Laufzeit von , eine für die der niedrigsten und so weiter.n

An sich haben die beiden nichts miteinander zu tun. Die Definitionen sind unabhängig. Jetzt können wir asymptotische Grenzen für Laufzeitfunktionen formulieren: obere ( ), untere ( ) oder beide ( ). Wir können entweder für den schlechtesten, besten oder jeden anderen Fall tun.Ω ΘOΩΘ

Beispielsweise erhalten wir bei der binären Suche eine Laufzeitasymptotik für den besten Fall von und eine Asymptotik für den schlechtesten Fall von .Θ ( log n )Θ(1)Θ(logn)


Das Wichtigste für mich ist, dass wir mit allen asymptotisch begrenzten Funktionen Worst-, Best-Case-Analysen durchführen können. Für mich zeigt dies die Unabhängigkeit von Big O gegenüber der Worst-Case-Analyse. Vielen Dank!
Patrick

1
@ Patrick Nicht ganz. Zunächst entscheiden Sie, ob Sie Worst-, Average- oder Best-Case analysieren möchten. Dann haben Sie die Kostenfunktion (oder eine so gute Annäherung wie möglich). Erst dann nehmen Sie, wenn überhaupt, Asymptotika.
Raphael

17

Betrachten Sie den folgenden Algorithmus (oder die Prozedur oder den Code oder was auch immer):

Contrive(n)
1. if n = 0 then do something Theta(n^3)
2. else if n is even then
3.    flip a coin
4.    if heads, do something Theta(n)
5.    else if tails, do something Theta(n^2)
6. else if n is odd then
7.    flip a coin
8.    if heads, do something Theta(n^4)
9.    else if tails, do something Theta(n^5)

Was ist das asymptotische Verhalten dieser Funktion?

Im besten Fall (wo ist) ist die Laufzeit Ω ( n ) und O ( n 2 ) , aber nicht Θ von irgendetwas.nΩ(n)O(n2)Θ

Im schlimmsten Fall (wobei ungerade ist) beträgt die Laufzeit Ω ( n 4 ) und O ( n 5 ) , aber nicht Θ von irgendetwas.nΩ(n4)O(n5)Θ

Im Fall beträgt die Laufzeit Θ ( n 3 ) .n=0Θ(n3)

Dies ist ein wenig ein ausgedachtes Beispiel, aber nur, um die Unterschiede zwischen der Grenze und dem Fall klar zu demonstrieren. Sie könnten den Unterschied mit vollständig deterministischen Verfahren sinnvoll werden müssen, wenn die Aktivitäten Sie ausführen , haben keine bekannten Grenzen.Θ


1
nmod4

4

Nicht unbedingt. In diesem Fall, nämlich der binären Suche in einem sortierten Array, können Sie Folgendes feststellen: (a) Die binäre Suche dauert höchstens Schritte; (b) Es gibt Eingaben, die tatsächlich so viele Schritte erzwingen. Wenn also die Laufzeit eines Eingangs im ungünstigsten Fall für die binäre Suche ist, können Sie sagen, dass .T ( n ) T ( n ) = Θ ( log n )[logn+1]T(n)T(n)=Θ(logn)

Andererseits können Sie für andere Algorithmen möglicherweise genau berechnen. In diesem Fall besteht möglicherweise eine Lücke zwischen der Ober- und Untergrenze für die Laufzeit bei einer Worst-Case-Eingabe.T(n)

Für das Durchsuchen eines sortierten Arrays gilt jedoch noch etwas anderes: Jeder Algorithmus zum Durchsuchen eines sortierten Arrays muss überprüfen . Für diese Art von Untergrenze müssen Sie jedoch das Problem selbst analysieren. (Hier ist die Idee: Ein Suchalgorithmus hat zu keinem Zeitpunkt eine Menge von Positionen ausgeschlossen, an denen sich das gesuchte Element befinden kann. Eine sorgfältig ausgearbeitete Eingabe kann dann garantieren, dass ist höchstens um den Faktor reduziert .)S [ n ] | S | 2[logn+1]S[n]|S|2


1

Sie haben recht, viele Leute benutzen schlampig wenn sie benutzen sollten . Zum Beispiel kann ein Algorithmusanalytiker am Ende eine Zeitfunktion und sofort zu dem Schluss kommen, dass , was technisch richtig ist , aber eine schärfere Behauptung wäre . Ich schreibe dieses ahnungslose Verhalten zwei Gründen zu. Erstens sehen viele als populärer und akzeptabler an, möglicherweise aufgrund seiner langen Geschichte. Denken Sie daran, dass es vor mehr als einem Jahrhundert eingeführt wurde, während (und ) erst 1976 (von Donald Knuth) eingeführt wurden. Zweitens könnte es sein, weilOΘT(n)=n2+n+2T(n)=O(n2)T(n)=Θ(n2)OΘΩOist leicht verfügbar auf der Tastatur, während nicht ist!Θ

Aus technischer Sicht ist der Hauptgrund, warum vorsichtige Analysten gegenüber bevorzugen, dass ersteres "größeres Gebiet" abdeckt als letzteres. Wenn wir ein Beispiel für eine binäre Suche nehmen und möchten , müssen wir zwei Aussagen treffen: \ eine für den besten Fall, nämlich , und eine andere für den schlimmsten Fall, nämlich . Mit machen wir nur eine Aussage, nämlich . Mathematisch werden die von abgedeckten Funktionen auch von abgedeckt , wohingegen das Umgekehrte nicht unbedingt zutrifft.OΘΘΘ(1)Θ(logn)OO(logn)ΘO


Willkommen und vielen Dank, dass Sie sich die Zeit genommen haben, eine Antwort zu schreiben! Ich kann jedoch nicht sagen, worum es hier geht. Im ersten Absatz bieten Sie einige Spekulationen an. In der zweiten schlagen Sie einen Standpunkt vor, der selbst "schlampig" ist: Wenn Sie sagen, dass es sich um einen -Durchschnittsfall handelt, wird nichts über den besten Fall gesagt, außer dass er in derselben Klasse liegt. Wenn Sie sagen, dass es sich um einen -Durchschnittsfall handelt, bedeutet dies, dass Sie dieselbe Obergrenze haben! Wenn Sie zusätzliche Informationen zum besten Fall bereitstellen möchten, müssen Sie diese in beiden Fällen explizit angeben. Daher verstehe ich nicht, wie Sie es begründen, O über Θ zu verwenden. O(logn)Θ(logn)
Raphael

@ Raffael Ich verweise Sie auf die Definitionen der beiden Notationen. Beachten Sie außerdem, dass sie zur Klassifizierung der asymptotischen "Wachstumsrate" der Laufzeit verwendet werden und nicht der Laufzeit selbst, wie sie von Ihren verschiedenen Antworten und Kommentaren propagiert wird.
Hamed Nassar
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.