Ich suche nach einem Algorithmus, um zwei binäre Suchbäume beliebiger Größe und Reichweite zusammenzuführen. Der naheliegende Weg, dies zu implementieren, wäre, ganze Teilbäume zu finden, deren Bereich in einen beliebigen externen Knoten im anderen Baum passen kann. Die Laufzeit im ungünstigsten Fall für diese Art von Algorithmus scheint jedoch in der Größenordnung von O(n+m)
wo n
und m
wie groß jeder Baum ist.
Mir wurde jedoch gesagt, dass dies in erfolgen könnte O(h)
, wo h
die Höhe des Baumes mit der größeren Höhe ist. Und ich bin völlig verfahren, wie das möglich ist. Ich habe versucht, zuerst einen der Bäume zu drehen, aber einen Baum in eine Wirbelsäule zu drehen, ist bereits O (h).
O(log n)
? Wäre es nicht einfach, binäre Bäume mit einer einfachen Funktion zum Verschieben von Knoten zusammenzuführen?n
. Nur vollständige oder vollständige Binärbäume haben einen Höhenlogarithmus zu ihrer Gesamtzahl von Knoten.Antworten:
In ArXiv: 1002.4248 beschreiben John Iacono und Özgür Özkan einen relativ einfachen Algorithmus zum Zusammenführen zweier binärer Suchbäume in -amortisierter Zeit. Die Analyse ist der schwierige Teil. [ Update: Wie Joe in seiner Antwort richtig bemerkt, ist dieser Algorithmus auf Brown und Tarjan zurückzuführen.] Sie beschreiben auch eine kompliziertere Wörterbuchdatenstruktur, die auf verzerrten Überspringlisten basiert und das Zusammenführen in O ( log n ) -amortisierter Zeit unterstützt.O(log2n) O(logn)
Andererseits ist eine Worst-Case-Grenze von unmöglich. Man betrachte zwei binäre Suchbäume mit n Knoten, von denen einer die geraden Ganzzahlen zwischen 2 und 2 n und der andere die ungeraden Ganzzahlen zwischen 1 und 2 n - 1 speichert . Durch das Zusammenführen der beiden Bäume wird ein neuer binärer Suchbaum erstellt, in dem alle Ganzzahlen zwischen 1 und 2 n gespeichert sind . In einem solchen Baum hat ein konstanter Bruchteil der Knoten eine andere Parität als ihre Eltern. (Beweis: Die Eltern eines ungeraden Blattes müssen gerade sein.) Das Zusammenführen der geraden und ungeraden Bäume erfordert daher eine ÄnderungO(logn) n 2 2n 1 2n−1 1 2n Zeiger.Ω(n)
quelle
Diese Referenz könnte hilfreich sein: Brown und Tarjan, ein Algorithmus zum schnellen Zusammenführen , in dem die Autoren zeigen, wie ausgeglichene Binärbäume (AVL) in das optimal ist (z vergleichsbasierte Algorithmen). und sind die Längen der sortierten Listen, die durch die binären Suchbäume dargestellt werden, und es wird angenommen, dass .O(nlogmn) m n m≥n
In Abschnitt 11.5 dieses Dokuments zu Fingersuchbäumen können Sie auch eine Diskussion über verschiedene Techniken zum Zusammenführen geordneter Mengen sehen
quelle
Sie können Bäume in der Worst-Case-Zeit zusammenführen und dabeiO(1) Folgendes unterstützen: Einfügen, Löschen und Suchen in .O(log n)
Brodal, Gerth Stølting, Christos Makris und Kostas Tsichlas. 'Rein funktionaler Worst Case Konstante zeitlich verkettbare sortierte Listen' . In Proceedings of the 14th Conference on Annual European Symposium - Volume 14, 172–183. ESA'06. London, UK, UK: Springer-Verlag, 2006. [ PDF ]
quelle