Können wir tun, Quick-sort mit n logn worst-case Komplexität?
Ich Frage mich, ob wir das irgendwie ändern der Quick-sort-Algorithmus zu erzeugen, die worst-case Zeitkomplexität von O(n logn). Obwohl diese kann getan werden, indem permuting Daten und dann unter der Annahme, dass wir den durchschnittlichen Fall Komplexität eher als worst case. Aber dies ist nicht ein full-proof-Lösung wie können wir wieder land in schlimmsten Fall nach permuting. Gibt es eine andere Möglichkeit um, die Sie vorschlagen können.
- Eine triviale Möglichkeit ist das hinzufügen von zwei Zeilen an den Anfang der Funktion: eine, die nicht ein Haufen oder merge-sort, und das zweite gibt. Ich verstehe, dass dies wahrscheinlich nicht das, was Sie im Sinn hatte, aber ich hoffe, dass dies verdeutlicht, dass Sie gehen zu müssen, zu sein mehr spezifisch über welche Art von "Umbauten" sind erlaubt, um die standard-quicksort Algorithmus... Sie gehen zu werden ziemlich präzise in Ihre Grenzen, etwas zu machen, wie ich vorgeschlagen haben, off-limits.
- Ich dachte, wenn wir irgendwie können zwicken die schnelle Art selbst. Wie setzen einige Einschränkungen auf pivot. Kann ich einfach merge-sort statt der schnellen Sorte, anstatt mehrere Arten. Ich bin auf der Suche nach etwas zwicken in der Schnellen Sorte nur.
- Siehe: stackoverflow.com/a/70631/44522
- Richtig, aber das hinzufügen einiger code - oder den Ersatz der Quicksort-code mit Mergesort-code - ist ein "zwicken", wenn auch eine ziemlich wichtige. Sie erwähnen "setzen einige Beschränkungen für pivot"; das ist ein gutes Beispiel für eine Einschränkung, mit dem wir arbeiten können. Ich schlage vor, entweder den Umfang Ihrer Frage zu dieser bestimmten Richtung oder die Bereitstellung einer Liste aller solcher Richtungen, die fair-Spiel. Wenn ein Teil des Problems ist, dass Sie nicht verstehen, Quicksort gut genug, um zu fühlen, zuversichtlich Sie aufgeführt habe, alle potenziell gültige Wege, so zu sagen, und bitten für andere ähnliche Vorschläge. Nur Ideen...
- Schauen Sie sich den link in MicSim Kommentar. Es scheint, wie diese Frage hat bereits ziemlich gute Aufmerksamkeit.
- Ich war mir nicht bewusst die option zum Zusammenführen mehrerer algorithmen zur Sortierung. Du hast Recht, sollte explizit beschränkt sich der Umfang während der Frage Frage, aber es hat nicht durch meinen Kopf, dann. Ich mag deine Antwort und ich würde auf jeden Fall verwenden Sie für meine zukünftige Implementierungen.
- Danke!!! konnte nicht finden, dass es vor der Veröffentlichung der Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, ja, bringen wir es auf O(nlogn). Alle algorithmen, die ich gesehen habe, die versuchen, bringen Sie dieses nach unten basieren auf der Auswahl in pivot-Punkt. Wenn Sie "intelligent" wählen Sie Ihre pivot-Punkt kann nach unten gebracht werden.
Optionen
1. Intro Sortieren . Es ist nicht mehr eine "Reine" schnellen Sorte jetzt. Es nutzt merge-sort später auf.
2. Die Wahl des median als pivot. Jetzt suchen die Mediane könnte eine riesige Menge an Zeit, wenn man es in der üblichen Weise, ABER es ist eine Erwähnung in der Einführung in Algorithmen.
Hier ist etwas, das gerade aus dem Maul des Pferdes Einführung in Algorithmen
Gibt es einige komplexere Sachen in dieses Algorithmus ist, dass ich versteckt. Sie können durch Sie gehen in das gleiche Buch, wenn Sie wollen. In der Regel, ich versuche nicht zu verwenden diesen Algorithmus. Ich benutze eine randomisierte Auswahl den Betrieb zu finden, der Dreh und die Arbeit an mit diesem.
Gut "ändern" ist eine ziemlich subjektive Wort. Es gibt eine Reihe von Möglichkeiten, wie Sie erweitern kann quicksort zu machen, führen Sie in
O(n log n)
. Ob oder nicht Sie könnte immer noch nennen es eine schnelle Art ist zu bestimmen.Einer von denen ist introsort. Introsort beginnt mit quicksort aber wechselt dann zu merge-sort die worst-case-Komplexität
O(n log n)
. Einer der Zwecke von introsort ist die Bekämpfung von median-of-3-killer-Listen.