La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Algoritmi e Strutture Dati

Presentazioni simili


Presentazione sul tema: "Algoritmi e Strutture Dati"— Transcript della presentazione:

1 Algoritmi e Strutture Dati
Alberi binari di ricerca Alberto Montresor Università di Trento This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy of this license, visit or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA. © Alberto Montresor

2 Insieme dinamico che implementa le seguenti funzionalità
Dizionari Dizionario Insieme dinamico che implementa le seguenti funzionalità Item lookup(Item k) insert(Item k, Item v) remove(Item k) Esempi di implementazione Array ordinato Ricerca O(log n), inserimento/cancellazione O(n) Lista non ordinata Ricerca/cancellazione O(n), inserimento O(1) © Alberto Montresor

3 Alberi binari di ricerca (ABR)
Idea “ispiratrice” Portare l'idea di ricerca binaria in un albero Definizione Ogni nodo u contiene una chiave u.key associata ad un valore u.value Le chiavi appartengono ad un insieme totalmente ordinato Proprietà Le chiavi dei nodi del sottoalbero sinistro di u sono minori di u.key Le chiavi dei nodi del sottoalbero destro di u sono maggiori di u.key 10 6 15 4 8 12 18 © Alberto Montresor

4 Alberi binari di ricerca (ABR)
Proprietà di ricerca Le proprietà 1. e 2. permettono di realizzare un algoritmo di ricerca dicotomica Domanda – Proprietà di ordine Come devo visitare l'albero per ottenere la lista ordinata dei valori? Dettagli implementativi Ogni nodo deve mantenere Figlio sinistro, destro Padre Chiave Valore Figlio sinistro Padre destro Key, Value © Alberto Montresor

5 Alberi binari di ricerca: Specifica
Operazioni ammesse su ABR Tree key() Tree value() Tree left() Tree right() Tree parent() Tree lookup(Item k) Tree insert(Item k, Item d) Tree delete() Tree successorNode(Item T) Tree predecessorNode(Item T) Tree min() Tree max() © Alberto Montresor

6 4 sta nel sottoalbero sinistro di 6 T
Ricerca: esempio Ricerca del valore 4 4 < 6 4 sta nel sottoalbero sinistro di 6 T 6 2 8 1 4 3 © Alberto Montresor

7 4 sta nel sottoalbero destro di 2 T
Ricerca: esempio Ricerca del valore 4 4 > 2 4 sta nel sottoalbero destro di 2 T 6 2 8 1 4 3 © Alberto Montresor

8 Ricerca: esempio Ricerca del valore 4 4 = 4 trovato! T 6 2 8 1 4 3
© Alberto Montresor

9 Ricerca: Implementazione
Ricorsiva Iterativa © Alberto Montresor

10 Ricerca del minimo e del massimo: Esempi
Sottoalbero con radice 2: - minimo 1 - massimo 4 Sottoalbero con radice 8: - minimo 8 - massimo 15 T 6 2 8 1 4 4 12 3 9 15 © Alberto Montresor

11 Ricerca del minimo e del massimo: Pseudo-codice
© Alberto Montresor

12 Ricerca del successore/predecessore
Definizione Il successore di un nodo u è il più piccolo nodo maggiore di u Due casi u ha un figlio destro Il successore u' è il minimo del sottoalbero destro di u Esempio: successore di 2 è 3 T 6 u 2 8 1 4 12 9 15 3 u' © Alberto Montresor

13 Ricerca del successore/predecessore
Definizione Il successore di un nodo u è il più piccolo nodo maggiore di u Due casi u non ha un figlio destro Il successore è il primo avo u' tale per cui u sta nel sottoalbero sinistro di u' Esempio: successore di 4 è 6 T u' 6 2 8 1 3 12 4 9 15 u © Alberto Montresor

14 Ricerca del successore: Pseudo-codice (iterativo)
© Alberto Montresor

15 Ricerca: costo computazionale
In generale Le operazioni di ricerca sono confinate ai nodi posizionati lungo un singolo percorso (path) dalla radice ad una foglia Tempo di ricerca: O(h) Domanda Qual è il caso pessimo? Qual è il caso ottimo? h = altezza dell’albero Caso pessimo: l'albero è organizzato come una sequenza lineare di valori crescenti o decrescenti. il costo è lineare nella dimensione dell'albero (O(n)) Caso ottimo: l'albero è completo, o anche solo bilanciato (ovvero la differenza fra il livello del nodo minimo e il livello del nodo massimo differisce al più di una quantità costante. In questo caso, l'altezza dell'albero è O(log n) © Alberto Montresor

16 Inserimento 5 < 6 Inserimento valore 5 5 > 2 T 5 > 4 6 4 2 8
1 4 4 12 3 5 9 15 © Alberto Montresor

17 Inserimento: pseudo-codice (iterativo)
© Alberto Montresor

18 Inserimento: pseudo-codice (iterativo)
© Alberto Montresor

19 Caso 1: Il nodo u da eliminare non ha figli Semplicemente si elimina
Cancellazione Caso 1: Il nodo u da eliminare non ha figli Semplicemente si elimina Esempio: Eliminazione nodo 5 T 6 2 8 1 4 4 12 3 5 9 15 u © Alberto Montresor

20 Caso 2: Il nodo u da eliminare ha un unico figlio f Si elimina u
Cancellazione Caso 2: Il nodo u da eliminare ha un unico figlio f Si elimina u Si attacca f all'ex-padre p di u in sostituzione di u (short-cut) Esempio: Cancellazione di 4 T 6 2 p 8 1 4 12 u 3 9 15 f © Alberto Montresor

21 Caso 3: Il nodo u da eliminare ha due figli
Cancellazione Caso 3: Il nodo u da eliminare ha due figli Si individua il successore s del nodo u Il successore non ha figlio sinistro Si “stacca” il successore Si attacca l'eventuale figlio destro di s al padre di s (short-cut) Si copia s su u Si rimuove il nodo s T 7 2 u 8 3 1 5 12 s 3 6 9 15 4 © Alberto Montresor

22 Cancellazione: Pseudo-codice
© Alberto Montresor

23 Cancellazione – Dimostrazione di correttezza
Caso 1 - nessun figlio Eliminare foglie non cambia la proprietà di ordine dei nodi rimanenti Caso 2 - solo un figlio (destro o sinistro) Se u è il figlio destro (sinistro) di p, tutti i i valori nel sottoalbero di f sono maggiori (minori) di p Quindi f può essere attaccato come figlio destro (sinistro) di p al posto di u Caso 3 - due figli Il successore s è sicuramente maggiore di tutti i nodi del sottoalbero sinistro di u è sicuramente minore di tutti i nodi del sottoalbero destro di u Quindi può essere sostituito a u © Alberto Montresor

24 Modifica: costo computazionale
In generale Le operazioni di modifica sono confinate ai nodi posizionati lungo un singolo percorso (path) dalla radice ad una foglia Tempo di ricerca: O(h) h = altezza dell’albero Caso pessimo: l'albero è organizzato come una sequenza lineare di valori crescenti o decrescenti. il costo è lineare nella dimensione dell'albero (O(n)) Caso ottimo: l'albero è completo, o anche solo bilanciato (ovvero la differenza fra il livello del nodo minimo e il livello del nodo massimo differisce al più di una quantità costante. In questo caso, l'altezza dell'albero è O(log n) © Alberto Montresor

25 Qual è l'altezza media di un albero di ricerca?
Complessità media Qual è l'altezza media di un albero di ricerca? Caso generale (inserimenti + cancellazione) Difficile da trattare Caso “semplice”: inserimenti in ordine casuale E' possibile dimostrare che l'altezza media è O(log n) Fattore di bilanciamento Il fattore di bilanciamento β(v) di un nodo v è la massima differenza di altezza fra i sottoalberi di v Esempio: albero perfetto: β(v)=0 per ogni nodo v In generale: Sono necessarie tecniche per mantenere bilanciato l'albero © Alberto Montresor

26 Algoritmi di bilanciamento
Alberi AVL (Adel'son-Vel'skii e Landis, 1962) β(v) ≤ 1 per ogni nodo v Bilanciamento ottenuto tramite rotazioni B-Alberi (Bayer, McCreight, 1972) β(v) = 0 per ogni nodo v Specializzati per strutture in memoria secondaria Alberi 2-3 (Hopcroft, 1983) Bilanciamento ottenuto tramite merge/split, grado variabile B-alberi binari (Andersson, 1993) Alberi Red-Black (Bayer, 1972) © Alberto Montresor

27 Esempio di rotazione v u u T3 T1 v T2 T3 T1 T2 © Alberto Montresor

28 Alberi Rosso-Nero (Red-Black Treee, RB-Tree)
Un albero Red-Black è un albero binario di ricerca in cui: Ogni nodo è colorato di rosso o di nero Le chiavi vengono mantenute solo nei nodi interni dell’albero Le foglie sono costituite da nodi nil Un albero Red-Black deve soddisfare i seguenti vincoli: La radice è nera Tutte le foglie sono nere Entrambi i figli di un nodo rosso sono neri Tutti i cammini semplici da ogni nodo u ad una delle foglie contenute nel sottoalbero radicato in u hanno lo stesso numero di nodi neri © Alberto Montresor

29 parent puntatore al padre
Alberi Red-Black Ogni nodo mantiene parent puntatore al padre left, right puntatori ai figli sinistro/destro color colore key, data chiave e dati Nodo Nil nodo sentinella il cui scopo è evitare di trattare diversamente i puntatori ai nodi dai puntatori nil al posto di un puntatore nil, si usa un puntatore ad un nodo Nil ne esiste solo uno, per risparmiare memoria nodo con figli Nil → foglia nell'ABR corrispondente © Alberto Montresor

30 Alberi Red-Black Definizione:
Il numero di nodi neri lungo ogni percorso da un nodo v (escluso) ad ogni foglia (inclusa) del suo sottoalbero è detto altezza nera di v, indicato b(v) Ben definito perché tutti i percorsi hanno lo stesso numero di nodi neri (regola 4) L’altezza nera di un albero Red-Black è pari all’altezza nera della sua radice © Alberto Montresor

31 Alberi Red-Black: esempio I
3. Entrambi i figli di un nodo rosso sono neri. Ma un nodo nero può avere figli neri! 30 15 70 60 85 20 10 5 Nil Nil Nil 50 65 80 90 Nil Nil 40 55 Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil © Alberto Montresor

32 Alberi Red-Black: esempio I
4. Ogni percorso da un nodo interno ad un nodo Nil ha lo stesso numero di nodi neri. Altezza nera di questo albero: 3 30 15 70 60 85 20 10 5 Nil Nil Nil 50 65 80 90 Nil Nil 40 55 Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil © Alberto Montresor

33 Alberi Red-Black: più colorazioni sono possibili
Albero Red-Black con 3 nodi neri lungo ogni percorso dalla radice ai nodi Nil 30 15 70 60 85 20 10 5 Nil Nil Nil 50 65 80 90 Nil Nil 40 55 Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil © Alberto Montresor

34 Alberi Red-Black: più colorazioni sono possibili
Albero Red-Black con 3 nodi neri lungo ogni percorso dalla radice ai nodi Nil 30 15 70 60 85 20 10 5 Nil Nil Nil 50 65 80 90 Nil Nil 40 55 Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil © Alberto Montresor

35 Alberi Red-Black: colorazione diversa, altezza nera diversa
Albero RB con 3 nodi neri lungo ogni percorso dalla radice ai nodi Nil 30 15 70 60 85 20 10 Nil Nil Nil Nil 50 65 80 90 Nil Nil Nil Nil Nil Nil Nil Nil © Alberto Montresor

36 Alberi Red-Black: colorazione diversa, altezza nera diversa
Stesso albero con 2 nodi neri lungo ogni percorso dalla radice ai nodi Nil 30 15 70 60 85 20 10 Nil Nil Nil Nil 50 65 80 90 Nil Nil Nil Nil Nil Nil Nil Nil © Alberto Montresor

37 Alberi Red-Black: questo albero può essere un albero RB?
30 15 70 60 20 85 10 Nil Nil Nil Nil Nil Nil Nil 50 40 55 Nil Nil Nil Nil © Alberto Montresor

38 Alberi Red-Black: questo albero può essere un albero RB?
Per vincolo sull'altezza nera ci possono essere al più 3 nodi neri lungo un percorso! 30 15 70 60 20 85 10 Nil Nil Nil Nil Nil Nil Nil 50 40 55 Nil Nil Nil Nil © Alberto Montresor

39 Alberi Red-Black: questo albero può essere un albero RB?
La radice è nera. Supponiamo che 60 e 70 siano entrambi neri. 30 15 70 60 85 20 10 Nil Nil Nil Nil Nil Nil Nil 50 Impossibile! Perché dovremmo violare vincolo 3 40 55 Nil Nil Nil Nil © Alberto Montresor

40 Alberi Red-Black: questo albero può essere un albero RB?
30 15 70 60 20 85 10 Nil Nil Nil Nil Nil Nil Nil 50 Quindi uno di questi due nodi deve essere rosso 40 55 Nil Nil Nil Nil © Alberto Montresor

41 Alberi Red-Black: questo albero può essere un albero RB?
Proviamo a colorare di rosso il nodo 60. Esiste un percorso con 2 nodi neri Esiste un percorso con 3 nodi neri 30 Impossibile per il vincolo sulla lunghezza 15 70 60 20 85 10 Nil Nil Nil Nil Nil Nil Nil 50 40 55 Nil Nil Nil Nil © Alberto Montresor

42 Alberi Red-Black: questo albero può essere un albero RB?
Proviamo a colorare di rosso il nodo 70 30 15 70 60 85 20 10 Nil Nil Nil Nil Nil Nil Nil 50 40 55 Esistono due percorsi con 2 soli nodi neri Nil Nil Nil Nil © Alberto Montresor

43 Alberi Red-Black: questo albero può essere un albero RB?
Per vincolo 4 e il vincolo 3, ci possono essere al più 2 nodi neri lungo un percorso! 30 15 70 60 20 85 10 Nil Nil Nil Nil Nil Nil Nil 50 40 55 Nil Nil Nil Nil © Alberto Montresor

44 Alberi Red-Black: questo albero può essere un albero RB?
Per vincolo 4 e il vincolo 3, ci possono essere al più 2 nodi neri lungo un percorso! 30 15 70 60 20 85 10 Nil Nil Nil Nil Nil Nil Nil 50 Questa sarebbe l’unica possibilità! 40 55 Impossibile! Perché dovremmo violare vincolo 1 Nil Nil Nil Nil © Alberto Montresor

45 Alberi Red-Black: questo albero può essere un albero RB?
Questo albero NON può essere un albero Red-Black! 30 15 70 60 85 20 10 Nil Nil Nil Nil Nil Nil Nil 50 40 55 Nil Nil Nil Nil © Alberto Montresor

46 Alberi Red-Black: Proprietà
Da cui segue: Le operazioni di ricerca hanno costo O(log n) Cosa succede per le operazioni di modifica? © Alberto Montresor

47 Durante la modifica di un albero Red-Black:
Inserimenti Durante la modifica di un albero Red-Black: è possibile che le condizioni di bilanciamento risultino violate. Quando le proprietà Red-Black vengono violate si può agire: modificando i colori nella zona della violazione; operando dei ribilanciamenti dell’albero tramite rotazioni: Rotazione destra Rotazione sinistra © Alberto Montresor

48 far diventare B figlio destro di x
Rotazione a sinistra p x Operazioni far diventare B figlio destro di x far diventare x il figlio sinistro di y far diventare y figlio di p, il vecchio padre di x A y B C © Alberto Montresor

49 far diventare B figlio destro di x
Rotazione a sinistra p y Operazioni far diventare B figlio destro di x far diventare x il figlio sinistro di y far diventare y figlio di p, il vecchio padre di x x C A B © Alberto Montresor

50 far diventare B figlio destro di x
Rotazione a sinistra p y Operazioni far diventare B figlio destro di x far diventare x il figlio sinistro di y far diventare y figlio di p, il vecchio padre di x x C A B © Alberto Montresor

51 Inserimento in alberi Red-Black
Ricerca della posizione usando la stessa procedura usata per gli alberi binari di ricerca Coloriamo il nuovo nodo di rosso Quale delle quattro proprietà può essere violata? Ripasso: la radice è nera i nodi Nil sono neri; se un nodo è rosso, allora entrambi i suoi figli sono neri; ogni percorso da un nodo interno ad una foglia ha lo stesso numero di nodi neri © Alberto Montresor

52 Come modificare la insertNode()
balanceTree(n) © Alberto Montresor

53 Inserimento in alberi Red-Black
Come sistemare: Ci spostiamo verso l’alto lungo il percorso di inserimento per ripristinare la proprietà 3 (red-black) spostando le violazioni verso l’alto rispettando il vincolo 4 (mantenendo l’altezza nera dell’albero) Al termine, coloriamo la radice di nero Nota Le operazioni di ripristino sono necessarie solo quando due nodi consecutivi sono rossi! © Alberto Montresor

54 balanceNode(Tree t) Nodi coinvolti n Il nodo inserito t Suo padre p
Suo nonno n Suo zio z n p z t © Alberto Montresor

55 Inserimento - 7 casi possibili
Caso 1: Nuovo nodo t non ha padre Primo nodo ad essere inserito o siamo risaliti fino alla radice Si colora t di nero Caso 2 Padre p di t è nero Nessun vincolo violato © Alberto Montresor

56 Inserimento - 7 casi possibili
Caso 1: Nuovo nodo t non ha padre Primo nodo ad essere inserito Si colora t di nero Caso 2 Padre p di t è nero Nessun vincolo violato © Alberto Montresor

57 Inserimento - 7 casi possibili
Caso 3 t rosso p rosso z rosso Se z è rosso, è possibile colorare di nero p, z, e di rosso n. Poiché tutti i cammini che passano per z e p passano per n, la lunghezza dei cammini neri non è cambiata. Il problema può essere ora sul nonno: violato vincolo (1), ovvero n può essere una radice rossa violato vincolo (3), ovvero n rosso può avere un padre rosso. Poniamo t = n, e il ciclo continua. © Alberto Montresor

58 Inserimento - 7 casi possibili
Caso 3 t rosso p rosso z rosso Se z è rosso, è possibile colorare di nero p, z, e di rosso n. Poiché tutti i cammini che passano per z e p passano per n, la lunghezza dei cammini neri non è cambiata. Il problema può essere ora sul nonno: violato vincolo (1), ovvero n può essere una radice rossa violato vincolo (3), ovvero n rosso può avere un padre rosso. Poniamo t = n, e il ciclo continua. © Alberto Montresor

59 Inserimento - 7 casi possibili
Caso 4a,4b t rosso p rosso z nero Si assuma che t sia figlio destro di p e che p sia figlio sinistro di n Una rotazione a sinistra a partire dal nodo p scambia i ruoli di t e p ottenendo il caso (5a), dove i nodi rossi in conflitto sul vincolo (3) sono entrambi figli sinistri dei loro padri I nodi coinvolti nel cambiamento sono p e t, entrambi rossi, quindi la lunghezza dei cammini neri non cambia © Alberto Montresor

60 Inserimento - 7 casi possibili
Caso 4a,4b t rosso p rosso z nero Si assuma che t sia figlio destro di p e che p sia figlio sinistro di n Una rotazione a sinistra a partire dal nodo p scambia i ruoli di t e p ottenendo il caso (5a), dove i nodi rossi in conflitto sul vincolo (3) sono entrambi figli sinistri dei loro padri I nodi coinvolti nel cambiamento sono p e t, entrambi rossi, quindi la lunghezza dei cammini neri non cambia © Alberto Montresor

61 Inserimento - 7 casi possibili
Caso 5a,5b t rosso p rosso z nero Si assuma che t sia figlio sinistro di p e p sia figlio sinistro di n Una rotazione a destra a partire da n ci porta ad una situazione in cui t e n sono figli di p Colorando n di rosso e p di nero ci troviamo in una situazione in cui tutti i vincoli Red-Black sono rispettati in particolare, la lunghezza dei cammini neri che passano per la radice è uguale alla situazione iniziale © Alberto Montresor

62 Inserimento - 7 casi possibili
Caso 5a,5b t rosso p rosso z nero Si assuma che t sia figlio sinistro di p e p sia figlio sinistro di n Una rotazione a destra a partire da n ci porta ad una situazione in cui t e n sono figli di p Colorando n di rosso e p di nero ci troviamo in una situazione in cui tutti i vincoli Red-Black sono rispettati in particolare, la lunghezza dei cammini neri che passano per la radice è uguale alla situazione iniziale © Alberto Montresor

63 All together, now! © Alberto Montresor

64 Inserimento in alberi Red-Black
16 30 Nil Nil 15 70 60 85 20 10 Nil Nil Nil Nil 50 65 80 90 40 55 Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil © Alberto Montresor

65 Inserimento in alberi Red-Black
p è nero, t è rosso 30 15 70 60 85 20 10 Nil Nil t 16 Nil 50 65 80 90 Nil Nil 40 55 Nil Nil Nil Nil Nil Nil Caso 2: nessun cambiamento Non cambia l’altezza nera di nessun nodo! Nil Nil Nil Nil © Alberto Montresor

66 Inserimento in alberi Red-Black:
x 42 30 Nil Nil 15 70 60 85 20 10 Nil Nil Nil Nil 50 65 80 90 40 55 Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil © Alberto Montresor

67 Inserimento in alberi Red-Black
p è rosso, t è rosso T 30 15 70 60 85 20 10 n Nil Nil Nil Nil 50 65 80 90 p z Vincolo 3 è violato 40 55 Nil Nil Nil Nil Nil Nil t Caso 3: z è rosso Nil 42 Nil Nil Nil Nil © Alberto Montresor

68 Inserimento in alberi Red-Black
p è rosso, t è rosso 30 15 70 60 85 20 10 n Nil Nil Nil Nil 50 65 80 90 p z Coloriamo di nero p Coloriamo di nero z Coloriamo di rosso n 40 55 Nil Nil Nil Nil Nil Nil t Nil 42 Nil Nil Nil Nil © Alberto Montresor

69 Inserimento in alberi Red-Black
p è rosso, t è rosso 30 15 70 60 85 20 10 t Nil Nil Nil Nil 50 65 80 90 Vincolo 3 è ripristinato Altri vincoli mai stati violati 40 55 Nil Nil Nil Nil Nil Nil Nil 42 Nil Nil Il padre del padre di t è il nuovo t Nil Nil © Alberto Montresor

70 Inserimento in alberi Red-Black
p è rosso, t è rosso 30 Caso 5a: z è nero n 15 70 p z 60 85 20 10 t Nil Nil Nil Nil 50 65 80 90 40 55 Nil Nil Nil Nil Nil Nil Vincolo 3 è nuovamente violato tra il nuovo t e suo padre Nil 42 Nil Nil Nil Nil © Alberto Montresor

71 Inserimento in alberi Red-Black
p è rosso, t è rosso 30 Caso 5a: z è nero 15 70 60 85 20 10 x Nil Nil Nil Nil 50 65 80 90 Coloriamo di nero t Coloriamo di rosso n Rotazione sinistra 40 55 Nil Nil Nil Nil Nil Nil Nil 42 Nil Nil Nil Nil © Alberto Montresor

72 Inserimento in alberi Red-Black
p è rosso, t è rosso 30 Caso 5a: z è nero 15 60 t 70 20 50 10 85 65 Nil Nil Nil 40 Nil 55 Vincolo 3 è ripristinato Altri vincoli mai stati violati Nil 42 Nil Nil Nil Nil 80 90 Nil Nil Nil Nil Nil Nil Abbiamo finito © Alberto Montresor

73 Inserimento in alberi Red-Black
30 15 60 x 70 20 50 10 85 65 Nil Nil Nil 40 Nil 55 Nil 42 Nil Nil Nil Nil 80 90 L’unico caso un cui si procede a ripristinare verso l’alto è il caso 3. Negli altri casi, si esce dal while e si termina Nil Nil Nil Nil Nil Nil © Alberto Montresor

74 Inserimento: complessità
Totale: O(log n) O(log n) per scendere fino al punto di inserimento O(1) per effettuare l'inserimento O(log n) per risalire e “aggiustare” (caso pessimo – solo nel caso 3) Esiste anche la possibilità di effettuare una “top-down” insertion Scendere fino al punto di inserimento, “aggiustando” l'albero mano a mano Effettuare l'inserimento in una foglia © Alberto Montresor

75 Cancellazione in RB L’algoritmo di cancellazione per alberi RB è costruito sull’algoritmo di cancellazione per alberi binari di ricerca Dopo la cancellazione si deve decidere se è necessario ribilanciare o meno Le operazioni di ripristino del bilanciamento sono necessarie solo quando il nodo cancellato è nero! (perché?) © Alberto Montresor

76 Se il nodo “cancellato” è rosso altezza nera invariata
Cancellazione in RB Se il nodo “cancellato” è rosso altezza nera invariata non sono stati creati nodi rossi consecutivi la radice resta nera Se il nodo “cancellato” è nero possiamo violare il vincolo 1: la radice può essere un nodo rosso possiamo violare il vincolo 3: se il padre e uno dei figli del nodo cancellato erano rossi abbiamo violato il vincolo 4: altezza nera cambiata L’algoritmo balanceDelete(T,t) ripristina la proprietà Red-Black con rotazioni e cambiamenti di colore: ci sono 4 casi possibili (e 4 simmetrici)! © Alberto Montresor

77 if u.color = BLACK then balanceDelete(T, t)
Cancellazione if u.color = BLACK then balanceDelete(T, t) © Alberto Montresor

78 Cancellazione - 8 casi possibili
© Alberto Montresor

79 Cancellazione - 8 casi possibili
© Alberto Montresor

80 Cancellazione in RB © Alberto Montresor

81 L’operazione di cancellazione è concettualmente complicata!
Cancellazione in RB L’operazione di cancellazione è concettualmente complicata! Ma efficiente: Dal caso (1) si passa ad uno dei casi (2), (3), (4) Dal caso (2) si torna ad uno degli altri casi, ma risalendo di un livello l’albero Dal caso (3) si passa al caso (4) Nel caso (4) si termina Quindi In altre parole, è possibile visitare al massimo un numero O(log n) di casi, ognuno dei quali è gestito in tempo O(1) © Alberto Montresor

82 Esercizio - visita non ricorsiva
Scrivere l’algoritmo non ricorsivo che effettua un attraversamento in ordine di un ABR Qual è la sua complessità Esercizio - limite inferiore Dimostrare: poiché l'ordinamento basato su confronti di n elementi è Ω(n log n), allora qualunque algoritmo basato su confronti per costruire un ABR è Ω(n log n) Esercizio - proprietà albero Dimostrate che se un nodo in un ABR ha due figli, allora il suo successore non ha un figlio sinistro e il suo predecessore non ha un figlio destro Esercizio L'operazione di cancellazione è commutativa? Nel senso che cancellare x e y oppure cancellare y e x produce lo stesso ABR? © Alberto Montresor


Scaricare ppt "Algoritmi e Strutture Dati"

Presentazioni simili


Annunci Google