Eimer-Sorte

Eimer-Sorte oder Behälter-Sorte, ist ein Sortieren-Algorithmus, der durch das Verteilen einer Reihe in mehrere Eimer arbeitet. Jeder Eimer wird dann individuell, entweder das Verwenden eines verschiedenen Sortieren-Algorithmus, oder durch die rekursive Verwendung des Eimer-Sortieren-Algorithmus sortiert. Es ist eine Vertriebssorte, und ist ein Vetter der Basis-Sorte in die meisten zu kleinstem Geschmack der positiven Ziffer. Eimer-Sorte ist eine Generalisation der Ablegefach-Sorte. Da Eimer-Sorte nicht eine Vergleich-Sorte ist, der Ω (n loggen n) tiefer gebunden ist unanwendbar. Die rechenbetonten Kompliziertheitsschätzungen schließen die Zahl von Eimern ein.

Eimer-Sorte arbeitet wie folgt:

  1. Stellen Sie eine Reihe am Anfang leerer "Eimer" auf.
  2. Streuung: Sehen Sie die ursprüngliche Reihe durch, jeden Gegenstand in seinem Eimer stellend.
  3. Sorte jeder nichtleere Eimer.
  4. Versammeln Sie sich: Besuchen Sie die Eimer in der Ordnung und stellen Sie alle Elemente zurück in die ursprüngliche Reihe.

Pseudocode

fungieren Sie bucketSort (Reihe, n) ist

Eimer  neue Reihe von n leeren Listen

weil ich = 0 zu (Länge (Reihe)-1) tue

fügen Sie Reihe [ich] in Eimer [msbits ein (Reihe [ich], k)]

weil ich = 0 zu n - 1 tue

nextSort (Eimer [ich])

geben Sie die Verkettung von Eimern [0]..., Eimern [n-1] zurück

Hier ist Reihe die Reihe, die zu sortieren ist, und n ist die Zahl von Eimern, um zu verwenden. Die Funktion msbits (x, k) gibt den k die meisten bedeutenden Bit von x (Fußboden (x/2^ (Größe (x)-k))) zurück; verschiedene Funktionen können verwendet werden, um die Reihe von Elementen in der Reihe zu n Eimern, wie das Übersetzen der Briefe A-Z zu 0-25 oder das Zurückbringen des ersten Charakters (0-255) zu übersetzen, um Schnuren zu sortieren. Die Funktion nextSort ist eine Sortieren-Funktion; mit bucketSort selbst weil erzeugt nextSort einen Verwandten der Basis-Sorte; insbesondere der Fall n = 2 entspricht Schnellsortierung (obwohl potenziell mit schlechten Türangel-Wahlen).

Optimierungen

Eine allgemeine Optimierung soll die Elemente zurück in der ursprünglichen Reihe zuerst stellen, dann Einfügungssorte über die ganze Reihe führen; weil Einfügungssorte-Durchlaufzeit darauf basiert, wie weit jedes Element von seiner Endposition ist, bleibt die Zahl von Vergleichen relativ klein, und die Speicherhierarchie wird durch die Speicherung der Liste aneinander grenzend im Gedächtnis besser ausgenutzt.

Varianten

Allgemeine Eimer-Sorte

Die allgemeinste Variante der Eimer-Sorte funktioniert auf einer Liste von n numerischen Eingängen zwischen der Null, und etwas Maximum schätzen M, und teilt die Wertreihe in n Eimer jede der Größe M/n. Wenn jeder Eimer mit der Einfügungssorte sortiert wird, wie man zeigen kann, läuft die Sorte in der erwarteten geradlinigen Zeit (wo der Durchschnitt alle möglichen Eingänge übernommen wird). Jedoch baut sich die Leistung dieser Sorte mit dem Sammeln ab; wenn viele Werte eng miteinander vorkommen, werden sie den ganzen Herbst in einen einzelnen Eimer und werden langsam sortiert.

ProxmapSort

Ähnlich der allgemeinen Eimer-Sorte, wie beschrieben, oben arbeitet ProxmapSort durch das Teilen einer Reihe von Schlüsseln in die Subreihe über den Gebrauch einer "Karte" Schlüsselfunktion, die eine teilweise Einrichtung auf den Schlüsseln bewahrt; da jeder Schlüssel zu seiner Subreihe hinzugefügt wird, wird Einfügungssorte verwendet, um diese Subreihe sortiert zu halten, auf die komplette Reihe hinauslaufend, die in der sortierten Ordnung ist, wenn ProxmapSort vollendet. ProxmapSort unterscheidet sich von Eimer-Sorten in seinem Gebrauch des Karte-Schlüssels, die Daten ungefähr zu legen, wo es in der sortierten Ordnung gehört, einen "proxmap" — eine Nähe kartografisch darstellend — der Schlüssel erzeugend.

Sorte von Histogram

Eine andere Variante der Eimer-Sorte bekannt als histogram Sorte oder das Zählen der Sorte fügt einen anfänglichen Pass hinzu, der die Zahl der Elemente aufzählt, die in jeden Eimer mit einer Reihe der Zählung fallen wird. Mit dieser Information können die Reihe-Werte in eine Folge von Eimern im Platz durch eine Folge des Austausches eingeordnet werden, keinen Raum oben für die Eimer-Lagerung verlassend.

Die Sorte des Briefträgers

Die Sorte des Briefträgers ist eine Variante der Eimer-Sorte, die eine hierarchische Struktur von Elementen ausnutzt, die normalerweise durch eine Reihe von Attributen beschrieben sind. Das ist der Algorithmus, der durch Brief sortierende Maschinen in Posten verwendet ist: Post wird zuerst zwischen dem Innen- und Außen-sortiert; dann durch den Staat, die Provinz oder das Territorium; dann durch die Bestimmungsort-Post; dann durch Wege, usw. Da Schlüssel gegen einander nicht verglichen werden, ist das Sortieren der Zeit O (cn), wo c von der Größe des Schlüssels und Zahl von Eimern abhängt. Das ist einer Basis-Sorte ähnlich, die "Spitze unten," oder "der grösste Teil der positiven Ziffer zuerst arbeitet."

Schlurfen-Sorte

Die Schlurfen-Sorte ist eine Variante der Eimer-Sorte, die durch das Entfernen des ersten 1/8 der n zu sortierenden Sachen beginnt, sie rekursiv sortiert, und sie in einer Reihe stellt. Das schafft n/8 "Eimer", zu denen die restlichen 7/8 der Sachen verteilt werden. Jeder "Eimer" wird dann sortiert, und die "Eimer" werden in eine sortierte Reihe verkettet. Schlurfen-Sorte wird als ein Schritt in einer J Sorte verwendet.

Vergleich mit anderen Sortieren-Algorithmen

Eimer-Sorte kann als eine Generalisation des Zählens der Sorte gesehen werden; tatsächlich, wenn jeder Eimer Größe 1 dann hat, degeneriert Eimer-Sorte zum Zählen der Sorte. Die variable Eimer-Größe der Eimer-Sorte erlaubt ihm, O (n) Gedächtnis statt O (M) Gedächtnis zu verwenden, wo M die Zahl von verschiedenen Werten ist; im Austausch gibt es auf, den O der Sorte (n + M) Grenzfall-Verhalten aufzuzählen.

Die Eimer-Sorte mit zwei Eimern ist effektiv eine Version der Schnellsortierung, wo der Türangel-Wert immer ausgewählt wird, um der mittlere Wert der Wertreihe zu sein. Während diese Wahl für gleichförmig verteilte Eingänge wirksam ist, machen andere Mittel, die Türangel in der Schnellsortierung wie zufällig ausgewählte Türangeln zu wählen, sie widerstandsfähiger gegen das Sammeln im Eingangsvertrieb.

Der n-way mergesort Algorithmus beginnt auch durch das Verteilen der Liste in N-Sublisten und das Sortieren von jedem; jedoch haben die durch mergesort geschaffenen Sublisten überlappende Wertreihen und können durch die einfache Verkettung als in der Eimer-Sorte so nicht wiederverbunden werden. Statt dessen müssen sie durch einen Verflechtungsalgorithmus durchgeschossen werden. Jedoch wird dieser zusätzliche Aufwand durch die einfachere Streuungsphase und die Fähigkeit ausgeglichen sicherzustellen, dass jede Subliste dieselbe Größe ist, einen guten fristgebundenen Grenzfall zur Verfügung stellend.

Verfeinernde Basis-Sorte kann als ein spezieller Fall der Eimer-Sorte gesehen werden, wo sowohl der Wertbereich als auch die Zahl von Eimern beschränkt werden, eine Macht zwei zu sein. Folglich ist die Größe jedes Eimers auch eine Macht zwei, und das Verfahren kann rekursiv angewandt werden. Diese Annäherung kann die Streuungsphase beschleunigen, da wir nur ein Präfix der Bit-Darstellung jedes Elements untersuchen müssen, um seinen Eimer zu bestimmen.

Links


Kapitän-Wunder (Wunder-Comics) / Sidney Bechet
Impressum & Datenschutz