Warum hat Randomized Quicksort O (n log n) Worst-Case-Laufzeitkosten?


18

Randomized Quick Sort ist eine Erweiterung von Quick Sort, bei der das Pivot-Element zufällig ausgewählt wird. Was kann der schlimmste Fall sein, Zeit Komplexität dieses Algorithmus. Meiner Meinung nach sollte es , da der schlimmste Fall ein zufällig gewählter Drehpunkt in sortierter oder umgekehrter sortierter Reihenfolge ist. In einigen Texten [1] [2] wird die Zeitkomplexität im schlimmsten Fall alsO(n2)O ( n log n )O(nlogn)

Was ist richtig?


3
Sie sollten über diesen "Text" sprechen. Da ist etwas versteckt. Sie werden es finden, wenn Sie diesen "Text" noch einmal lesen
AJed

Hinweis: Link [1] ist nicht mehr verfügbar. Link [2] gibt eindeutig an, dass der Algorithmus randomisiert ist, sodass Sie für jede Eingabe keine "Laufzeit", sondern eine "erwartete Laufzeit" haben. Und die erwartete Laufzeit für die schlechtestmögliche Eingabe ist O (n log n).
gnasher729

Antworten:


18

Beide Quellen beziehen sich auf die "Worst-Case-Expected-Runtime" von Ich vermute, dies bezieht sich auf den erwarteten Zeitaufwand, der sich vom absolut schlechtesten Fall unterscheidet.O(nlogn).

Quicksort hat normalerweise einen absoluten Worst-Case-Zeitbedarf von . Der schlimmste Fall tritt auf, wenn bei jedem Schritt, das Trennverfahren einer aufspaltet n -Länge Array in Arrays der Größe 1 und n - 1 . Diese "unglückliche" Auswahl von Pivot-Elementen erfordert O ( n ) rekursive Aufrufe, was zu einem O ( n 2 ) Worst-Case führt.O(n2)n1n1O(n)O(n2)

Die zufällige Auswahl des Pivots oder das zufällige Mischen des Arrays vor dem Sortieren hat zur Folge, dass der ungünstigste Fall, insbesondere bei großen Arrays, sehr unwahrscheinlich wird. Siehe Wikipedia für einen Beweis, dass der erwartete Zeitbedarf . Laut einer anderen Quelle ist "die Wahrscheinlichkeit, dass Quicksort eine quadratische Anzahl von Vergleichen verwendet, wenn ein großes Array auf Ihrem Computer sortiert wird, viel geringer als die Wahrscheinlichkeit, dass Ihr Computer vom Blitz getroffen wird".O(nlogn)

Bearbeiten:

Gemäß Bangyes Kommentar können Sie die Pivot-Auswahlsequenz für den ungünstigsten Fall eliminieren, indem Sie immer das Medianelement als Pivot auswählen. Da das Finden des Medians Zeit benötigt, ergibt dies Θ ( n log n ) Worst-Case-Performance. Da es jedoch sehr unwahrscheinlich ist, dass eine randomisierte Quicksortierung auf den schlimmsten Fall stößt, wird die deterministische Medianfindungsvariante der Quicksortierung selten verwendet.O(n)Θ(nlogn)


Im Allgemeinen können wir also sagen, dass es sich im schlimmsten Fall quadratisch verhält
Atinesh

@Atinesh Nein, zumindest wenn du damit meinst . Θ
Raphael

Ich denke, es ist richtig zu sagen, dass die schlechteste Leistung von randomisiertem Quicksort O(n2).
James Evans

4
Θ(nlogn)

6

Sie fehlten , dass diese Texte über „schlimmste Fall sprechen erwartete Laufzeit“, nicht „worst case Laufzeit“.

Sie diskutieren eine Quicksort-Implementierung, die ein zufälliges Element enthält. Normalerweise haben Sie einen deterministischen Algorithmus, dh einen Algorithmus, der für eine bestimmte Eingabe immer genau die gleichen Schritte erzeugt. Um die "Worst-Case-Laufzeit" zu bestimmen, untersuchen Sie alle möglichen Eingaben und wählen diejenige aus, die die schlechteste Laufzeit erzeugt.

Aber hier haben wir einen Zufallsfaktor. Bei bestimmten Eingaben führt der Algorithmus nicht immer dieselben Schritte aus, da eine gewisse Zufälligkeit vorliegt. Anstatt eine Laufzeit für jede feste Eingabe zu haben, haben wir eine "erwartete Laufzeit" - wir prüfen jeden möglichen Wert der zufälligen Entscheidungen und ihre Wahrscheinlichkeit, und die "erwartete Laufzeit" ist der gewichtete Durchschnitt der Laufzeit für jede Kombination von zufälligen Entscheidungen , aber immer noch für einen festen Eingang.

Wir berechnen also die "erwartete Laufzeit" für jede mögliche Eingabe, und um die "erwartete Laufzeit im schlechtesten Fall" zu erhalten, finden wir die eine mögliche Eingabe, bei der die erwartete Laufzeit am schlechtesten ist. Und anscheinend haben sie gezeigt, dass der schlechteste Fall für die "erwartete Laufzeit" nur O (n log n) ist. Es würde mich nicht überraschen, wenn das zufällige Auswählen des ersten Pivots die erwartete Laufzeit im schlimmsten Fall auf o (n ^ 2) (kleines o anstelle von großes O) ändern würde, da nur wenige von n Pivots zum schlimmsten Fall führen Verhalten.


2

Beachten Sie, dass es zwei Dinge gibt, die Sie als Erwartung / Durchschnitt ansehen müssen: die Eingabepermutation und die Pivots (eine pro Partitionierung).

nΘ(nlogn)

Θ(nlogn)

Unterm Strich überprüfen Sie Ihre (n) Quelle (n), für welche Implementierung sie verwenden und welche Menge sie als zufällig bzw. zufällig betrachten. in ihrer Analyse behoben.


Betrachten Sie diese Frage postimg.org/image/fiurc4z87 , die ich in der Prüfung gestellt habe. Welche angemessenen und würden Sie vorschlagen, denke ich (c)
Atinesh

1
@Atinesh Ich denke, meine Antwort bietet Ihnen genügend Informationen dazu.
Raphael

-1

O(n2)

Der schlimmste Fall für zufällige Quicksortierung sind dieselben Elemente wie für die Eingabe. Beispiel: 2,2,2,2,2,2

T(n)=T(n1)+nO(n2)


Das ist, wenn Sie eine äußerst blöde Implementierung von Quicksort haben. Jede anständige Implementierung tauscht in der ersten Partition # 1 und # 6, # 2 und # 5, # 3 und # 4 aus und sortiert dann zwei Subarrays der Länge 3.
gnasher729

Ich vermute, Sie haben sowohl <= als auch> = auf den Zeigern, die von LHS und RHS gescannt werden. Deshalb sagst du das auch. '=' ist einem der Zeiger zugeordnet, nicht beiden. In diesem Fall wächst der Rekursionsbaum bis n.
Freitag,

Und das nenne ich eine überaus blöde Implementierung. Jede Implementierung, die eine quadratische Laufzeit für den Fall "Alle Elemente sind gleich" benötigt, ist strafbar dumm. Es gibt tatsächlich Implementierungen, die in diesem Fall eine lineare Zeit benötigen (O (n), nicht O (n log n)).
gnasher729
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.