Czy ktoś może jednoznacznie wyjaśnić usunięcie lewoskrętnego-Czerwono-czarnego drzewa?

Uczę się Left-Lean-Red-Black tree, od Prof.Robert Sedgewick

Http://www.cs.princeton.edu/~RS / rozmowy / LLRB / LLRB. pdf http://www.cs.princeton.edu/~RS/rozmowy/LLRB / RedBlack.pdf

Podczas gdy muszę zrozumieć insert z 2-3 tree i LLRB, spędziłem całkowicie 40 godzin teraz przez 2 tygodnie i nadal nie mogę uzyskać usunięcia LLRB.

Czy ktoś naprawdę może mi wyjaśnić deletion z LLRB?

Author: Jackson Tale, 2013-03-17

2 answers

Ok, spróbuję tego i może inni dobrzy ludzie z SO mogą pomóc. Wiesz, jak jednym ze sposobów myślenia o czerwonych węzłach jest wskaźnik

  1. gdzie w drzewie są nowe węzły i
  2. ile jest nierównowagi.

Dlatego wszystkie nowe węzły są czerwone. Gdy węzły (lokalnie) się równoważą, przechodzą przewrót koloru, a zaczerwienienie jest przekazywane rodzicowi, a teraz rodzic może wyglądać nierównomiernie w stosunku do swojego rodzeństwa.

Jako ilustrację rozważ sytuację, w której dodajesz węzły od większych do mniejszych. Zaczynasz od węzła z, który jest teraz root i jest czarny. Dodajesz węzeł Y, który jest czerwony i jest lewym potomkiem Z. dodajesz czerwony X jako potomek Z, ale teraz masz dwa kolejne czerwone, więc obracasz w prawo, zmieniasz kolor i masz zrównoważone, wszystkie czarne (brak równowagi/"nowe węzły"!) drzewo ukorzenione na Y [pierwszy rysunek]. Teraz dodajesz W I V, w tej kolejności. Na początku oba są czerwone [drugi rysunek], ale natychmiast V / X / W są obracane w prawo, a kolor odwrócony, tak że tylko X jest czerwony [trzeci rysunek]. Jest to ważne: czerwony znak X oznacza, że lewy podzbiór Y jest niezrównoważony przez 2 węzły lub, innymi słowy, w lewym poddrzewie są dwa nowe węzły. Tak więc wysokość czerwonych linków jest liczbą nowych, potencjalnie niezrównoważonych węzłów: w czerwonym poddrzewie jest 2^wysokość nowych węzłów.

Tutaj wpisz opis obrazka

Zauważ, że przy dodawaniu węzłów, zaczerwienienie jest zawsze pomijane: w odwróceniu koloru, dwa czerwone dzieci stają się czarne (=lokalnie zrównoważone) podczas barwienia rodzica na Czerwono. Zasadniczo to, co usuwa, jest odwróceniem tego procesu. Tak jak nowy węzeł jest czerwony, zawsze chcemy również usunąć czerwony węzeł. Jeśli węzeł nie jest czerwony, najpierw chcemy, aby był czerwony. Można to zrobić przez odwrócenie koloru (nawiasem mówiąc, dlatego odwrócenie koloru w kodzie na stronie 3 jest w rzeczywistości neutralne kolorystycznie). Więc jeśli dziecko, które chcemy usunąć, jest czarne, możemy zrobić je czerwonymi przez odwrócenie koloru jego rodzica. Teraz dziecko jest gwarantowana czerwień.

Następnym problemem jest fakt, że kiedy rozpoczynamy usuwanie, nie wiemy, czy docelowy węzeł do usunięcia jest czerwony, czy nie. Jedną ze strategii byłoby dowiedzieć się pierwszy. Jednak zgodnie z moim czytaniem Twojego pierwszego odniesienia, wybrana tam strategia ma na celu zapewnienie, że usunięty węzeł może być czerwony, poprzez "popychanie" czerwonego węzła przed węzłem wyszukiwania, Gdy przeszukujemy drzewo w celu usunięcia węzła. Może to spowodować niepotrzebne czerwone węzły, które fixUp() procedura rozwiąże w drodze powrotnej do drzewa. fixUp() prawdopodobnie utrzymuje zwykłe niezmienniki LLRBT: "brak kolejnych czerwonych węzłów" i " brak prawych czerwonych węzłów."

Nie jestem pewien, czy to pomoże, Czy musimy przejść do bardziej szczegółowego badania kodu.

 8
Author: angelatlarge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-17 03:30:35

Jest ciekawy komentarz na temat implementacji Sedgwich, a w szczególności jej metody delete od profesora Harvardu Comp Sci. Lewoskrzydłe czerwono-czarne drzewa uważane za szkodliwe zostały napisane w 2013 (Sedgwich pdf, o którym wspomniałeś powyżej, jest datowany na 2008):

Trudne pisanie

Praca Sedgewicka jest trudna. Od 2013 r. sekcja Wstaw przedstawia 2-3-4 drzewa jako domyślne i opisuje 2-3 drzewa jako wariant. Realizacja delete, jednak działa tylko na 2-3 drzewa. Jeśli zaimplementujesz domyślny wariant insert i jedyny wariant delete, twoje drzewo nie będzie działać. Tekst nie podświetla przełącznika z 2-3-4 na 2-3: not kind.

Najnowsza wersja kodu Sedgwich, która zawiera implementację 2-3, jest datowana Kwiecień 2014 . Jest on na jego algorytmy stronie książki w RedBlackBST.java

 1
Author: Kurt Krueckeberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-23 02:09:39