Die Komplexität der Zeit ist eine Möglichkeit, zusammenzufassen, wie die Anzahl der Operationen oder die Laufzeit eines Algorithmus mit zunehmender Eingabegröße zunimmt.
Wie die meisten Dinge im Leben kann uns eine Cocktailparty helfen, das zu verstehen.
AUF)
Wenn Sie auf der Party ankommen, müssen Sie jedem die Hand schütteln (führen Sie eine Operation an jedem Gegenstand durch). Wenn die Anzahl der Teilnehmer N
zunimmt, steigt die Zeit / Arbeit, die Sie benötigen, um allen die Hand zu schütteln O(N)
.
Warum O(N)
und nicht cN
?
Es gibt Unterschiede in der Zeit, die benötigt wird, um Menschen die Hand zu geben. Sie können dies mitteln und in einer Konstanten erfassen c
. Aber die grundlegende Operation hier - Händeschütteln mit allen - wäre immer proportional zu O(N)
, egal was c
war. Wenn wir darüber diskutieren, ob wir zu einer Cocktailparty gehen sollen, sind wir oft mehr daran interessiert, dass wir alle treffen müssen, als an den winzigen Details, wie diese Treffen aussehen.
O (N ^ 2)
Der Gastgeber der Cocktailparty möchte, dass Sie ein albernes Spiel spielen, bei dem jeder auf alle anderen trifft. Deshalb müssen Sie N-1
andere Leute treffen , und weil die nächste Person Sie bereits getroffen hat, müssen sie N-2
Leute treffen und so weiter. Die Summe dieser Serie ist x^2/2+x/2
. Wenn die Anzahl der Teilnehmer wächst, wird der x^2
Begriff schnell groß , sodass wir einfach alles andere fallen lassen.
O (N ^ 3)
Sie müssen alle anderen treffen und während jeder Besprechung über alle anderen im Raum sprechen.
O (1)
Der Gastgeber möchte etwas ankündigen. Sie trinken ein Weinglas und sprechen laut. Jeder hört sie. Es stellt sich heraus, dass es keine Rolle spielt, wie viele Teilnehmer es gibt. Dieser Vorgang dauert immer genauso lange.
O (log N)
Der Gastgeber hat alle am Tisch in alphabetischer Reihenfolge angeordnet. Wo ist Dan? Sie argumentieren, dass er irgendwo zwischen Adam und Mandy sein muss (schon gar nicht zwischen Mandy und Zach!). Ist er angesichts dessen zwischen George und Mandy? Nein, er muss zwischen Adam und Fred und zwischen Cindy und Fred sein. Und so weiter ... wir können Dan effizient lokalisieren, indem wir die Hälfte des Sets und dann die Hälfte dieses Sets betrachten. Letztendlich betrachten wir O (log_2 N) Individuen.
O (N log N)
Mit dem obigen Algorithmus können Sie herausfinden, wo Sie sich an den Tisch setzen können. Wenn eine große Anzahl von Personen nacheinander an den Tisch kam und alle dies taten, würde dies O (N log N) Zeit in Anspruch nehmen . Es stellt sich heraus, wie lange es dauert, eine Sammlung von Elementen zu sortieren, wenn sie verglichen werden müssen.
Bester / schlechtester Fall
Sie kommen auf der Party an und müssen Inigo finden - wie lange wird es dauern? Es hängt davon ab, wann Sie ankommen. Wenn alle herumlaufen, haben Sie den schlimmsten Fall getroffen: Es wird einige O(N)
Zeit dauern . Wenn sich jedoch alle an den Tisch setzen, dauert es nur eine O(log N)
Weile. Oder vielleicht können Sie die Weinglas-Schreikraft des Gastgebers nutzen und es wird nur einige O(1)
Zeit dauern .
Angenommen, der Host ist nicht verfügbar, können wir sagen, dass der Inigo-Finding-Algorithmus eine Untergrenze von O(log N)
und eine Obergrenze von hat O(N)
, abhängig vom Status der Partei, wenn Sie ankommen.
Raum & Kommunikation
Dieselben Ideen können angewendet werden, um zu verstehen, wie Algorithmen Raum oder Kommunikation nutzen.
Knuth hat ein schönes Papier über das erstere mit dem Titel "The Complexity of Songs" geschrieben .
Satz 2: Es gibt beliebig lange Lieder der Komplexität O (1).
Beweis: (wegen Casey und der Sunshine Band). Betrachten Sie die durch (15) definierten Songs Sk, aber mit
V_k = 'That's the way,' U 'I like it, ' U
U = 'uh huh,' 'uh huh'
für alle k.