Załóżmy następującą definicję drzewa czerwono-czarnego:
- Jest to drzewo wyszukiwania binarnego.
- Każdy węzeł ma kolor czerwony lub czarny. Korzeń jest czarny.
- Dwa węzły połączone krawędzią nie mogą być jednocześnie czerwone.
- Oto dobra definicja liścia NIL, jak na wiki. Liść NIL ma kolor czarny.
- Ścieżka od korzenia do dowolnego liścia NIL zawiera tę samą liczbę czarnych węzłów.
Pytanie
Załóżmy, że zaimplementowano operacje insert
i delete
dla drzewa czerwono-czarnego. Teraz, jeśli otrzymasz prawidłowe czerwono-czarne drzewo, czy zawsze istnieje sekwencja insert
i delete
operacje, które je konstruują?
Motywacja
To pytanie jest motywowane tym pytaniem i dyskusją z tego pytania .
Osobiście uważam, że jeśli wyobrażasz sobie prawidłowe czerwono-czarne drzewo składające się tylko z czarnych węzłów (co oznacza, że wyobrażasz sobie idealnie zrównoważone drzewo), istnieje sekwencja insert
i delete
operacje, które je konstruują. Jednak,
- Nie wiem, jak dokładnie to udowodnić
- Interesuje mnie również bardziej ogólny przypadek
insert
idelete
konstruuje prawidłowe czerwono-czarne drzewo składające się tylko z czarnych węzłów . Używa wstawek / usunięć, aby utworzyć drzewo wysokości . Najpierw możemy stworzyć idealnie zrównoważone czerwono-czarne drzewo w pierwszej kolejności, używając wstawek, a następnie używając i tyle samo usunięć odmalowujemy je całkowicie czarne drzewo. Sztuką jest poruszanie się w górę razy najniższej czerwonej warstwy w górę drzewa, aż dotrze do korzenia.insert
idelete
operacji?insert
idelete
; może istnieć kilka sposobów wykonania tych operacji. b) Ponieważ drzewa RB są zasadniczo drzewami B rzędu 4, można tam szukać inspiracji. Szczegóły mogą okazać się trudne, ponieważ mapowanie z RB na B (i / lub wstecz) nie jest unikalne.Odpowiedzi:
Operacje wstawiania i usuwania w drzewie czerwono-czarnym obejmują równoważenie potrzebne do zachowania właściwości czerwono-czarnego.
Problem z niekrzywymi (lewymi lub prawymi) pochylonymi czerwonymi czarnymi drzewami polega na tym, że istnieje wiele sposobów przywrócenia czerwono-czarnej czerni po podstawowym usunięciu lub wstawieniu.
To nie wstawka lub usunięcie przekształca drzewo, ale ponowne zrównoważenie i obrót, które następują później, aby zachować / przywrócić czerwoną czerń drzewa.
Podstawowy opis czerwono-czarnego drzewa nie określa, którą z możliwych dróg wybrać.
Nie jest możliwe, aby dowiedzieć się, jak dokładnie zrekonstruować dane czerwono czarne drzewo, ponieważ ponowne zrównoważenie nie musi być deterministyczne.
Zostało to „rozwiązane” w przypadku pochylonych w lewo czerwonych czarnych drzew.
Jest tylko jeden sposób przeprowadzenia równoważenia. Tak więc każde odchylone czerwone czarne drzewo można odtworzyć za pomocą wstawek i skasowań, ponieważ ponowne równoważenie / obroty są wykonywane w określony, deterministyczny sposób.
Nie oznacza to, że lewostronne drzewa RB są lepsze lub bardziej wydajne, co zyskują z jednej strony dzięki deterministycznym regułom równoważenia, z drugiej tracą przez bardziej złożony kod równoważący.
Zgodnie z komentarzem @ Antona:(h+2)⋅2h−1 h 2h+1−1 h∗2h−1 h
Istnieje algorytm, który wykorzystuje operację wstawiania i usuwania w celu skonstruowania prawidłowego czerwono-czarnego drzewa składającego się tylko z czarnych węzłów. Wykorzystuje wstawiania / usuwania w celu utworzenia drzewa o wysokości . Najpierw możemy stworzyć idealnie zrównoważone czerwono-czarne drzewo w pierwszej kolejności przy użyciu wstawek , a następnie przy użyciu wstawek i tej samej ilości usunięć odmalowujemy je całkowicie czarne drzewo. Sztuką jest poruszanie się w górę razy najniższej czerwonej warstwy w górę drzewa, aż dotrze do korzenia.
Myślę jednak, że kompletny algorytm równoważenia, taki jak Day-Stout-Warren, byłby bardziej wydajny.
źródło
insert
izdelete
książki CLRS, możesz zbudować prawidłowe drzewo RB składające się tylko z czarnych węzłów . Sztuką jest wstawienie większej liczby węzłów niż potrzeba, a następnie usunięcie nadmiernych. Algorytm będzie wyeliminować czerwone węzły.