Verflechtungsalgorithmus

Verflechtungsalgorithmen sind eine Familie von Algorithmen, die folgend vielfache sortierte Listen durchgehen, normalerweise mehr sortierte Listen als Produktion erzeugend. Das ist für Maschinen mit Band-Laufwerken gut passend. Gebrauch hat sich wegen großer zufälliger Zugriffserinnerungen geneigt, und viele Anwendungen von Verflechtungsalgorithmen haben schnellere Alternativen, wenn ein Gedächtnis des zufälligen Zugangs verfügbar ist.

Der allgemeine Verflechtungsalgorithmus hat eine Reihe von Zeigestöcken p dass Punkt zu Positionen in einer Reihe von Listen L. Am Anfang weisen sie zum ersten Artikel in jeder Liste hin. Der Algorithmus ist wie folgt:

Während einige von p noch auf Daten innerhalb von L statt der Vergangenheit das Ende anspitzt:

  1. tun Sie etwas mit den Datensachen p weist zu in ihren jeweiligen Listen hin
  2. finden Sie heraus, welcher von jenen Zeigestöcken zum Artikel mit dem niedrigsten Schlüssel hinweist; bringen Sie einen jener Zeigestöcke zum folgenden Artikel in seiner Liste vor

Analyse

Verflechtungsalgorithmen laufen allgemein rechtzeitig proportional zur Summe der Längen der Listen; Verflechtungsalgorithmen, die auf der großen Anzahl von Listen sofort funktionieren, werden die Summe der Längen der Listen zu dieser Zeit multiplizieren, um sich zu belaufen, welcher von den Zeigestöcken zum niedrigsten Artikel hinweist, der mit einer Haufen-basierten Vorzugswarteschlange in O vollbracht werden kann (loggen Sie n) Zeit, für O (M Klotz n) Zeit, wo n die Zahl von Listen ist, die verschmelzen werden, und M ist die Summe der Längen der Listen. Wenn es zwei Listen der Länge M verschmilzt, gibt es einen niedrigeren, der 2 M &minus gebunden ist; 1 Vergleiche im Grenzfall erforderlich.

Die klassische Verflechtung (diejenige, die in der Verflechtungssorte verwendet ist) Produktionen der Datenartikel mit dem niedrigsten Schlüssel an jedem Schritt; in Anbetracht einiger sortierter Listen erzeugt es eine sortierte Liste, die alle Elemente in einigen der Eingangslisten enthält, und es tut also rechtzeitig proportional zur Summe der Längen der Eingangslisten.

Sprachunterstützung

Der C ++ 's Standardschablone-Bibliothek hat die Funktion, die zwei sortierte Reihen von iterators verschmilzt, und, der zwei sortierte Konsekutivreihen im Platz verschmilzt. Außerdem, (verbundene Liste) Klasse hat seine eigene Methode, die eine andere Liste in sich verschmilzt. Der Typ der verschmolzenen Elemente muss weniger unterstützen - als (Funktion im Modul, das vielfach nimmt, hat iterables sortiert, und verschmilzt sie in einen einzelnen iterator.

Parallele Verflechtung

In der parallelen Computerwissenschaft kann die Reihe von sortierten Werten effizient mit der ganzen nächsten kleineren Wertberechnung verschmolzen werden.

Parallele Verflechtung kann auch mit einem teilen-und-überwinden Algorithmus durchgeführt werden, der entwickelt und im Pseudocode darin gezeigt ist. Dieser Algorithmus, bringt wenn verbunden, mit einer schnellen folgenden Verflechtung als ein Grundfall eine gute Leistung, um sich der kleinen Reihe zu verschmelzen. Wie man zeigt, bringt Durchführungsverwenden-Intel Threading Building Blocks (TBB) und Parallel Pattern Library (PPL) des Microsofts, um auf Mehrkernverarbeitern zu laufen, in der Praxis eine gute Leistung.

Referenzen

  • Donald Knuth. Die Kunst der Computerprogrammierung, Bands 3: Sortierend und Suche, die Dritte Ausgabe. Addison-Wesley, 1997. Internationale Standardbuchnummer 0-201-89685-0. Seiten 158-160 des Abschnitts 5.2.4: Das Sortieren durch das Mischen. Abschnitt 5.3.2: Das Mischen des Minimalen Vergleichs, Seiten 197-207.

Moonfleet / ML
Impressum & Datenschutz