Erwartete Zeit von Quicksort

Ich lese den Beweis des Theorems:

Der Algorithmus Quicksort sortiert eine Folge von N Elemente hinein Ö ( N Protokoll N ) erwartete Zeit.

Der Beweis ist dieser:

Der Einfachheit halber wird bei der Timing-Analyse davon ausgegangen, dass alle Elemente von S sind verschieden.

Diese Annahme maximiert die Größen von S 1 Und S 3 , und maximieren daher die durchschnittliche Zeit, die in den rekursiven Aufrufen verbracht wird (QUICKSORT( S 1 ), SCHNELLE SORTE( S 3 )).

Lassen T ( N ) sei die erwartete Zeit, die QUICKSORT benötigt, um eine Folge von zu sortieren N Elemente.

Deutlich, T ( 0 ) = T ( 1 ) = B für einige konstant B .

Nehmen Sie dieses Element an A (der Pivot, der zufällig ausgewählt wird) ist das i-te kleinste Element des N Elemente in Sequenzen.

Dann die beiden rekursiven Aufrufe von QUICKSORT (QUICKSORT( S 1 ), SCHNELLE SORTE( S 3 )) haben eine erwartete Zeit von T ( ich 1 ) Und T ( N ich ) , bzw.

Seit ich mit gleicher Wahrscheinlichkeit einen beliebigen Wert dazwischen annimmt 1 Und N , und der Saldo von QUICKSORT( S erfordert eindeutig Zeit C N für einige konstant C , haben wir die Beziehung:

(1) T ( N ) C N + 1 N ich = 1 N [ T ( ich 1 ) + T ( N ich ) ] ,  für  N 2

Algebraische Manipulation von ( 1 ) Erträge

(2) T ( N ) C N + 2 N ich = 0 N 1 T ( ich )

Wir werden das für zeigen N 2 , T ( N ) k N Protokoll e N , Wo k = 2 C + 2 B Und B = T ( 0 ) = T ( 1 ) .

Für die Grundlage N = 2 , T ( 2 ) 2 C + 2 B folgt unmittelbar aus ( 2 ) .

Schreiben Sie für den Induktionsschritt ( 2 ) als

(3) T ( N ) C N + 4 B N + 2 N ich = 2 N 1 k ich Protokoll e ich

Seit ich Protokoll e ich nach oben konkav ist, kann man das leicht zeigen

(4) ich = 2 N 1 ich Protokoll e ich 2 N X Protokoll e X D X N 2 Protokoll e N 2 N 2 4

Ersetzen ( 4 ) In ( 3 ) Erträge

(5) T ( N ) C N + 4 B N + k N Protokoll e N k N 2

Seit N 2 Und k = 2 C + 2 B , es folgt dem C N + 4 B / N k N / 2 .

Daher T ( N ) k N Protokoll e N folgt ( 5 ) .

Wie sind wir auf die Relation gekommen ( 1 ) ?

Vielen Dank im Voraus.

Bearbeiten:

Können Sie mir diesen Satz erklären:

"Diese Annahme wird die Größen von maximieren S 1 Und S 3 , und maximieren daher die durchschnittliche Zeit, die in den rekursiven Aufrufen verbracht wird (QUICKSORT( S 1 ), SCHNELLE SORTE( S 3 )). "

?

Warum maximiert dies die durchschnittliche Zeit, die in den rekursiven Aufrufen verbracht wird?

Antworten (1)

Quicksort läuft auf Folgendes hinaus:

  1. Auswählen eines Drehpunkts

  2. Große Liste in eine "kleiner als Pivot"-Liste aufteilen S 1 und "größer als Pivot"-Liste S 2

  3. Sortieren S 1 Und S 2 separat Anrufergebnis S 1 ' Und S 2 ' .

  4. Kombinieren S 1 ' Und S 2 ' und Pivot in die endgültige, sortierte Liste S ' .

    Die zufällige Auswahl eines Pivots ist eine konstante Zeit. Daraus folgt also

T ( N ) [ Schritt 2 ] + [ Schritt 3 ] + [ Schritt 4 ]

Schritt 2 dauert A N Zeit für eine Konstante A . Sie machen einfach einen Durchgang durch die Liste, vergleichen sie mit dem Pivot und werfen sie in einen von beiden S 1 oder S 2 . Schritt 4 dauert höchstens B N Zeit, aus weniger offensichtlichen Gründen. Daher nehmen die Schritte 2 und 4 höchstens in Anspruch C N Zeit für eine Konstante C .

Stufe 3 bleibt. Der Ausdruck

1 N ich = 1 N [ T ( ich 1 ) + T ( N ich ) ]

ist der Durchschnitt des Wertes T ( ich 1 ) + T ( N ich ) gesamt ich , und das ist der rekursive Schritt, bei dem zwei strikt kleinere Listen sortiert werden. Daher ist die obige Summe die durchschnittliche Zeit, die für Schritt 3 benötigt wird.

Zusammenfassend dauert der gesamte Prozess weniger als C N + 1 N ich = 1 N [ T ( ich 1 ) + T ( N ich ) ] Zeit.

OK. Und warum ist T ( N ) kleiner oder gleich der Summe dieser beiden Werte?
Zur Klarstellung bearbeitet. Lassen Sie mich wissen, wenn Sie weitere Fragen haben.
Verwenden wir den Durchschnitt des Wertes T ( ich 1 ) + T ( N ich ) weil wir die erwartete Zeit von Quicksort finden wollen?
Auch wenn wir den Drehpunkt zufällig auswählen, ist es dann auch eine konstante Zeit?
Ja. Tatsächlich ist der schlimmste Fall für Quicksort Ö ( N 2 ) , wenn Sie eine umgekehrt sortierte Liste haben, weil Sie auswählen müssen N schwenkt und jeden inneren Schritt nehmen wird Ö ( N ) auch Zeit.
Haha das ist eine gute Frage. Theoretisch ist das Erhalten einer Zufallszahl eine konstante Zeit. Auch Pseudozufallszahlen sind schnell berechnet. In der Praxis kann ein Computer einige seltsame Berechnungen durchführen, und es kann dauern, etwas "wirklich" Zufälliges mit einem Zufallszahlengenerator zu erhalten Ö ( N ) oder Ö ( N 2 ) Zeit, wo N ist der gewünschte Maximalwert.
Ich verstehe! Danke für die Erklärung! Ich habe noch eine andere Frage... An der Stelle "das zeigen wir mal N 2 , T ( N ) k N Protokoll e N , Wo k = 2 C + 2 B Und B = T ( 0 ) = T ( 1 ) ", warum nehmen wir das k ? Und warum nehmen wir die Basis e für Protokoll ?
Das hat er gewählt k einfach durch Rückwärtsarbeiten; er weiß es k darf höchstens eine Konstante sein, die auf der Art der Frage basiert.
Ein Ergebnis der Algorithmentheorie ist, dass die Basis des Protokolls bei der Betrachtung der Zeitkomplexität irrelevant ist. Wenn etwas O(log_2(n)) ist, dann ist es auch O(log_e(n)) und O(log_100(n)) usw. Er verwendet also log_e (das dasselbe wie ln ist), sodass das Integral vereinfacht wird .
Können Sie mir auch diesen Satz erklären: „Diese Annahme maximiert die Größen von S 1 Und S 3 , und maximieren daher die durchschnittliche Zeit, die in den rekursiven Aufrufen verbracht wird (QUICKSORT( S 1 ), SCHNELLE SORTE( S 3 )). " ? Warum maximiert dies die durchschnittliche Zeit, die in den rekursiven Aufrufen verbracht wird?
Hallo! Was ist mit der erwarteten Tiefe? Warum es ist Ö ( Protokoll N )