Insertion Sort mit binärer Suche
Bei der Implementierung von Insertion Sort mit binärer Suche verwendet werden könnte, um suchen Sie die position innerhalb der ersten i - 1 Elemente in das array, in das element eingefügt werden soll.
Wie würde sich das auf die Anzahl der Vergleiche erforderlich? Wie würde solch eine binäre Suche beeinflussen die asymptotische Laufzeit Insertion Sort?
Ich bin mir ziemlich sicher, dies würde eine Verringerung der Anzahl der Vergleiche, aber ich bin mir nicht ganz sicher, warum.
Binäre Suche die position O(log N) vergleicht. Das macht O(N. log(N)) Vergleiche für das Loch Sortieren. [Wir können vernachlässigen, dass N wächst von 1 bis zu der letzten N während wir einfügen]
Der Algorithmus ist immer noch O(n^2), weil der Insertionen. So, binäre suchen kann, reduzieren Sie die Zeit (weil es weniger Vergleiche), es verringert nicht die asymptotische Laufzeit.
Whistle : Antwort aktualisiert
Wieder geöffnet, da die "doppelte" scheint nicht zu schweigen von der Anzahl der Vergleiche oder laufen.
Der Algorithmus ist immer noch O(n^2), weil der Insertionen. So, binäre suchen kann, reduzieren Sie die Zeit (weil es weniger Vergleiche), es verringert nicht die asymptotische Laufzeit.
Whistle : Antwort aktualisiert
Wieder geöffnet, da die "doppelte" scheint nicht zu schweigen von der Anzahl der Vergleiche oder laufen.
InformationsquelleAutor Derrek Whistle | 2013-08-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Direkt aus Wikipedia:
Quelle:
http://en.wikipedia.org/wiki/Insertion_sort#Variants
Hier ist ein Beispiel:
http://jeffreystedfast.blogspot.com/2007/02/binary-insertion-sort.html
Gut, wenn Sie wissen, insertion-sort und binäres suchen schon, dann ziemlich gerade nach vorn. Wenn Sie fügen Sie ein Stück in insertion sort, müssen Sie zu vergleichen, um alle vorherigen Stücke. Sagen Sie, dass Sie verschieben möchten diese [2] an der richtigen Stelle, würden Sie haben, um vergleichen zu 7 Stück, bevor Sie den richtigen Ort finden.
[1][3][3][3][4][4][5] ->[2]<- [11][0][50][47]
Jedoch, wenn Sie starten Sie den Vergleich auf dem halben Weg Punkt (wie eine binäre Suche), dann wirst du nur vergleichen, bis 4 Stück! Sie können dies tun, weil Sie wissen, die linken Teile sind schon in Bestellung (Sie können nur binäre Suche, wenn Stücke werden in der Reihenfolge!).
Nun stellen Sie sich vor, wenn Sie Tausende von Stücken (oder sogar Millionen), dies würde sparen Sie eine Menge Zeit. Ich hoffe, das hilft. |=^)
Insertion-Sort ist ein stark Studie-Algorithmus und hat einen bekannten Worst-case von O(n^2). Unter Verwendung der Binären Suche zu unterstützen Insertion Sort verbessert es die Uhr mal, aber es dauert noch gleiche Anzahl Vergleiche/swaps im schlechteren Fall. Intuitiv, denke der unter Verwendung der Binären Suche wie eine Mikro-Optimierung mit Insertion Sort.
Richtig, ich wusste nicht, dass Sie wirklich brauchen, eine Menge von swaps, um das element verschieben. Also die Sätze schien vage. Sorry für die Grobheit.
Was ist, wenn insertion-sort angewendet wird, die auf verlinkten Listen, die dann im schlimmsten Fall mit der Zeit Komplexität wäre (nlogn) O(n) bester Fall wäre, wäre dies relativ effizient.
aber, wie wiki gesagt, dass wir nicht zufällig Zugriff auf eine binäre Suche auf der verlinkten Liste
InformationsquelleAutor But I'm Not A Wrapper Class
Wenn Sie eine gute Datenstruktur für eine effiziente binäre Suche, es ist unwahrscheinlich, dass O(log n) einfügen Zeit. Umgekehrt, eine gute Datenstruktur zum schnellen einfügen an einer beliebigen position ist unwahrscheinlich, zu unterstützen binäre Suche.
Erreichen O(n log n) - Leistung der beste Vergleich sucht mit insertion sort würde erfordern, beide O(log n) binäre Suche O(log n) beliebig einfügen.
Wahr.
Aber dann, Sie haben gerade realisiert-heap-Sortieren.
aber die Haufen nicht O(log n) binäre Suche. Zumindest weder Binär noch Binomial-Heaps tun. Die Halden fassen Sie nur die invariante, dass das übergeordnete größer ist als die Kinder, aber Sie wissen nicht, zu welchem Teilbaum zu gehen, um zu finden, die das element
X
im heap, wenn es kleiner ist, dass die Eltern/root. Ich würde sagen, dass HeapSort Verbesserung von SelectionSort, anstatt den InsertionSort, da in der Auswahl Sortieren wir suchen für die nächste größte/kleinste Zahl in dem subarray von [i:n-1], aber heaps erlauben uns finden Sie den nächsten max/min und entfernen in O(log n) ZeitInformationsquelleAutor Patricia Shanahan
Vorausgesetzt das array sortiert ist (für binäre Suche durchführen), es wird nicht zu reduzieren, keine Vergleiche, da innere Schleife endet sofort, wenn 1 vergleichen (die als Vorherige element kleiner ist). Im Allgemeinen ist die Anzahl der vergleicht in der insertion sort ist bei max die Anzahl der Inversionen plus die array-Größe - 1.
Da die Anzahl der Inversionen in sortierten Arrays ist 0, die maximale Anzahl der vergleicht in der bereits sortierten array von N - 1.
Das ist eine lustige Antwort, sort sortiert ein array.
InformationsquelleAutor WastedPandoo