Die geringste Anzahl von Vergleichen ist erforderlich, um 5 Elemente zu sortieren (sortieren)


22

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.2hh

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?


Antworten:


27

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

  1. Sortieren Sie die ersten beiden Paare.

  2. 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<dc<d

  3. Fügen Sie in [ a , b , d ] ein .e[a,b,d]

  4. 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<dc

Da ich keinen "netten" Pseudocode dafür schreiben kann, finden Sie hier eine getestete (und hoffentlich lesbare) Implementierung.


  1. Ph.D. Diplomarbeit (Stanford University) von HB Demuth (1956)

    Siehe auch Elektronische Datensortierung nach HB Demuth (1985)

  2. Sortieren und Suchen nach Donald E. Knuth; The Art of Computer Programming Vol. 3 (2. Ausgabe, 1998)

5
Der Test gibt fünf Punkte, um zu zeigen, dass es unmöglich ist. Ich frage mich, wie viele Punkte Sie für Ihre Antwort bekommen würden :-) (Wahrscheinlich null, da der Test nicht falsch sein kann).
gnasher729

0

log(n!)n<>n!log(5!)6.91

5!=12027=128

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.


Ω(nlogn)

Die theoretische Untergrenze für den ungünstigsten Fall ist ceil (log2 (n!)), Weil es genau n gibt! Permutationen, und wenn es k Vergleiche gibt, brauchen Sie 2 ^ k ≥ n !. Es ist nicht nur ein konstanter Faktor 1, es ist genau.
gnasher729

-1

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.


1
Wie kann ein Stapel von 3 Elementen in einem Vergleich sortiert werden?
Xskxzr

Von welchem ​​3-Element-Haufen redest du? Was ich oben beschrieben habe, erzeugt 2 Stapel von 2 Elementen nach dem ersten Durchgang.
Scottyc

Ich dachte, dass Sie ein zufälliges Element als Drehpunkt verwenden. Wie kann man in 4 Vergleichen das mittlere Element als Drehpunkt auswählen?
xskxzr

das sage ich nicht. von oben "Da 5! = 120 ... können Sie mit einem binären Entscheidungsbaum 5 Elemente in 7 Vergleichen sortieren." Die Anzahl der Permutationen der Elemente beträgt 120, es muss jedoch einen Zweig geben, der nur 6 Vergleiche enthält, da für die Ausführung einer zufälligen Stichprobe von Quicksort nur 6 erforderlich waren. Eine der 120 Permutationen ist für die sortierte Liste. Dieser Zweig könnte nur 4 Vergleiche enthalten.
Scottyc

-2

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.


2
Dies beantwortet die Frage nicht. Die Frage lautet, wie man beweisen kann, dass es keine Möglichkeit gibt, mit nur 7 Vergleichen zu sortieren. Um Ihren Ansatz zu verwenden, müssten wir alle Algorithmen auflisten, die höchstens 7 Vergleiche verwenden. Ich denke, es gibt zu viele solcher Algorithmen, um sie in angemessener Zeit aufzuzählen. Auf jeden Fall sehe ich nicht, was dies über die vorhandene Antwort, die bereits eine vollständige Antwort auf die Frage gab, hinzufügt. Wir möchten, dass Sie sich auf die Beantwortung von Fragen konzentrieren, bei denen Sie etwas Neues hinzufügen können.
DW

Hinzufügen ist Grafik und Tipp für alg. zur Vorhersage des cmp-Werts von vor cmp. Und seine min ist 7, andere Quellen 8, wahre min. ist 4 !!! 4 ist Arbeit nur für aufsteigende / absteigende Reihenfolge. Beispiel 1: 00000 01234 43210 10000 ... Beispiel 2: In die Mitte einfügen: 43210, Start 4, Erhalte 3, Punkt 4> 3, Erhalte 2, Punkt 4> 2, Punkt 3> 3, Erhalte 1, Punkt (Mitte) 3> 1, cp 2> 1, erhalten 0, cp (Mitte) 3> 0, cp 2> 0, cp 1> 0 ... 8 cmp. 7 kann für Konkrete Reihenfolge oder Alge möglich sein. Sie können auf meiner Seite nach 4 Zahlen suchen . Mlich.zam.slu.cz/js-sort/x-sort-x2.htm , Mittelwert 3,96. min-max 3-6. Kann für 5 wechseln und seine Alge testen.
Peter Mlich
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.