Sortieren mit einem Durchschnitt von

10

Gibt es einen vergleichsbasierten Sortieralgorithmus, der durchschnittlich lg(n!)+o(n) Vergleiche verwendet?

Das Vorhandensein eines Vergleichsalgorithmus für den schlimmsten Fall lg(n!)+o(n) ist ein offenes Problem, aber der Durchschnittsfall reicht für einen randomisierten Algorithmus mit erwarteten Vergleichen von lg(n!)+o(n) für jede Eingabe aus . Die Bedeutung von lg(n!)+o(n) besteht darin, dass es sich um o(n) Vergleiche vom Optimum handelt, wobei nur ein Durchschnitt von o verschwendet wirdo(1) Vergleiche pro Element.

Da ich bereits einen solchen Algorithmus habe, füge ich ihn als Antwort hinzu (im Q / A-Format ), aber ich begrüße zusätzliche Antworten, einschließlich anderer Algorithmen, ob ein solcher Algorithmus bereits bekannt war, verbessert o(n)und am schlechtesten ist. Fall lg(n!)+o(n) .

Vorherige Arbeit: Die
Zusammenführungssortierung verwendet Vergleiche (auch im schlimmsten Fall). Die Sortierung mit Zusammenführung und Einfügung (auch als Ford-Johnson-Sortierung bekannt) verwendet ebenfalls Vergleiche jedoch mit einer viel kleineren Konstante in . Verbesserte durchschnittliche Komplexität für die vergleichsbasierte Sortierung (von Kazuo Iwama und Junichi Teruyama) - ihr (1,2) Einfügealgorithmus ähnelt einem Teil meiner Antwort unten.lg(n!)+Θ(n)
lg(n!)+Θ(n)Θ(n)

Dmytro Taranovsky
quelle
Diese Frage überschneidet sich mit der optimalen randomisierten Vergleichssortierung , aber angesichts der unterschiedlichen Betonung (spezifisches asymptotisches Verhalten hier - im Vergleich zum allgemeinen Wissensstand, allen Eingabegrößen und Unterschied zum Worst-Case dort) habe ich mich für eine neue Frage entschieden.
Dmytro Taranovsky

Antworten:

4

Update: Ich habe diese Antwort zu einer Papiersortierung mit einem Durchschnitt von Vergleichen erweitertlg(n!)+o(n) .

Ja, ein solcher Algorithmus existiert. Ich werde nur die beweisen , aber unter einer wahrscheinlichen Randomisierungsannahme erhalten wir auch . Ich werde auch einen Versuch für und .lg(n!)+o(n)lg(n!)+O(n1ε)n0.5+o(1)O(n0.5ε)

Wir können davon ausgehen, dass alle Elemente unterschiedlich sind, indem wir sie bei Bedarf mit Anmerkungen versehen. Im Durchschnittsfall werden verschiedene Elemente in zufälliger Reihenfolge verwendet. Wir können die durchschnittliche Anzahl von Vergleichen berechnen, indem wir den Entropieverlust für jeden Vergleich relativ zur Verwendung einer fairen Münze addieren.

Der Ausgangspunkt ist die Einfügesortierung mit einer binären Suche, um zu entscheiden, wo das nächste Element in die sortierte Teilmenge eingefügt werden soll . Wenn , eine Einfügung verwendet höchstens Vergleiche, die (in Bezug auf die Entropie) bis zu einem -Additivfaktor optimal sind (und für die durchschnittliche Fallkomplexität funktioniert auch). Nun, wennist nicht nahe an einer Potenz von 2, das Einfügen eines Elements ist nicht optimal (selbst im Durchschnitt und unabhängig davon, wie wir jede Abfrage ausgleichen), aber wenn wir Vergleiche verschwenden , könnten wir zu einer annähernd gleichmäßigen Verteilung steuern über einen Zeitraum vonS(1ε)2m|S|2m1mO(ε)2m|S|(1+ε)2m|S|Ao(1)AS einer Länge nahe einer Potenz von 2 erhalten wir die gewünschte Optimalität.

Dies erreichen wir, indem wir Elemente in Chargen hinzufügen und manchmal Elemente der Charge effizient miteinander vergleichen, so dass das Intervall von , das einem Element entspricht, quasi zufällig abnimmt (und mit der Wahrscheinlichkeitsverteilung von innerhalb des Intervalls) nahezu gleichmäßig), und wenn die Intervalllänge nahe genug an einer Potenz von 2 liegt, führen Sie die binäre Suche durch, um einzufügen .SAAA

Gemeinsame Konstrukte

Wir behalten eine Teilmenge sortierter Elemente bei und verfolgen für jedes unsortierte Element das minimale Intervall von in dem sich bekanntermaßen befindet. ist die Länge von ; ist durch die Identität der Intervalle.SAIASA|IA|IAIA=IB

Sei : Vergleiche mit und vergleiche dann (in zufälliger Reihenfolge) und mit entsprechenden Elementen von bis ihre Intervalle disjunkt sind (oder die Länge 1 haben). Das Element von wird (auf konsistente Weise) ausgewählt, um die Wahrscheinlichkeiten für den Vergleich so nahe wie möglich an 1/2 zu bringen, vorausgesetzt, dass beim Aufruf von gleichmäßig auf verteilt . Aufgrund der Disjunktheit am Ende die Einheitlichkeitsannahme bei.Compare(A,B)ABABSSCompare(A,B)IAIBCompare

Die folgenden Abschnitte können unabhängig voneinander gelesen werden.

Ein -Algorithmuslg(n!)+o(n)

Gegeben: Eine sortierte Liste und ein Stapel von unsortierten Elementen; ; Die unsortierten Elemente sind relativ zu zufällig .Smmω(1)o(|S|)S

Wiederholen Sie (1) - (3), solange dies möglich ist:
1. Wählen Sie zwei Elemente und aus dem Stapel mit (jede Auswahl funktioniert). 2. Führen Sie . 3. Wennnahe genug an einer Potenz von 2 liegt (Anmerkung 1) aus der Charge entfernen (ohne zu vergessen ); und tut in ähnlicher Weise mit . Schließlich: Fügen Sie alle Elemente in und schließen Sie die Sortierung ab.ABIA=IB
Compare(A,B)
|IA|AIAB
S

Anmerkung 1: Für "nah genug" funktioniert jeder relative -Fehler (als Funktion von ), solange -Elemente in Schritt (4) entfernt werden (möglich durch Anmerkung 2). Unter einer vermuteten Randomisierungsannahme erfasst die Verwendung des relativen Fehlers Elemente und ermöglicht ein durchschnittlicher Vergleichssortieralgorithmus.o(1)mmo(m)cloglogm/logmm(1logΘ(c)m)lg(n!)+O(nloglogn/logn)

Anmerkung 2: Da dieselbe Vergleichsfolge zu demselben Begrenzungsintervall führt, durchlaufen fast alle Elemente die Schritte (1) (sofern sie nicht in Schritt 4 entfernt wurden). Wenn zu Beginn und wir auswählen , vergleichen wir mit dem Element , und jede Anwendung von Schritt (3) auf hat Wahrscheinlichkeit der Reduzierung vonin mal. Nun haben wir für jedes Verhältnis , das keine rationale Potenz von 2 ist, , und so erhalten wir dasΩ(logm)A<BAAS[(11/2)|S|]AO(1)|IA|1/(11/2)a>1ε>0d>0m,nN1ε<amd2n<1+εo(n) gebunden.

Ein wahrscheinlicher -Algorithmuslg(n!)+O(n1ε)

Modulo eine Randomisierungsannahme, können wir Durchschnittsvergleiche wie folgt erzielen .lg(n!)+O(n1ε)

  • Mische die Elemente nach dem Zufallsprinzip und sortiere die erste Hälfte in eine Liste , während die zweite Hälfte als unsortierte Charge beibehalten wird.S

  • Wiederholen, bis der Stapel leer ist:
    Wählen zufällig . Sei . Wenn leer ist, entfernen Sie aus der Charge und fügen Sie es in . Andernfalls:AbatchG={Bbatch:|P(A<B)0.5|<n0.51ε}GAS

    1. Wenn es , so dass mit einer Wahrscheinlichkeit (sagen ≥0.05), machtinnerhalb von relativer Fehler einer Potenz von 2, führe und wenn erfolgreich (dh liegt innerhalb von relativer Fehler einer Potenz von 2) Entfernen Sie aus der Charge und fügen Sie es in .BGΘ(1)Compare(A,B)|IA|nεCompare(A,B)|IA|nεAS
    2. Wenn es kein solches , führen Sie für ein zufälliges .BGCompare(A,B)BG

Wenn unsere Randomisierungsannahme funktioniert (dh die Verteilung der Intervalllängen und -positionen ist zufällig genug), kann ein typisches während eines Großteils des Prozesses effizient mit einer Auswahl von Elementen (mit verglichen werden verschiedene Intervalllängen). Daher können wir normalerweise einen Vergleich für (1) oben wählen, und wenn wir mit dem Vergleichsergebnis Pech haben, erhalten wir immer noch Chancen, wodurch wir (wenn klein genug ist, sagen wir 0,01) eine -Vergleichsalgorithmus. Mit einigen Änderungen und Annäherungen kann die Gesamtberechnung quasilinear durchgeführt werden: Gegeben ein ElementAnΘ(1)nΘ(1)Θ(logn)εlg(n!)+O(n1ε)ABerechnen Sie vielversprechende Intervalllängen und suchen Sie dann s mit der richtigen ungefähren Mittel- und Intervalllänge.B

Es gibt eine Reihe von Möglichkeiten, Vergleiche zu optimieren, aber das Hindernis besteht darin, dass jeder Vergleich möglicherweise Pech hat und wir nur eine begrenzte Anzahl von Vergleichen haben. Wenn nach der Optimierung durchschnittlich 4 Vergleiche durchführt und mit einer Wahrscheinlichkeit von 1/4 "erfolgreich" ist, erhalten wir .Compare(A,B)ε(1ε)/4/log4/320.09

Ein vielleicht viel besserer Ansatz besteht darin, zu warten, bis ein Intervall nahe einer Potenz von 2 liegt, und nicht die einzelnen Intervalllängen, sondern die Längenverteilungen zu steuern.

Ein Versuch eines -Algorithmuslg(n!)+n0.5+o(1)

Angenommen, und wir erhalten einen unsortierten Stapel von Elementen mit den ebenfalls angegebenen Intervallen mittypischerweise und mit gleichmäßig verteilt (bis zu einem zufälligen Fehler und mit ausreichender Genauigkeit halten, auch wenn dies auf bedingt ist ). Dann können wir die Elemente, die durchschnittlich Vergleiche verschwenden, wie folgt sortieren : (*) Fügen Sie alle Elemente in der Reihenfolge ihres ursprünglichen . Auf diese Weise werden alle Elemente eingefügt, wenn ihre Intervalllänge nahe einer Potenz von 2 liegt.|S|=nnIA|IA|n1o(1)|IA|2lg|IA|A<S[i]n0.5+o(1)
|IA|2lg|IA|

Der Sortieralgorithmus wird: In zufälliger Reihenfolge die Liste mischen und sortieren die erste Hälfte . Um die zweite Hälfte einzufügen, machen Sie die Verteilung richtig und machen Sie das (*) oben.S

So erstellen Sie den Verteilung richtig, wir können eine 'zufällige' Verteilung machen und dann den richtigen Bruchteil der Elemente für jede während der Rest zufällig ausgewählt wird (ggf. wiederholen). Dies sollte jedoch korrigieren global wissen wir nicht, ob es lokal mit der erforderlichen Genauigkeit gesteuert werden kann (daher das Wort "Versuch" oben).|IA|2lg|IA||IA|/2lg|IA||IA|2lg|IA|

Um eine 'zufällige' Verteilung zu , können wir mit , außer dass wir bei identischem Anfangs- keine Randomisierung in einer sublogarithmischen Tiefe erwarten (dh mit lange genug). Ich vermute jedoch, dass wir eine Randomisierung in einer sublogarithmischen Tiefe erhalten, indem wir Verallgemeinerungen (wahrscheinlich funktioniert jede vernünftige Wahl) von mit Elementen verwenden: Wenn wir Elemente verschränkt halten (dh verbunden mit Vergleichsergebnissen), sollten wir für jeden Vergleich mit ungefähr pendelfreie Auswahlmöglichkeiten haben . Dies sollteCompare(A,B)P(A<B)0.5IAIAComparek=ω(1)k=ω(1)kSO(logkn+logk)Randomisierungstiefe nach Wunsch (unter der Annahme, dass nicht zu groß ist, da wir die Tiefe benötigen, um die Elemente zu entwirren). Ich gehe davon aus, dass die Berechnung quasilinear erfolgen kann, wenn ein ausreichend kleines .kΘ(logk)k

Da ein Vergleich mit Ja-Wahrscheinlichkeit nur -Entropie verschwendet , sollten die anfängliche Randomisierung und die leichte Ungleichmäßigkeit der Elemente in ihren Begrenzungsintervallen nur benötigen. Entropiemüll. Wenn die Verteilungsformung gut genug erfolgreich ist, stammt der Entropieabfall hauptsächlich aus Intervalllängenfehlanpassungen während (*) (daher ).1/2+n0.5O(1/n)no(1)n0.5+o(1)

Eine mögliche Kombination von :lg(n!)+O(n0.5ε) Wenn die Verteilungsformung gut genug funktioniert und wir die Chargengröße gleich und machen selektiv Elemente in (*) (oben) ablehnen , können wir alle außer diesen Elementen mit Entropieabfall einfügen. wie folgt. Teilen Sie in nahezu gleiche Intervalle auf, und wenn sich während des Einfügens auf ein Intervall , lehnen Sie es ab (dh brechen Sie das Einfügen ab), wenn das Intervall zu lang ist, und verringern Sie so die Variation in den Längen dieser Intervalle|S|+n0.5+εn0.5+εn0.5+εn0.5ε/2+o(1)SnεIAΘ(nε/2)Zeiten, was wiederum die Längenschwankungen der zufälligen Länge Intervalle in Zeiten nach Bedarf reduziert . Jetzt können wir den obigen Algorithmus verwenden, um die verbleibenden Elemente mit Abfall einzufügen, wenn klein ist genug.n1o(1)nε/2o(1)lg(n!)+O(n1ε)O(n0.5ε)ε

Komplexität der Sortierung im ungünstigsten Fall : Höchstwahrscheinlich gibt es einen Sortieralgorithmus mit Vergleichen im ungünstigsten Fall. Um den Median zu finden, gibt es eine lineare Lücke zwischen dem Durchschnittsfall ( Vergleiche) und dem schlechtesten Fall (mindestens Vergleiche). Zum Sortieren gibt es jedoch viel Freiheit, Vergleiche zu arrangieren und neue Sortieralgorithmen zu finden.lg(n!)+o(n)1.5n+o(n)(2+ε)nO(1)

Dmytro Taranovsky
quelle
1
Ich denke, Sie sollten dies als Papier schreiben.
Emil Jeřábek
@ EmilJeřábek Einverstanden. Als Website auf Forschungsebene sind viele Fragen und Antworten hier Mini-Papiere, aber angesichts der Länge und Wichtigkeit hier ist ein formelles Papier wünschenswert. Bitte teilen Sie mir (unter [email protected]) mit, welche Teile im Papier erweitert werden sollen (diese Antwort bleibt als kurze Version erhalten).
Dmytro Taranovsky