1 / 36

Alberi Rosso-Neri

Alberi Rosso-Neri. Algoritmi e Strutture Dati 20 aprile 2001. Alberi Binari di Ricerca. 4. 2. 6. 1. 3. 5. 7. 3 = O(log(n)).

kuri
Télécharger la présentation

Alberi Rosso-Neri

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Alberi Rosso-Neri Algoritmi e Strutture Dati 20 aprile 2001

  2. Alberi Binari di Ricerca 4 2 6 1 3 5 7 3 = O(log(n)) Gli alberi di ricerca binari consentonol’individuazione di un elemento al propriointerno in un tempo mediamente proporzionaleall’altezza dell’albero considerato Costruiamo un albero a partire dalla sequenza:4, 2, 6, 1, 3, 5, 7

  3. Alberi Binari di Ricerca 1 2 3 4 5 7 = O(n) 6 7 Inseriamo gli stessi elementi con un diverso ordine: 1, 2, 3, 4, 5, 6, 7

  4. Alberi Rosso-Neri • Gli alberi Rosso-Neri sono alberi binari di ricerca estesi • Ciascun nodo di tali alberi contiene uncampo addizionale che riporta il suo colore • Le operazioni di inserimento e cancellazionevengono opportunamente integrate in modotale da rendere l’albero binario bilanciato

  5. Un esempio di albero Rosso-Nero

  6. Caratterizzazione La caratterizzazione degli alberi Rosso-Neriavviene attraverso la formulazione diquattro proprietà vincolanti

  7. Proprietà n. 1 46 26 62 21 31 51 85 Ogni nodo dell’albero è rosso o nero

  8. Proprietà n. 2 52 45 NIL Ogni foglia dell’albero (NIL) è nera NIL NIL

  9. Proprietà n.3 42 12 78 Se un nodo è rosso entrambi i suoi figli sono neri

  10. Proprietà n.4 65 42 73 32 51 NIL NIL 26 NIL NIL NIL NIL NIL Dato un nodo, tutti i percorsi discendenti che raggiungono una foglia contengono lo stesso numero di nodi neri

  11. Proprietà • Ogni nodo è rosso o nero • Ogni foglia (NIL) è nera • Se un nodo è rosso entrambi i suoi figli sono neri • Dato un nodo, tutti i percorsi discendenti che raggiungono una foglia contengono lo stesso numero di nodi neri

  12. Osservazione 1 2 NIL NIL NIL NIL NIL NIL 3 4 5 6 NIL Proviamo a costruire un albero Rosso-Nero sbilanciato…

  13. Osservazione NIL NIL NIL NIL NIL NIL 1 2 3 4 5 6 NIL

  14. Altezza-nero • Definiamo altezza-nero di un nodo x(black-height(x)) il numero di nodi neriche si incontrano in un qualsiasi camminodiscendente da x verso una foglia • Definiamo l’altezza-nero di un alberoRosso-Nero come l’altezza-nero della suaradice

  15. Altezza-nero 65 42 73 32 51 NIL NIL 26 NIL NIL NIL NIL NIL black-height(32) = 2 black-height(42) = 2 black-height(T) = black-height(65) = 3

  16. Lemma 1 Un albero Rosso-Nero con n nodi interni ha altezza al più 2lg(n+1)

  17. Lemma 2 Dato un nodo x appartenente ad un alberoRosso-Nero, il sottoalbero ivi radicato contiene almeno 2bh(x)-1 nodi interni

  18. Dimostrazione Lemma 2 NIL Dimostriamo il Lemma 2 per induzione sull’altezza del nodo x. Se l’altezza di x è 0, x è una foglia… questo implica che Il sottoalbero radicato in x ha 0 = 20-1 nodi interni

  19. Dimostrazione Lemma 2 6 2 8 Consideriamo un nodo x che ha altezza > 0, esso avrà quindi due figli… Ciascuno dei due figli di x avrà altezza bh(x) oppure bh(x)-1. 6 2 8

  20. Dimostrazione Lemma 2 Per l’ipotesi induttiva, poiché l’altezza dei figli di x è inferiore all’altezza di x possiamo affermare che ciascun figlio ha almeno 2bh(x)-1-1 nodi interni Quindi, il sottoalbero radicato in x ha almeno (2bh(x)-1-1) + (2bh(x)-1-1) + 1 nodi interni (2bh(x)-1-1) + (2bh(x)-1-1) + 1 = 2bh(x)-1 + 2bh(x)-1 –1 = 2*2bh(x)-1 – 1 = 2bh(x) –1

  21. Dimostrazione Lemma 1 Un albero Rosso-Nero con n nodi interni ha altezza al più 2lg(n+1) Dim. Sia h l’altezza dell’albero considerato. La proprietà 3 degli alberi Rosso-Neri impone che almeno la metà dei nodi che separano la radice dalle foglie siano neri. Questo implica che l’altezza-nero dell’albero è perlomeno h/2.

  22. Dimostrazione Lemma 1 Dall’applicazione del Lemma 2 possiamo affermare che il numero di nodi interni n è maggiore o uguale di 2h/2 –1 n 2h/2 –1 n +1 2h/2 log(n+1) h/2 h 2lg(n+1)

  23. Alberi Rosso-Neri Il mantenimento delle proprietà caratterizzanti gli alberi Rosso-Neri deve essere garantito in corrispondenza delle comuni operazioni chevanno a modificare la struttura dell’albero stesso Le operazioni di inserimento e cancellazionegià viste per gli alberi binari di ricerca vengonomantenute ed integrate con una successiva operazione di ribilanciamento

  24. Rotazioni Right-Rotate(T,y) x y a c y x Left-Rotate(T,x) a b c b Ai fini dell’implementazione delle proceduredi ribilanciamento si rivela utile l’introduzione delle operazioni di left-rotation (rotazione sinistra) e right-rotation (rotazione destra)

  25. Rotazione sinistra z z y x a c x y a b c b

  26. Left-Rotate z z y x a x c y a b c b Left-Rotate(T,x) Yright[x] right[x] left[y] If left[y]  NIL then p[left[y]]  x p[y]p[x] If p[x] = NIL then root[T]  y else if x = left[p[x]] then left[p[x]]  y else right[p[x]]  y left[y]  x p[x]  y

  27. Inserimento • L’algoritmo di inserimento di un nodo x in unalbero Rosso-Nero: • Inserisce il nuovo nodo nell’albero secondoil tradizionale algoritmo di inserimento per alberibinari di ricerca • Verifica se l’albero risultante viola le proprietàdegli alberi Rosso-Neri • In caso di violazione, si risale l’albero sino allaradice operando opportunamente rotazioni ecambiamenti di colore

  28. Inserimento L’algoritmo di inserimento che presenteremodistingue tre possibili casi di intervento perripristinare le proprietà degli alberi Rosso-Neripiù altri tre simmetrici

  29. RB-Insert(T,x) RB-Insert(T,x) Tree-Insert(T,x) color[x] RED While x  root[T] and color[p[x]] = RED do if p[x] = left[p[p[x]]] then y  right[p[p[x]]] if color[y] = RED then color[p[x]] = BLACK color[y] = BLACK color[p[p[x]]] = RED x p[p[x]] …

  30. RB-Insert(T,x) …. else if x = right[p[x]] then x  p[x] Left-Rotate(T,x) color[p[x]] = BLACK color[p[p[x]]] = RED Right-Rotate(T,p[p[x]]) else …. Color[root[T]]  BLACK

  31. Un esempio 1/3 65 42 73 32 51 NIL NIL Inseriamo nell’albero corrente l’elemento x = 24 26 NIL NIL NIL NIL NIL

  32. Un esempio 2/3 65 42 73 32 51 NIL NIL Ci troviamo nel terzo caso della proceduradi ribilanciamento p[p[x]] p[x] 26 NIL NIL NIL x 24 NIL NIL NIL

  33. Un esempio 3/3 65 42 73 51 NIL NIL 26 x 24 32 NIL NIL NIL NIL NIL NIL

  34. Cancellazione • L’algoritmo di cancellazione di un nodo x da unalbero Rosso-Nero opera secondo la stessafilosofia dell’algoritmo di inserimento: • Cancella il nodo dall’albero secondo iltradizionale algoritmo di cancellazione peralberi binari di ricerca • Verifica se l’albero risultante viola le proprietàdegli alberi Rosso-Neri • In caso di violazione, si risale l’albero sino allaradice operando opportunamente rotazioni ecambiamenti di colore

  35. Cancellazione • L’algoritmo di cancellazione prevede quattropossibili casi di intervento più altri quattrosimmetrici • La complessità di tale algoritmo è di ordineO(h)

  36. Un esempio 65 26 73 24 42 NIL NIL x 32 51 NIL NIL NIL NIL NIL NIL

More Related