Szukam algorytmu do połączenia dwóch drzew wyszukiwania binarnego o dowolnej wielkości i zakresie. Oczywisty sposób byłoby przejść o wdrażaniu tego byłoby znaleźć całe poddrzewa, których zakres można dopasować do dowolnego węzła zewnętrznego w drugim drzewie. Jednak najgorszy czas działania tego typu algorytmu wydaje się być w kolejności, O(n+m)
gdzie n
i m
są wielkości odpowiednio każdego drzewa.
Powiedziano mi jednak, że można to zrobić w miejscu O(h)
, gdzie h
jest wysokość drzewa o większej wysokości. I jestem całkowicie zagubiony, jak to jest możliwe. Próbowałem najpierw eksperymentować z obracaniem jednego drzewa, ale obrócenie drzewa do kręgosłupa to już O (h).
O(log n)
dzięki prostej funkcji przenoszenia węzła?n
. Tylko pełne lub pełne drzewa binarne mają logarytmiczną wysokość w stosunku do całkowitej liczby węzłów.Odpowiedzi:
W ArXiv: 1002.4248 John Iacono i Özgür Özkan opisują stosunkowo prosty algorytm scalania dwóch drzew wyszukiwania binarnego w czasie zamortyzowanym ; analiza jest najtrudniejsza. [ Aktualizacja: Jak Joe słusznie zauważa w swojej odpowiedzi, algorytm ten jest spowodowany przez Browna i Tarjana.] Opisują również bardziej skomplikowaną strukturę danych słownika, opartą na stronniczych listach pominięć, która obsługuje scalanie w czasie zamortyzowanym O ( log n ) .O(log2n) O(logn)
Z drugiej strony, ograniczenie w najgorszym przypadku jest niemożliwe. Rozważmy dwa drzewa wyszukiwania binarnego z n węzłami, jedno przechowujące parzyste liczby całkowite między 2 a 2 n , drugie przechowujące nieparzyste liczby całkowite między 1 a 2 n - 1 . Scalenie dwóch drzew tworzy nowe drzewo wyszukiwania binarnego, przechowujące wszystkie liczby całkowite od 1 do 2 n . W każdym takim drzewie stały ułamek węzłów ma inną parzystość niż ich rodzice. (Dowód: rodzic nieparzystego liścia musi być parzysty.) Zatem połączenie drzew parzystych i nieparzystych wymaga zmianyO(logn) n 2 2n 1 2n−1 1 2n .Ω(n)
źródło
Pomocne może okazać się to odniesienie: Brown and Tarjan, A Fast Merging Algorytm , w którym autorzy pokazują, jak scalać zrównoważone drzewa binarne (AVL) w który jest optymalny (dla algorytmów porównawczych). minsą długościami posortowanych list reprezentowanych przez przeszukiwanie binarne drzew, i zakłada się, żem≥n.O(nlogmn) m n m≥n
Dyskusję na temat różnych technik łączenia uporządkowanych zestawów można również znaleźć w sekcji 11.5 tego artykułu na drzewach wyszukiwania palcami
źródło
Brodal, Gerth Stølting, Christos Makris i Kostas Tsichlas. „Czysto funkcjonalne najgorsze przypadki w stałych sortowanych listach w ustalonym czasie” . W materiałach z 14. konferencji dotyczącej dorocznego europejskiego sympozjum - Tom 14, 172–183. ESA'06. Londyn, Wielka Brytania, Wielka Brytania: Springer-Verlag, 2006. [ PDF ]
źródło