Finden Sie die geringste Anzahl von Vergleichen, die zum Sortieren (Sortieren) von fünf Elementen erforderlich sind, und entwickeln Sie einen Algorithmus, der diese Elemente anhand dieser Anzahl von Vergleichen sortiert.
Lösung : Es gibt 5! = 120 mögliche Ergebnisse. Ein Binärbaum für den Sortiervorgang hat daher mindestens 7 Ebenen. Tatsächlich impliziert ≥ 120 h ≥ 7. Aber 7 Vergleiche reichen nicht aus. Die Mindestanzahl von Vergleichen, die zum Sortieren (Sortieren) von fünf Elementen erforderlich sind, beträgt 8.
Hier ist meine eigentliche Frage: Ich habe einen Algorithmus finden , die es in 8 Vergleich tut , aber wie kann ich beweisen , dass es nicht kann in 7 Vergleichen durchgeführt werden?
algorithms
sorting
lower-bounds
PleaseHelp
quelle
quelle
Antworten:
Die Lösung ist falsch. Demuth [1; über 2, sek. 5.3.1] zeigt, dass fünf Werte mit nur sieben Vergleichen sortiert werden können, dh dass in diesem Fall die Untergrenze "informationstheoretisch" eng ist.
Die Antwort ist eine auf zugeschnittene Methode , kein allgemeiner Algorithmus. Es ist auch nicht sehr schön. Dies ist der Umriss:n = 5
Sortieren Sie die ersten beiden Paare.
Bestellen Sie die Paare für das jeweils größere Element.
Nenne das Ergebnis ; wir kennen a < b < d und c < d .[ a , b , c , d, e ] a < b < d c < d
Fügen Sie in [ a , b , d ] ein .e [ a , b , d]
Fügen Sie in das Ergebnis von Schritt 3 ein.c
Der erste Schritt besteht eindeutig aus zwei Vergleichen, der zweite nur aus einem. Die letzten beiden Schritte umfassen jeweils zwei Vergleiche. wir fügen in beiden Fällen in eine Liste mit drei Elementen ein (für Schritt 4 beachten Sie, dass wir aus wissen, dass c kleiner als das letzte Element der Liste ist) und vergleichen zuerst mit dem mittleren Element. Das sind insgesamt sieben Vergleiche.c < d c
Da ich keinen "netten" Pseudocode dafür schreiben kann, finden Sie hier eine getestete (und hoffentlich lesbare) Implementierung.
Ph.D. Diplomarbeit (Stanford University) von HB Demuth (1956)
Siehe auch Elektronische Datensortierung nach HB Demuth (1985)
quelle
Es ist kein hübscher oder kurzer Code, und Sie sollten wahrscheinlich Codegenerierungsmethoden verwenden, um den Entscheidungsbaum zu erstellen und zu tauschen, anstatt ihn manuell zu codieren, aber es funktioniert. und funktioniert nachweislich für jede mögliche Permutation von 5 Elementen, was beweist, dass Sie 5 Elemente in nicht mehr als 7 Vergleichen sortieren können.
quelle
Ich dachte Quicksort. Sie wählen als Drehpunkt das Element aus, das gerade das mittlere Element ist. Vergleichen Sie den Drehpunkt mit den verbleibenden 4 Elementen, um zwei Stapel zu sortieren. Jeder dieser Stapel kann in einem Vergleich sortiert werden. es sei denn, ich habe einen schrecklichen Fehler gemacht, die 5 Elemente wurden in nur 6 Vergleichen vollständig sortiert, und ich denke, das ist die absolut geringste Anzahl von Vergleichen, die für die Arbeit benötigt wird. Die ursprüngliche Frage war, die geringste Anzahl von Vergleichen zu finden, um 5 Elemente zu sortieren.
quelle
Wenn Sie den Algorithmus testen können, testen Sie ihn mit allen Zahlenkombinationen. Wenn Sie viele Zahlen haben, testen Sie viele zufällige Kombinationen. Nicht präzise, aber schneller als alle Kombinationen.
Minimal
a <b <c = 2
a <b <c <d = 3
a <b <c <d <e = 4
Maximal
3 ^ 3
4 ^ 4
5 ^ 5
Insert to middle benutze 3-6 für 4 Zahlen.
Verwenden Sie beim Zusammenführen 4-5 für 4 Zahlen.
Minimale Vergleich von Wiki ist 5 für 4 Zahlen :) Für 5 ist 7. Sie verwenden 8, immer noch so viel.
https://en.wikipedia.org/wiki/Comparison_sort#Number_of_comparisons_required_to_sort_a_list
Wenn Sie alles vor Vergleichen wissen, können Sie Vergleiche durchführen. Mein Durchschnitt für 4 Zahlen ist 3.96 / 1024 alle Kombinationen.
quelle