Proces kasowania dla binarne drzewo poszukiwań

głosy
7

Rozważmy procedurę usunięcia na BST, gdy węzeł usunąć ma dwoje dzieci. Powiedzmy, że zawsze zastąpić go węzła posiadający minimalną klucz w jego prawym poddrzewie.

Pytanie brzmi: czy ta procedura przemienne? Oznacza to, że usuwanie X, a następnie Y ma ten sam wynik niż usuwanie pierwszego T, a następnie X?

Myślę, że odpowiedź brzmi nie, ale nie mogę znaleźć kontrprzykład, ani dowiedzieć się żadnego ważnego rozumowania.

EDYTOWAĆ:

Może muszę być wyraźniejszy.

Rozważmy transplant(node x, node y)procedurę: zastąpić X z Y (i jego poddrzewem). Tak więc, jeśli chcę usunąć węzeł (słownie x), która ma dwoje dzieci i zastąpić ją z węzłem posiadający minimalną klucz w jego prawym poddrzewie:

y = minimum(x.right)
transplant(y, y.right) // extracts the minimum (it doesn't have left child)
y.right = x.right
y.left = x.left
transplant(x,y)

Pytanie było jak udowodnić procedura powyżej nie jest przemienne.

Utwórz 07/06/2010 o 15:46
źródło użytkownik
W innych językach...                            


4 odpowiedzi

głosy
17

Delecja (w ogóle) nie jest przemienne. Oto kontrprzykład:

    4
   / \
  3   7
     /
    6

Co jeśli usuwamy 4, a następnie 3?

Gdy usuwamy 4, otrzymujemy 6 jako nowy root:

   6
  / \
 3   7

Usuwanie 3 nie zmienia drzewo, ale daje nam to:

  6
   \
    7

Co jeśli usuwamy 3, a następnie 4?

Gdy usuwamy 3 drzewo nie zmienia:

 4
  \
   7
  /
 6

Jednak, kiedy teraz usunąć 4, nowy korzeń staje 7:

  7
 /
6

Dwa uzyskane drzewa nie są takie same, a zatem delecja jest przemienne.

AKTUALIZACJA

Nie czytałem, że ograniczenie to jest, kiedy zawsze usunąć węzeł z 2 dzieci. Moje rozwiązanie jest dla przypadku ogólnego. Będę go zaktualizować, jeśli / kiedy mogę znaleźć kontrprzykład.

Kolejna aktualizacja

Nie mam konkretnych dowodów, ale ja zamierzam zgadywać:

W ogólnym przypadku można obsłużyć delecji różnie w zależności od tego, czy mają dwoje dzieci, jedno dziecko, czy ma dzieci. W przeciw-przykład ja przewidzianym, najpierw usunąć węzeł z dwójką dzieci, a potem do węzłów z jednym dzieckiem. Po tym, ja usunąć węzeł bez dzieci, a następnie innego węzła z jednym dzieckiem.

W szczególnym przypadku tylko usuwanie węzłów z dwójką dzieci, warto rozważyć przypadek, gdy oba węzły znajdują się w tym samym sub-tree (ponieważ nie ma znaczenia, czy są one w różnych sub-drzew, można mieć pewność, że ogólna struktura nie ulegnie zmianie w zależności od kolejności delecji). Co naprawdę trzeba udowodnić, czy kolejność usunięciem węzłów w tym samym sub-tree, gdzie każdy węzeł ma dwoje dzieci, sprawy.

Rozważmy dwa węzły A i B, gdzie A jest przodkiem B. Następnie można doprecyzować kwestię być:

Czy usunięcie przemienne gdy rozważa usunięcie dwoma węzłami od A binarne drzewo poszukiwań, które mają związek przodek-potomek siebie (oznaczałoby to, że oni są w tym samym sub-tree)?

Po usunięciu węzła (powiedzmy), to przechodzić odpowiedniego poddrzewa znaleźć najmniejszy element. Ten węzeł będzie węzłem liść i nigdy nie może być równy B (ponieważ B ma dwójkę dzieci i nie może być węzłem liść). Można by potem zastąpić wartość A z wartością tej liści węzła. Oznacza to, że tylko strukturalne zmiany w drzewie jest zastąpienie wartości A jest z wartości węzła liści, a utrata liści węzła.

Ten sam proces jest zaangażowany do B. Oznacza to, że zastąpienie wartości węzła i zastąpić liści węzła. Tak w ogóle, po usunięciu węzła z dwójką dzieci, jedyna zmiana strukturalna jest zmiana wartości węzła jesteś usuwanie i usunięcie węzła liści, kto jest wartość używasz jako zamiennik .

Więc pytanie jest następnie rafinowana:

Można zagwarantować, że będzie zawsze ten sam węzeł zastępczego, niezależnie od kolejności delecji (jeśli są zawsze Usuwanie węzła z dwojgiem dzieci)?

Odpowiedź (chyba) jest twierdząca. Czemu? Oto kilka uwag:

  • Powiedzmy usunąć pierwszy potomek węzła i drugi węzeł przodek. Sub-tree, który został zmodyfikowany, gdy usunięty węzeł potomka jest nie w lewym sub-tree z prawej dzieckiem węzła przodka. Oznacza to, że sub-tree pozostaje nienaruszone. Oznacza to również, niezależnie od kolejności usunięcie, dwa różne sub-drzewa są modyfikowane, a zatem działanie jest przemienne.
  • Ponownie, powiedzmy usunąć pierwszy potomek węzła i drugi węzeł przodek. Sub-tree, który został zmodyfikowany, gdy usunięty węzeł potomka jest w lewym sub-tree z prawej dzieckiem węzła przodka. Ale nawet tutaj, nie pokrywają. Powodem jest to, kiedy po raz pierwszy węzeł potomka usunięcia, jeśli spojrzeć na lewe poddrzewa węzła potomka w prawym dziecka. Gdy następnie usunąć węzeł przodka, będzie nigdy zejść że sub-tree ponieważ będziesz zawsze jechać w lewo po wejściu lewe poddrzewa węzła przodka prawym dziecka. Więc jeszcze raz, niezależnie od tego, co najpierw usunąć jesteś modyfikowanie różnych sub-drzew i tak wydaje się kolejność nie ma znaczenia.
  • Innym przypadkiem jest sytuacja, gdy węzeł przodka usunąć pierwszy i okaże się, że minimalna węzeł jest dzieckiem węzła potomka. Oznacza to, że węzeł potomek będzie skończyć z jednym dzieckiem, a usunięcie jednego dziecka jest trywialne. Rozważmy teraz przypadek, w którym w tym scenariuszu usuniętego węzła potomka pierwszy. Następnie należy zastąpić wartość węzła potomka z jego prawej dziecka, a następnie usunąć właściwą dziecko. Następnie po usunięciu węzła przodka, kończy się znalezieniem samą minimalną węzeł (lewy dziecko starego usuniętego węzła, który jest również lewy dziecko zastępowanego węzła). Tak czy inaczej, w końcu z tej samej strukturze.

To nie jest rygorystyczny dowód; Są to tylko niektóre obserwacje zrobiłem. Za wszelką cenę, nie krępuj się grzebać dziury!

Odpowiedział 07/06/2010 o 18:32
źródło użytkownik

głosy
0

Odpowiadam tu do drugiej aktualizacji Vivin użytkownika.

Myślę, że to jest dobry przekształcenie pytania:

Czy usunięcie przemienne gdy rozważa usunięcie dwoma węzłami od A binarne drzewo poszukiwań, które mają związek przodek-potomek siebie (oznaczałoby to, że oni są w tym samym sub-tree)?

ale to zdanie pogrubione poniżej nie jest prawdziwe:

Po usunięciu węzła (powiedzmy), to przechodzić odpowiedniego poddrzewa znaleźć najmniejszy element. Ten węzeł będzie węzłem liść i nigdy nie może być równy B

od minimalnego elementu w prawym poddrzewie jest może mieć prawo dziecka . Tak, to nie jest liściem. Nazwijmy minimalnego elementu w prawym poddrzewie jest successor(A). Teraz, prawdą jest, że B nie może być successor(A), ale może to być w jego prawym poddrzewie. Tak, to jest bałagan.

Postaram się streścić.

hipoteza :

  1. A i B mają dwójkę dzieci każdy.
  2. A i B są w tym samym poddrzewie.

Inne rzeczy możemy wywnioskować z hipotez:

  1. B nie jest successor(A), ani to successor(B).

Teraz, biorąc pod uwagę, myślę, że istnieją 4 różne przypadki (jak zwykle, niech być przodkiem B):

  1. B znajduje się w lewym poddrzewie A w
  2. B jest przodkiem successor(A)
  3. successor(A) jest przodkiem B
  4. B i następca (A) nie ma żadnego związku. (Są one w różnych poddrzew należących do A)

Myślę (ale oczywiście nie mogę tego udowodnić), że przypadki 1, 2 i 4 nie mają znaczenia. Tak, tylko w przypadku successor(A)jest przodkiem procedury kasowania B nie może być przemienne. Czy może to?

Mijam piłkę:)

Pozdrowienia.

Odpowiedział 11/06/2010 o 18:45
źródło użytkownik

głosy
2

Wydaje mi się, że kontrprzykład pokazano w odpowiedzi Vivin jest jedynym przypadku braku przemienności i że rzeczywiście jest eliminowane przez ograniczenia, że ​​tylko dwa węzły dzieci mogą zostać usunięte.

Ale może być również wyeliminowana, jeśli odrzucić to, co wydaje się być jednym z pomieszczeń Vivin, który jest, że powinniśmy przechodzić odpowiedniego poddrzewa tak mało, jak to możliwe, aby znaleźć żadnego dopuszczalnego następcę. Jeśli natomiast zawsze promować najmniejszy węzeł w prawym poddrzewie jako następcy, niezależnie od tego, jak daleko okazuje się być zlokalizowany, a nawet gdybyśmy zrelaksować ograniczenie usuwanie węzłów mniej niż dwoje dzieci, za wynik Vivin

    7
   /
  6
nigdy nie zostanie osiągnięty, jeśli zaczynają się

    4
   / \
  3 7
     /
    6

Zamiast tego najpierw usunąć 3 (bez następcy), a następnie usunięcie 4 (z 6 następcę), otrzymując

    6
     \
      7

która jest taka sama jak kolejność delecyjne odwrócone.

Skreślenie będzie wówczas przemienne, i myślę, że zawsze jest przemienne, biorąc pod uwagę założenie nazwałem (następca jest zawsze najmniejsza węzeł w prawym poddrzewie usuniętego węzła).

Nie mam formalnego dowodu do zaoferowania, a jedynie wyliczenie przypadków:

  1. Jeśli dwa węzły mają być usunięte są w różnych poddrzew, a następnie usunięcie jednego z nich nie ma wpływu na innych. Tylko wtedy, gdy są one w tej samej ścieżce może kolejność usunięcia ewentualnie mieć wpływ na wynik.

    Więc żadnego wpływu na przemienności może przyjść tylko wtedy, gdy węzeł przodek i jeden z jego potomków są zarówno usunięty. Teraz, w jaki sposób ich pionowe relacje wpływają przemienności?

  2. Potomek w lewym poddrzewie przodka. Ta sytuacja nie wpłynie na przemienności ponieważ następca pochodzi z prawego poddrzewa i nie może wpływać na lewe poddrzewo w ogóle.

  3. Potomek w prawym poddrzewie przodka. Jeśli następca przodkiem jest zawsze najmniejsza węzeł w prawym poddrzewie, a następnie kolejność skreślenia nie można zmienić wybór następcy, bez względu na to potomek zostanie usunięta przed lub po przodka. Nawet jeśli następca przodka okazuje się być węzeł potomka, który ma również zostać usunięta, że potomek też jest zastępowany kolejnym co do wielkości węzła do niego, a potomek nie może mieć własne lewe poddrzewo pozostały do rozpatrzenia , Więc usunięcie z przodka i wszelkich potomka prawym poddrzewie zawsze będzie przemienne.

Odpowiedział 06/04/2011 o 19:34
źródło użytkownik

głosy
0

Myślę, że istnieją dwa równie opłacalne sposoby usuwania węzła, gdy ma 2 dzieci:
Przejdź do Przypadek 4 ...

Przypadek 1: usunięcie 3 (węzeł liścia)
 2 3
 / \ -> / \
1 3 1


Przypadek 2: usuń 2 (lewy węzeł dziecko)
 2 3
 / \ -> / \
1 3 1


Przypadek 3: usunięcie 2 (prawy węzeł dziecko)
 2 2
 / \ -> / \
1 3 3

______________________________________________________________________
Przypadek 4: usunięcie 2 (lewy i prawy węzły potomne)
 2 2 3
 / \ -> / \ lub / \      
1 3 1 3
zarówno do pracy i mają różne wynikające drzew :) ______________________________________________________________________
Jak wyjaśniono tutaj algorytm: http: // www .mathcs.emory.edu / ~ Cheung / kursy / 323 / Syllabus / Drzewa / AVL-delete.html Deleting a node with 2 children nodes: 1) Replace the (to-delete) node with its in-order predecessor or in-order successor 2) Then delete the in-order predecessor or in-order successor

Odpowiedział 10/10/2016 o 01:02
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more