1 / 122

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati. Alberi Bilanciati: Alberi Red-Black. Alberi Red-Black (alberi rossi-neri). Un Albero Red-Black (rosso-nero) è essenzialmente un albero binario di ricerca in cui: 1 Le chiavi vengono mantenute solo nei nodi interni dell’albero

aletha
Télécharger la présentation

Algoritmi e Strutture Dati

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. Algoritmi e Strutture Dati Alberi Bilanciati: Alberi Red-Black

  2. Alberi Red-Black (alberi rossi-neri) Un Albero Red-Black(rosso-nero)è essenzialmente un albero binario di ricerca in cui: 1 Le chiavi vengono mantenute solo nei nodi interni dell’albero 2 Le foglie sono costituite da nodi NIL, cioè nodi sentinella il cui contenuto è irrilevante e che evitano di trattare diversamente i puntatori ai nodi dai puntatori NIL. • In altre parole, al posto di un puntatore NIL si usa un puntatore ad un nodo NIL. • Quando un nodo ha come figli nodi NIL, quiel nodo sarebbe una foglia nell’albero binario di ricerca corrispondente.

  3. Alberi Red-Black (alberi rossi-neri) Un Albero Red-Black(rosso-nero)deve soddisfare le seguenti proprietà (vincoli): 1 Ogni nodo è colorato o di rosso o di nero; 2 Per convezione, i nodi NIL si considerano nodi neri; 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL (figlio di una foglia) ha lo stesso numero di nodi neri;

  4. Alberi Red-Black (alberi rossi-neri) Un Albero Red-Black(rosso-nero)deve soddisfare le seguenti proprietà (vincoli): 1 Ogni nodo è colorato o di rosso o di nero; 2 Per convezione, i nodi NIL si considerano nodi neri; 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL (figlio di una foglia) ha lo stesso numero di nodi neri; Considereremo soloalberi Red-Black in cui la radice è nera.

  5. Alberi Red-Black: esempio I 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL ha lo stesso numero di nodi neri. 30 15 70 60 85 20 10 80 90 5 50 65 Nil Nil Nil 40 55 Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil

  6. Alberi Red-Black: esempio I Vincolo 3impone che non possano esserci due nodi ROSSI adiacenti. (Ma più nodi NERI possono essere adiacenti.) 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL ha lo stesso numero di nodi neri. 30 15 70 60 85 20 10 80 90 5 50 65 Nil Nil Nil 40 55 Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil

  7. Alberi Red-Black: esempio I Ci sono 3 nodi neri lungo ogni percorso dalla radi-ce ad un nodo NIL 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL ha lo stesso numero di nodi neri. 30 15 70 60 85 20 10 80 90 5 50 65 Nil Nil Nil 40 55 Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil

  8. Alberi Red-Black: esempio I 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL ha lo stesso numero di nodi neri. Questo è anche un albero AVL 30 altezza 3 altezza 2 15 70 60 85 20 10 80 90 5 50 65 Nil Nil Nil 40 55 Nil Nil Nil Nil Nil Nil Nil Nil 1 livello di diff. Nil Nil Nil Nil

  9. Alberi Red-Black: esempio II 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL ha lo stesso numero di nodi neri. 30 15 70 60 85 20 10 80 90 50 65 Nil Nil Nil Nil Questo è ancora un albero Red-Black 40 55 Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil

  10. Alberi Red-Black: esempio II 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL ha lo stesso numero di nodi neri. Ma NON è un albero AVL! 30 altezza 3 altezza 1 15 70 60 85 20 10 80 90 50 65 Nil Nil Nil Nil 40 55 Nil Nil Nil Nil Nil Nil 2 livelli Nil Nil Nil Nil

  11. Alberi Red-Black: esempio I Ci sono 3 nodi neri lungo ogni percorso dalla radi-ce ad un nodo NIL 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL ha lo stesso numero di nodi neri. 30 15 70 60 85 20 10 80 90 5 50 65 Nil Nil Nil 40 55 Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil

  12. Alberi Red-Black: esempio III Ci sono 3 nodi neri lungo ogni percorso dalla radi-ce ad un nodo NIL 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL ha lo stesso numero di nodi neri. 30 15 70 60 85 20 10 80 90 5 50 65 Nil Nil Nil 40 55 Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil

  13. Alberi Red-Black: esempio IV Albero RB con 3 nodi neri lungo ogni percorso dalla radice ad un nodo NIL 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL ha lo stesso numero di nodi neri. 30 15 70 60 85 20 10 80 90 50 65 Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil

  14. Alberi Red-Black: esempio V Stesso albero con 2 nodi neri lungo ogni percorso dalla radice ad un nodo NIL 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL ha lo stesso numero di nodi neri. 30 15 70 60 85 20 10 80 90 50 65 Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil

  15. Alberi Red-Black: esempio VI 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL ha lo stesso numero di nodi neri. Questo albero può essere un albero Red-Black? 30 15 70 60 85 20 10 Nil Nil Nil 50 Nil Nil Nil Nil 40 55 Nil Nil Nil Nil

  16. Alberi Red-Black: esempio VI Per vincolo 4 ci possono essere al più 3 nodi neri lungo un percorso! 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL ha lo stesso numero di nodi neri. 30 15 70 60 85 20 10 Nil Nil Nil 50 Nil Nil Nil Nil 40 55 Nil Nil Nil Nil

  17. Alberi Red-Black: esempio VI Per vincolo 4 ci possono essere al più 3 nodi neri lungo un percorso! 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL ha lo stesso numero di nodi neri. 30 15 70 60 85 20 10 Nil Nil Nil 50 Nil Nil Nil Nil Impossibile! Perché... 40 55 Nil Nil Nil Nil

  18. Alberi Red-Black: esempio VI Per vincolo 4 ci possono essere al più 3 nodi neri lungo un percorso! 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL ha lo stesso numero di nodi neri. 30 15 70 60 85 20 10 Nil Nil Nil 50 Nil Nil Nil Nil Impossibile! Perché dovremmo violare vincolo 3 40 55 Nil Nil Nil Nil

  19. Alberi Red-Black: esempio VI Per vincolo 4 ci possono essere al più 3 nodi neri lungo un percorso! 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL ha lo stesso numero di nodi neri. 30 15 70 60 85 20 10 Nil Nil Nil 50 Nil Nil Nil Nil Quindi uno di questi due nodi deve essere rosso 40 55 Nil Nil Nil Nil

  20. Alberi Red-Black: esempio VI Per vincolo 4 ci possono essere al più 3 nodi neri lungo un percorso! 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL ha lo stesso numero di nodi neri. 30 15 70 60 85 20 10 Nil Nil Nil 50 Nil Nil Nil Nil 40 55 Esistono due percorsi con 2 soli nodi neri Nil Nil Nil Nil

  21. Alberi Red-Black: esempio VI Per vincolo 4 ci possono essere al più 3 nodi neri lungo un percorso! 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL ha lo stesso numero di nodi neri. 30 15 70 60 85 20 10 Nil Nil Nil 50 Nil Nil Nil Nil 40 55 Esiste un percorso con 2 soli nodi neri Nil Nil Nil Nil

  22. Alberi Red-Black: esempio VI Per vincolo 4 ci possono essere al più 3 nodi neri lungo un percorso! 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL ha lo stesso numero di nodi neri. 30 15 70 60 85 20 10 Nil Nil Nil 50 Nil Nil Nil Nil Questo caso è impossibile perchè un percorso ha 3 neri 40 55 Esiste un percorso con 2 soli nodi neri Nil Nil Nil Nil

  23. Alberi Red-Black: esempio VI Per vincolo 4 e il vincolo 3, ci possono essere al più 2 nodi nerilungo un percorso! 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL ha lo stesso numero di nodi neri. 30 15 70 60 85 20 10 Nil Nil Nil 50 Nil Nil Nil Nil 40 55 Nil Nil Nil Nil

  24. Alberi Red-Black: esempio VI Per vincolo 4 e il vincolo 3, ci possono essere al più 2 nodi nerilungo un percorso! 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL ha lo stesso numero di nodi neri. 30 15 70 60 85 20 10 Nil Nil Nil 50 Nil Nil Nil Nil 40 Questa sarebbe l’unica possibilità! 55 Nil Nil Nil Nil

  25. Alberi Red-Black: esempio VI Per vincolo 4 e il vincolo 3, ci possono essere al più 2 nodi nerilungo un percorso! 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL ha lo stesso numero di nodi neri. 30 15 70 60 85 20 10 Nil Nil Nil 50 Nil Nil Nil Nil Impossibile! Perché dovremmo violare vincolo 4 40 55 Nil Nil Nil Nil

  26. Alberi Red-Black: esempio VI 3 Se un nodo è rosso, allora entrambi i suoi figli sono neri; 4 Ogni percorso da un nodo interno ad un nodo NIL ha lo stesso numero di nodi neri. Questo albero NON può essere un albero Red-Black! 30 15 70 60 85 20 10 Nil Nil Nil 50 Nil Nil Nil Nil A meno che l’albero non venga ristrutturato (tramite rotazioni) 40 55 Nil Nil Nil Nil

  27. Percorso Nero in alberi Red-Black Definizione: Il numero di nodi nerilungo ogni percorso da un nodo x (escluso) ad una foglia è detto altezza nera di x Definizione: L’altezza nera di un albero Red-Blackè l’altezza nera della sua radice.

  28. Percorso massimo in alberi Red-Black Lemma: Un albero Red-Black con nnodi ha altezza al più2log(n+1) Dimostrazione: Iniziamo col dimostrare per induzione che il sottoalbero con radice x ha almeno nodi interni dove bh(x) è l’altezza nera di x. L’induzione sarà sull’altezza di x.

  29. Percorso massimo in alberi Red-Black Il sottoalbero con radice x ha al meno nodi interni dove bh(x) è l’altezza nera di x. Passo Base: Se x ha altezza 0: allora x è una foglia NIL e quindi contiene almeno:

  30. Percorso massimo in alberi Red-Black Il sottoalbero con radice x ha al meno nodi interni dove bh(x) è l’altezza nera di x. Passo Induttivo: Se x sia interno con 2 figli e abbia altezza bh(x)>1 Entrambi i suoi figli avranno altezza bh(x) o bh(x)-1 bh(x) 15 10 bh(x) bh(x)-1 20 bh(x) 15 10 bh(x) -1 bh(x)-1 20

  31. Percorso massimo in alberi Red-Black Il sottoalbero con radice x ha al meno nodi interni dove bh(x) è l’altezza nera di x. Passo Induttivo: Sia x nodo interno con 2 figli e abbia altezza > 0 Entrambi i suoi figli avranno altezza nerabh(x) o bh(x)-1 Entrambi i suoi figli avranno altezza minore di x,quindi possiamo usare ipotesi induttiva bh(x) 15 10 bh(x) bh(x)-1 20 bh(x) 15 10 bh(x) -1 bh(x)-1 20

  32. Percorso massimo in alberi Red-Black Il sottoalbero con radice x ha al meno nodi interni dove bh(x) è l’altezza nera di x. Passo Induttivo: Se x sia interno con 2 figli e abbia altezza >0 Entrambi i suoi figli avranno altezza nerabh(x) o bh(x)-1 Ogni figlio avrà almeno nodi interni bh(x) 15 10 bh(x) bh(x)-1 20 bh(x) 15 10 bh(x) -1 bh(x)-1 20

  33. Percorso massimo in alberi Red-Black Il sottoalbero con radice x ha al meno nodi interni dove bh(x) è l’altezza nera di x. Passo Induttivo: Sia x nodo interno con 2 figli e abbia altezza >0 Ogni figlio avrà almeno nodi interni Quindi il sottoalbero con radice x conterrà almeno nodi interni

  34. Percorso massimo in alberi Red-Black Il sottoalbero con radice x ha quindi al meno nodi interni dove bh(x) è l’altezza nera di x. Completiamo la dimostrazione del lemma. Sia ora hl’altezza dell’albero. Per il vincolo 3 almeno metà dei nodi lungo ogni percorso (esclusa la radice) sono neri. Quindi l’altezza nera dell’albero dovrà essere almeno h/2 ( cioèbh h/2 ).

  35. Percorso massimo in alberi Red-Black Il sottoalbero con radice x ha al meno nodi interni dove bh(x) è l’altezza nera di x. Completiamo la dimostrazione del lemma. Sia ora hl’altezza dell’albero. Quindi l’altezza nera dell’albero dovrà essere almeno h/2( cioèbh h/2 ). Ma allora, il numero di nodi dell’albero sarà

  36. Percorso massimo in alberi Red-Black Lemma: Un albero Red-Black con nnodi ha altezza al più2log(n+1) Dimostrazione: …. Completiamo la dimostrazione del lemma. Sia ora hl’altezza dell’albero. Ma allora, il numero di nodi dell’albero sarà Portando 1 a sinistra e applicando il logaritmo: cioè

  37. Costo operazioni su alberi Red-Black Teorema: In un albero Red-Black le operazioni di ricerca, inserimento e cancellazione hanno costo O(log(n)). Dimostrazione: Conseguenza diretta del Lemma precedente e dal fatto che tutte le operazioni hanno costo O(h), con h l’altezza dell’albero.

  38. Violazione delle proprietà per inserimento • Durante la costruzione di un albero Red-Black, quando un nuovo nodo viene inserito è possibile che le condizioni di bilancia-mento risultino violate. • Quando le proprietà Red-Blackvengono violate si può agire: • modificando i colori nella zona della violazione; • operando dei ribilanciamenti dell’albero tramite rotazioni: Rotazione destra e Rotazione sinistra;

  39. Alberi Red-Black: Rotazione destra Nodo Padre del sottoalbero key colore x padre y sinistro destro    Rotazione col figlio destro Rotazione va da destra a sinistra Il libro la chiama Rotazione a Sinistra

  40. Alberi Red-Black: Rotazione destra Nodo Padre del sottoalbero key y colore padre x sinistro destro    Rotazione col figlio destro Rotazione va da destra a sinistra Il libro la chiama Rotazione a Sinistra

  41. Alberi Red-Black: Rotazione destra Nodo key Rotazione-destra(T,x : albero-RB) y= destro[x] destro[x] = sinistro[y] IFsinistro[y] NIL THEN padre[sinistro[y]] =x padre[y] = padre[x] IFpadre[x]=NIL THEN root[T] = y ELSE IF x= sinistro[padre[x]] THEN sinistro[padre[x]] = y ELSE destro[padre[x]] = y sinistro[y] =x padre[x] =y colore padre sinistro destro Rotazione col figlio destro Rotazione va da destra a sinistra Il libro la chiama Rotazione a Sinistra Assunzione: destro[x] NIL

  42. Alberi Red-Black: Rotazione destra Rotazione-destra(T,x : albero-RB) y = destro[x] destro[x] = sinistro[y] IFsinistro[y] NIL THEN padre[sinistro[y]] =x padre[y] = padre[x] IFpadre[x]=NIL THEN root[T] = y ELSE IF x= sinistro[padre[x]] THEN sinistro[padre[x]] = y ELSE destro[padre[x]] = y sinistro[y] =x padre[x] =y Padre del sottoalbero x y   

  43. Alberi Red-Black: Rotazione destra Rotazione-destra(T,x : albero-RB) y = destro[x] destro[x] = sinistro[y] IFsinistro[y] NIL THEN padre[sinistro[y]] =x padre[y] = padre[x] IFpadre[x]=NIL THEN root[T] = y ELSE IF x= sinistro[padre[x]] THEN sinistro[padre[x]] = y ELSE destro[padre[x]] = y sinistro[y] =x padre[x] =y Padre del sottoalbero x y   

  44. Alberi Red-Black: Rotazione destra Rotazione-destra(T,x : albero-RB) y = destro[x] destro[x] = sinistro[y] IFsinistro[y] NIL THEN padre[sinistro[y]] =x padre[y] = padre[x] IFpadre[x]=NIL THEN root[T] = y ELSE IF x= sinistro[padre[x]] THEN sinistro[padre[x]] = y ELSE destro[padre[x]] = y sinistro[y] =x padre[x] =y Padre del sottoalbero x y   

  45. Alberi Red-Black: Rotazione destra Rotazione-destra(T,x : albero-RB) y = destro[x] destro[x] = sinistro[y] IFsinistro[y] NIL THEN padre[sinistro[y]] =x padre[y] = padre[x] IFpadre[x]=NIL THEN root[T] = y ELSE IF x= sinistro[padre[x]] THEN sinistro[padre[x]] = y ELSE destro[padre[x]] = y sinistro[y] =x padre[x] =y Padre del sottoalbero x y   

  46. Alberi Red-Black: Rotazione destra Rotazione-destra(T,x : albero-RB) y = destro[x] destro[x] = sinistro[y] IFsinistro[y] NIL THEN padre[sinistro[y]] =x padre[y] = padre[x] IFpadre[x]=NIL THEN root[T] = y ELSE IF x= sinistro[padre[x]] THEN sinistro[padre[x]] = y ELSE destro[padre[x]] = y sinistro[y] =x padre[x] =y Padre del sottoalbero x y   

  47. Alberi Red-Black: Rotazione destra Rotazione-destra(T,x : albero-RB) y = destro[x] destro[x] = sinistro[y] IFsinistro[y] NIL THEN padre[sinistro[y]] =x padre[y] = padre[x] IFpadre[x]=NIL THEN root[T] = y ELSE IF x= sinistro[padre[x]] THEN sinistro[padre[x]] = y ELSE destro[padre[x]] = y sinistro[y] =x padre[x] =y Padre del sottoalbero x y   

  48. Rotazione-destra(T,x : albero-RB) y = destro[x] destro[x] = sinistro[y] IFsinistro[y] NIL THEN padre[sinistro[y]] =x padre[y] = padre[x] IFpadre[x]=NIL THEN root[T] = y ELSE IF x= sinistro[padre[x]] THEN sinistro[padre[x]] = y ELSE destro[padre[x]] = y sinistro[y] =x padre[x] =y Alberi Red-Black: Rotazione destra Padre del sottoalbero y x   

  49. Rotazione-destra(T,x : albero-RB) y = destro[x] destro[x] = sinistro[y] IFsinistro[y] NIL THEN padre[sinistro[y]] =x padre[y] = padre[x] IFpadre[x]=NIL THEN root[T] = y ELSE IF x= sinistro[padre[x]] THEN sinistro[padre[x]] = y ELSE destro[padre[x]] = y sinistro[y] =x padre[x] =y Alberi Red-Black: Rotazione destra Padre del sottoalbero y x   

  50. Rotazione-destra(T,x : albero-RB) y = destro[x] destro[x] = sinistro[y] IFsinistro[y] NIL THEN padre[sinistro[y]] =x padre[y] = padre[x] IFpadre[x]=NIL THEN root[T] = y ELSE IF x= sinistro[padre[x]] THEN sinistro[padre[x]] = y ELSE destro[padre[x]] = y sinistro[y] =x padre[x] =y Alberi Red-Black: Rotazione destra Padre del sottoalbero y x   

More Related