Angenommen, wir wollen eine Liste von reellen Zahlen sortieren . Angenommen, wir erhalten eine Blackbox, mit der reelle Zahlen sofort sortiert werden können . Wie viel Vorteil können wir mit dieser Black Box gewinnen?n √
Können wir zum Beispiel die Nummern mit nur Aufrufen an die Blackbox sortieren ? Der beste Algorithmus, den ich gefunden habe, verwendet Aufrufe an die Blackbox. Aber ich habe es nicht weiter verbessern können. Hier ist mein Algorithmus, der ähnlich wie Merge-Sort ist:n
Teilen Sie zuerst die Liste in Listen mit ungefähr Größe auf. Verwenden Sie dann Aufrufe an die Blackbox, um diese Listen zu sortieren. Zum Schluss führen Sie die sortierten Listen mit der Blackbox wie folgt zusammen:√ s1,s2,. . . ,s √ √ √
Fügen Sie die kleinsten Elemente der Listen in eine neue Liste und rufen Sie die Blackbox auf, um sie zu sortieren. Die Zahl in (ersten und kleinstes Element ) wird die kleinste Zahl in seinem . Wir können es an die erste Stelle der Ausgabeliste setzen.
Angenommen, das Element wurde aus , ersetzen wir durch das zweitkleinste Element der Sortierliste und führen erneut die Blackbox darauf aus, um das zweitkleinste Element von zu berechnen .
Wir fahren fort, bis alle Elemente sortiert sind. Die Gesamtzahl der Blackbox-Anrufe für diesen Teil beträgtL [ 1 ] L S s j L [ 1 ] s j S n - √
n. Daher beträgt die Gesamtzahl der Anrufe insgesamt .
Auf der anderen Seite sollten wir in der Lage sein, eine Untergrenze zu erhalten, indem wir die Untergrenze für die für die Sortierung erforderlichen Zahlenvergleiche wie folgt verwenden: Wir können die Blackbox mit implementieren. Vergleiche. Wenn wir das Problem mit Aufrufen an die Blackbox lösen und in linearer Zeit zusammenführen können, können wir reelle Zahlen mit Vergleichen sortieren, was unmöglich ist.o( √no(nlgn)
Ich denke, wir könnten beweisen, dass eine Untergrenze für die Anzahl der Aufrufe der Blackbox ist, da viele Vergleiche, die in der Blackbox verwendet werden, geteilt würden und daher in unserem Argument wiedergegeben werden.
UPDATE: Wie die anderen Posts andeuten, ist auch ein erreichbar.
quelle
Antworten:
Es ist möglich mit O ( √ zu sortierenAnrufe an die Blackbox und keine Vergleiche.O ( n--√Logn )
Betrachten Sie zunächst das folgende Problem der ausgeglichenen Partitionierung: gegebene Elemente A [ 1 .. m ] (wobei √m A [ 1 .. m ] ), unterteilen Sie diese in zwei Gruppen, von denen die kleinste mindestens etwam/4beträgt, so dass alle Elemente in der ersten Gruppe kleiner sind als alle Elemente in der zweiten Gruppe. Dies kann mitO(m/ √ erfolgenn--√≤ m ≤ n m / 4 ruft die Blackbox an. (Das beschreibe ich später.) Dann benutze quicksort mit diesem Partitionierungsalgorithmus:O ( m / n--√)
Angenommen, jeder Partitionsschritt benötigt Aufrufe an die Blackbox, dem obigen Algorithmus, gegebenen EingangA[1 ..n], machenO( √O ( m / n--√) A [ 1 .. n ] ruft die Blackbox auf, weil der Rekursionsbaum die TiefeO(logn) hatund jede Ebene des Baums insgesamtO(n/ √) hatO ( n--√Logn ) O ( logn ) ruft die Blackbox an.O ( n / n--√) = O ( n--√)
Führen Sie den Partitionierungsschritt wie folgt aus:
quelle
Ich denke, Ihre Frage wurde in Beigels und Gills Artikel " Sortieren von n Objekten mit dem K-Sorter " aus dem Jahr 1990 angesprochen, und die Zusammenfassung des Artikels sagt schon alles:
quelle
Es ist möglich , zu sortieren obliviously mit ruft die Blackbox auf, die jeweils auf ein zusammenhängendes Subarray der ursprünglichen Eingabe angewendet wird. Der Algorithmus berührt die Eingabedaten nur durch Blackbox-Aufrufe. Insbesondere ist die gleiche Folge von Black-Box-Aufrufen nur eine Funktion vonn, nicht die tatsächlichen Eingangsdaten (daher "ahnungslos").O ( n--√Logn ) n
Hier ist eine Skizze eines einfacheren Algorithmus, der eine Blackbox verwendet, die Subarrays der Größe anstelle von nur √ sortiertk . Die Gesamtzahl der Anrufe an die Black Box beträgt ungefähr2(n/k)2. Zur Vereinfachung der Darstellung sei angenommen, dasskgerade und2n/keine ungerade ganze Zahl ist.n--√ 2 ( n / k )2 k 2 n / k
Hier ist ein Diagramm des Algorithmus für und k = 4 . Die Daten werden von links nach rechts übertragen. jede box ist ein k- sorter.n = 18 k = 4 k
quelle