Algoritmi e Strutture Dati

Documenti analoghi
Algoritmi e Strutture Dati

Alberi Rosso-Neri: definizione

Algoritmi e Strutture Dati

Alberi rosso neri. API a.a. 2013/2014 Gennaio 23, 2014 Flavio Mutti, PhD

Alberi binari. Alberi binari di ricerca

Alberi rosso-neri. Le operazioni sugli alberi binari di ricerca hanno complessità proporzionale all altezza h dell albero.

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4

Alberi Binari di Ricerca e Alberi Rosso-Neri

Alberi rosso-neri. Oltre ad essere alberi binari di ricerca, gli alberi rosso-neri soddisfano le seguenti proprietà:

algoritmi e strutture di dati

Dizionari. Realizzazione con alberi binari di ricerca. Alberi rosso-neri. Ugo de' Liguoro - Algoritmi e Seprimentazioni 03/04 Lez.

Algoritmi e Strutture Dati

Alberi binari di ricerca

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati. Alberi Bilanciati: Alberi Red-Black

Esercizio Per quali valori di t l albero in figura è un B-Albero legale?

Alberi di ricerca binari

Algoritmi e Strutture di Dati

Dizionari. Dizionari con gli alberi. Alberi binari di ricerca. Realizzazione con alberi binari di ricerca. Alberi rosso-neri.

In questa lezione Alberi rosso-neri

Alberi. Se x è il genitore di y, allora y è un figlio di x. Un albero binario è un albero in cui ogni nodo ha al massimo due figli.

Algoritmi e Strutture Dati

Alberi Binari di Ricerca: Definizione. Ricerca, inserimento, cancellazione, min, max, predecessore, successore.

Algoritmi e Strutture Dati. Alberi Bilanciati: Alberi Red-Black

Alberi binari: definizione e alcune proprietà

Alberi di ricerca. Alberi binari di ricerca. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)

Algoritmi e Strutture Dati

Multi-way search trees

Algoritmi, Strutture Dati e Programmi. UD 3.d: Strutture Dati Dinamiche Alberi

Algoritmi e Strutture Dati

Algoritmi e strutture dati

Alberi binari e alberi binari di ricerca

Algoritmi e Strutture Dati

Come aumentare gli alberi La soluzione di alcuni problemi algoritmici richiede la progettazione di una struttura dati appropriata.

Alberi binari e alberi binari di ricerca

Struttura di dati che può essere usata sia come dizionario, sia come coda con priorità

Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino. Prestazioni dei BST

Alberi Binari di Ricerca

Alberi di ricerca. Dizionari. Definizione. Alberi binari di ricerca (BST = binary search tree) Algoritmi e Strutture Dati

Un esempio: l ADT Dizionario (mutabile) Definizione. Alberi binari di ricerca (BST = binary search tree) search(chiave k) -> elem

Alberi binari e alberi binari di ricerca

Alberi. CORDA Informatica. A. Ferrari. Testi da. Marco Bernardo Edoardo Bontà. Dispense del Corso di. Algoritmi e Strutture Dati

Algoritmi e Strutture Dati. Alberi binari di ricerca

ricerca di un elemento, verifica dell appartenenza di un elemento

Alberi Binari di Ricerca

ABR di altezza logaritmica

Algoritmi e Strutture Dati. Capitolo 6 Il problema del dizionario

Fondamenti teorici e programmazione

Alberi binari di ricerca

RED BLACK TREE. Alessandro Maiuri. Corso di Linux Avanzato Prof. Marco Cesati Università degli studi di Roma Tor Vergata

Appunti Senza Pretese di Programmazione II: Alberi di Ricerca

Algoritmi e strutture dati

d. Cancellazione del valore 5 e. Inserimento del valore 1

Per semplicità eliminiamo le ripetizioni nell'albero.

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc

Esercizio 1. E vero che in un AVL il minimo si trova in una foglia o nel penultimo livello? FB = -1. livello 0 FB = -1. livello 1 FB = -1.

Implementazione dei timer ad alta risoluzione nel kernel Linux

Abbiamo già visto nel capitolo precedente come queste tre operazioni si possano implementare sulle strutture dati analizzate.

Università degli Studi di L Aquila Facoltà di Scienze M.F.N. Corso di Laurea in Informatica. Modulo di Laboratorio di Algoritmi e Strutture Dati

Strutture dati - Parte 2

ricerca di un elemento, verifica dell appartenenza di un elemento

Code a priorità. Progettazione di Algoritmi Matricole congrue a 1. Docente: Annalisa De Bonis

Indici multilivello dinamici (B-alberi e B + -alberi) Alberi di ricerca - 1. Un esempio. Alberi di ricerca - 3. Alberi di ricerca - 2

dizionari alberi bilanciati

Richiami di matematica discreta: grafi e alberi. Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

ALBERI : introduzione SOMMARIO ALBERI ALBERI. ALBERI: introduzione ALBERI BINARI: introduzione VISITE RICORSIVE DI ALBERI

Alberi Binari di Ricerca. Vittorio Maniezzo Università di Bologna

Alberi Binari di Ricerca

Esercitazione 6. Alberi binari di ricerca

Indici con gli alberi

Esercizi Capitolo 6 - Alberi binari di ricerca

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Organigramma Gerarchia. (Tree) Nessuna persona può avere più di un superiore Ogni persona può essere superiore di altre

Algoritmi e Strutture di Dati

Alberi binari di ricerca

Alberi binari. Ilaria Castelli A.A. 2009/2010. Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione

Alberi e alberi binari I Un albero è un caso particolare di grafo

ADT Coda con priorità

Algoritmi e Principi dell'informatica Seconda Prova in Itinere - 14 Febbraio 2014

ADT Dizionario. Ordered search table. Supponiamo che sia definita una relazione d'ordine totale sulle chiavi del dizionario D:

B-alberi. Strutture dati avanzate

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve

Informatica 3. LEZIONE 15: Implementazione di alberi binari - BST. Modulo 1: Implementazione degli alberi binari Modulo 2: BST

Laboratorio di Algoritmi

Alberi binari (radicati e ordinati) della radice Il padre del nodo 5 e del nodo 3

La cancellazione in un AVL

23/10/2016. gli alberi. alcune definizioni. un esempio. LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica.

Alberi binari. Alberi Albero binario Heap tree

dizionari dizionari introduzione al bilanciamento dizionari/2 alberi bilanciati ! ADT che supportano le seguenti operazioni

Alberi ed Alberi Binari di Ricerca

Albero binario. Alberi binari (introduzione) Terminologia. Alberi di ricerca binaria (BST)

Alberi binari di ricerca

Alberi e alberi binari I Un albero è un caso particolare di grafo

ESERCIZI DI ALGORITMI E STRUTTURE DATI 2 Parte 2. Livio Colussi Dipartimento di Matematica Pura ed Applicata Università di Padova

Gli heap. Sommario. Algoritmi e Programmazione Avanzata. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

Introduzione Implementazione (1)

Transcript:

Alberi Rosso-Neri (RB-Trees) Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino

Alberi Rosso-Neri Altezza nera di un red-black tree Un albero Rosso Nero (Red Black Tree, RB tree) è un albero binario di ricerca in cui ad ogni nodo viene associato un colore (rosso o nero) Ogni nodo di un RB tree ha quattro campi: key, left, right e p (come nel caso degli alberi di ricerca ordinari) + color Vincolando il modo in cui possiamo colorare i nodi lungo un qualsiasi percorso che va dalla radice ad una foglia, riusciamo a garantire che l abero sia approssivatimente bilanciato

Alberi bilanciati Altezza nera di un red-black tree (fattore di bilanciamento): sia T un albero binario e v un nodo dili T. Il fattore di bilanciamento (v) di v è definito come la differenza tra l altezza del suo sottoalbero sinistro e quella del suo sottoalbero destro (v) = altezza[left[v]] altezza[right[v]] (bilanciamento in altezza): un albero è bilanciato in altezza se, per ogni nodo v, (v) 1

Alberi Rosso-Neri: proprietà Altezza nera di un red-black tree Un RB tree è un albero binario di ricerca che soddisfa le seguenti proprietà (dette RB-properties): 1 ogni nodo è rosso o nero 2 la radice è nera 3 ogni foglia è nera 4 se un nodo è rosso, entrambi i suoi figli devono essere neri 5 per ogni nodo n, tutti i percorsi da n ad una qualsiasi delle sue foglie discendenti contengono lo stesso numero di nodi neri

Alberi Rosso-Neri: proprietà Altezza nera di un red-black tree (1) ogni nodo è rosso o nero (2) la radice è nera (3) ogni foglia (rappresentata dal Nil) è nera 26 17 41 14 21 30 47 10 16 18 28 38 è un abbreviazione per Nil

Alberi Rosso-Neri: proprietà Altezza nera di un red-black tree (4) se un nodo è rosso entrambi i suoi figli sono neri 26 17 41 14 21 30 47 10 16 18 28 38

Alberi Rosso-Neri: proprietà Altezza nera di un red-black tree (5) per ogni nodo n, tutti i percorsi da n ad una qualsiasi delle sue foglie discendenti contengono lo stesso numero di nodi neri 26 17 41 14 21 30 47 10 16 18 28 38

Alberi Rosso-Neri: un esempio Altezza nera di un red-black tree 26 17 41 14 21 30 47 10 16 18 28 38 Figura: Una versione semplificata (foglie omesse)

Altezza nera di un RB tree Altezza nera di un red-black tree Sia T un RB tree. L altezza nera bh(x) di un nodo x di T è pari al numero di nodi neri (x escluso) che si incontrano lungo un cammino da x ad una delle sue foglie discendenti. L altezza nera dell albero è definita come l altezza nera della sua radice r, ossia bh(t) = bh(r) N.B. per la proprietà 5, il concetto di altezza nera è ben definito, in quanto tutti i percorsi che scendono da un nodo contengono lo stesso numero di nodi neri

Alberi Rosso-Neri: altezza nera Altezza nera di un red-black tree 26 3 2 17 41 2 2 14 1 21 2 30 1 47 1 10 1 16 1 18 1 28 1 38

Altezza nera: alcune proprietà Altezza nera di un red-black tree Sia x un nodo di un RB tree e p il padre di x (ossia, p = p[x]). Allora: 1 x rosso implica bh(x) = bh(p); 2 x nero implica bh(x) = bh(p) 1; 3 bh(x) bh(p) 1.

Calcolo dell altezza nera di x Altezza nera di un red-black tree bh(x) = 0 x bh(x) = h + 1 x bh(x) = h h L (a) R h h L (b) R h x bh(x) = h x bh(x) = h h L R h 1 (c) h 1 L (d) R h

Un paio di risultati utili Altezza nera di un red-black tree Lemma 1: Il numero di nodi interni di un sottoalbero radicato in x è maggiore o uguale di 2 bh(x) 1. Teorema 1: L altezza massima di un RB tree con n nodi interni è 2 log(n + 1).

Un paio di risultati utili Altezza nera di un red-black tree Lemma 1: Il numero di nodi interni di un sottoalbero radicato in x è maggiore o uguale di 2 bh(x) 1 Proof: Procediamo per induzione sull altezza h di x. Denotiamo con int(x) il numero dei nodi interni del sottoalbero radicato in x. h = 0 e quindi x è una foglia (i.e. x = Nil). In questo caso int(x) = 0 e bh(x) = 0. Quindi: int(x) = 0 2 bh(x) 1 = 2 0 1 = 0

Un paio di risultati utili Altezza nera di un red-black tree h > 0. In questo caso x ha due figli l = left[x] ed r = right[x] (non entrambi Nil). Inoltre bh(l), bh(r) bh(x) 1. Per ipotesi induttiva: int(l) 2 bh(l) 1 2 bh(x) 1 1 e int(r) 2 bh(r) 1 2 bh(x) 1 1. Allora: int(x) 1 + int(l) + int(r) 1 + (2 bh(x) 1 1) + (2 bh(x) 1 1) = 2 2 bh(x) 1 1 = 2 bh(x) 1

Un paio di risultati utili Altezza nera di un red-black tree Teorema 2: L altezza massima di un RB tree con n nodi interni è 2log(n + 1). Proof: sia h l altezza dell albero per la un Prop. 4, almeno la metà dei nodi in un qualsiasi cammino dalla radice ad una foglia (esclusa la radice) devono essere neri (dopo ogni nodo rosso c è almeno un nodo nero) di conseguenza, bh(t) = bh(root) h/2 Per il Lemma 1, n = int(t) 2 bh(t) 1 2 h/2 1, ossia 2 h/2 n + 1 Allora: h/2 log(n + 1) e h 2log(n + 1)

Sono delle operazioni di ristrutturazione locale dell albero

Vediamo nel dettaglio le operazioni di inserimento e cancellazione di un nodo Le operazioni Search, Minimum e Maximum, Successor e Predecessor possono essere implementate esattamente come per gli alberi binari di ricerca ordinari

di un nodo z Come per gli alberi binari di ricerca, l inserimento di un nodo z in un RB tree cerca un cammino dalla root dell albero fino al nodo p che diventerà suo padre

di un nodo z Come per gli alberi binari di ricerca, l inserimento di un nodo z in un RB tree cerca un cammino dalla root dell albero fino al nodo p che diventerà suo padre Una volta identificato p, z viene aggiunto come figlio sinistro (se key[z] < key[p]) o destro (se key[z] > key[p]) di p e colorato di rosso

di un nodo z Come per gli alberi binari di ricerca, l inserimento di un nodo z in un RB tree cerca un cammino dalla root dell albero fino al nodo p che diventerà suo padre Una volta identificato p, z viene aggiunto come figlio sinistro (se key[z] < key[p]) o destro (se key[z] > key[p]) di p e colorato di rosso Questo inserimento può causare una violazione della: proprietà 2, se z viene inserito in un albero vuoto proprietà 4, se z viene aggiunto come figlio di un nodo rosso

di un nodo z Come per gli alberi binari di ricerca, l inserimento di un nodo z in un RB tree cerca un cammino dalla root dell albero fino al nodo p che diventerà suo padre Una volta identificato p, z viene aggiunto come figlio sinistro (se key[z] < key[p]) o destro (se key[z] > key[p]) di p e colorato di rosso Questo inserimento può causare una violazione della: proprietà 2, se z viene inserito in un albero vuoto proprietà 4, se z viene aggiunto come figlio di un nodo rosso La procedura RB-Insert-Fixup(T,z) (dove z è il nodo che da luogo alla violazione) ci consente di ripristinare le proprietà dei RB trees

RB-Insert-Fixup(T, z) La RB-Insert-Fixup(T,z) ripristina: la prop 2 colorando la root z (rossa) di nero la prop 4, eseguendo delle rotazioni e ricolorazioni su z.

RB-Insert-Fixup(T, z) La RB-Insert-Fixup(T,z) ripristina: la prop 2 colorando la root z (rossa) di nero la prop 4, eseguendo delle rotazioni e ricolorazioni su z. Decidiamo cosa fare confrontando il colore di z (il nodo che viola la proprietà 4) con quello di suo zio y.

RB-Insert-Fixup(T, z) La RB-Insert-Fixup(T,z) ripristina: la prop 2 colorando la root z (rossa) di nero la prop 4, eseguendo delle rotazioni e ricolorazioni su z. Decidiamo cosa fare confrontando il colore di z (il nodo che viola la proprietà 4) con quello di suo zio y. Distinguiamo tre possibili casi: 1 lo zio y di z è rosso 2 lo zio y di z è nero e z è un figlio destro 3 lo zio y di z è nero e z è un figlio sinistro

Caso 1: lo zio y di z è rosso C = C new z A p[z] D y A D B z δ ǫ B δ ǫ Figura: in questo caso, y e p[z] diventano neri e p[p[z] diventa rosso. Inoltre p[p[z] diventa il nuovo z dato che il suo cambiamento di colore potrebbe aver causato una violazione della proprietà 4

Caso 2: lo zio y di z è nero e z è un figlio sinistro C = B B p[z] D y A C A z δ ǫ D δ ǫ Figura: B (i.e. p[z]) diventa nero; C (i.e. p[p[z]]) diventa rosso; ruotiamo C a destra

Caso 3: lo zio y di z è nero e z è un figlio destro C = C A p[z] D y B D B z δ ǫ A new z δ ǫ Figura: viene ricondotto al caso 2 ruotando A, i.e. p[z] a sinistra. A questo punto non ci resta che colorare C di rosso, B di rosso e ruotare C a destra

Caso 3: lo zio y di z è nero e z è un figlio destro Attenzione alle simmetrie!!! C = D B y D p[z] C E E z B δ ǫ δ ǫ Figura: D (i.e. p[z]) diventa nero; C (i.e. p[p[z]]) diventa rosso; ruotiamo C a sinistra

Caso 2: lo zio y di z è nero e z è un figlio sinistro C = C B y E p[z] B D D z ǫ E new z δ δ ǫ Figura: ruotiamo E a destra ed E diventa il nuovo z. Osservate che, dopo la rotazione, z è un figlio destro di un nodo D che a sua volta è un figlio destro

Analisi RB-Insert-Fixup(T,z) richiede un tempo O(log 2 n) Di conseguenza, anche RB-Insert(T,z) richiede un tempo O(log 2 n)

: un esercizio 41 41 38 Figura: inserimento di 41 e 38 41 38 38 31 41 31 Figura: inserimento di 31

: un esercizio 38 38 38 31 41 31 41 31 41 12 12 Figura: inserimento di 12 12

: un esercizio 38 38 38 31 41 31 41 19 41 12 19 12 31 19 12 Figura: inserimento di 19

: un esercizio 38 38 19 41 19 41 12 31 12 31 8 8 Figura: inserimento di 8

di un nodo con due figli Osservazione: assumiamo sempre di dover eliminare un nodo che ha al più un figlio Infatti, nel caso in cui il nodo z da eliminare ha due figli, possiamo sostituire la chiave di z con quella di y = Tree-Successor(T,z) (il successore di z), e poi rimuovere y Poichè z è un nodo con due figli, il suo successore y è il nodo più a sinistra del sottoalbero destro; (ha al più il figlio destro)

di un nodo con al più un figlio Sia z il nodo da cancellare Siano, inoltre, x l unico figlio e p il padre di z (se z è una foglia, allora x è Nil). Per eliminare z, eseguiamo i seguenti passi: 1. inanzitutto, rimuoviamo z collegando p con x (p diventa il padre di x ed x diventa il figlio di p); 2. z era rosso: possiamo semplicemente terminare perchè l eliminazione di z non causa violazioni delle RB-properties 3. z era nero: potremmo causare una violazione della proprietà 5

Eliminazione: z rosso p p z x x Figura: Eliminare un nodo rosso non causa violazioni delle RB-properties

Eliminazione: z nero e suo figlio x rosso Se z è nero, suo padre p può essere sia nero che rosso (indichiamo questo fatto colorando p di grigio) p p z x x Figura: Il figlio rosso di z acquisisce un extra credito diventando nero

Eliminazione: z nero e suo figlio x nero p p z x x Figura: Il figlio nero di z acquisisce un extra credito diventando doppio nero. Eseguiamo RB-Delete-FixUp(T, x) per ripristinare la proprietà 5

di un nodo con al più un figlio Per ristabilire la proprietà 5 nel caso di eliminazione di un nodo z nero), si attribuisce al nodo x (figlio di z) un extra credito Questo significa che se x è rosso lo coloriamo di nero, mentre se x è gia nero assume un colore fittizio detto doppio nero, che serve per ricordarci che abbiamo collassato due nodi neri in uno. Nel calcolo della black-height un nodo doppio nero conta due volte Infine, eseguiamo la procedura RB-Delete-Fixup(T,x) che spingerà, mediante rotazioni e ricolorazioni, l extra credito verso la radice dove verrà ignorato Se lungo il cammino verso la radice incontriamo un nodo rosso, esso sarà semplicemente colorato di nero

RB-Delete-Fixup(T,x) Nel ripristinare la proprietà 5, teniamo conto di una serie di casi (ottenuti confrontando il colore di x con quello di suo fratello w) 1. w è nero ed ha almeno un figlio rosso. Possiamo distinguere ulteriori due sottocasi: 1.1 il figlio destro di w è rosso 1.2 il figlio sinistro di w è rosso e quello destro è nero 2. w è nero ed ha entrambi i figli neri. Anche in questo caso distinguiamo due possibili sottocasi 2.1 il nodo p[x] (che è anche il padre di w) è rosso 2.2 il nodo p[x] è nero 3. w è rosso

Caso 1.1: w nero e figlio destro di w rosso = B D A x D w B E C E A C ǫ ζ δ ǫ ζ δ Figura: scambiamo il colore del p[x] con quello di w; poi, ruotiamo il p[x] a sinistra 1 abbiamo aggiunto un nodo nero a sinistra e quindi possiamo togliere il doppio nero da x) 2 eliminato un livello nero a destra; coloriamo E di nero

Caso 1.1: w nero e figlio destro di w rosso B D A x D w B E C E A C ǫ ζ δ ǫ ζ δ Figura: eliminamo l extra nero rappresentato da x colorando B (il padre di x) ed E (il figlio destro di w) di nero e ruotando B a sinistra

RB-Delete-Fixup, caso 1.2: w è nero, il figlio sinistro di w è rosso e quello destro è nero B B A x D w A x C new w C E D δ ǫ ζ δ E ǫ ζ Figura: questo caso è trasformato nel caso 1.1 colorando C (i.e. left[w]) di nero, D (i.e. w) di rosso e ruotando D a destra

RB-Delete-Fixup, caso 2.1: w ha entrambi i figli neri e p[x] è rosso B B A x D w A D C E C E δ ǫ ζ δ ǫ ζ Figura: eliminamo il doppio nero del nodo x togliendo un credito nero sia ad A che a D (quindi A diventa nero ordinario e D diventa rosso) e facendo acquisire un extra credito a B (il padre di x) che da rosso diventa nero

RB-Delete-Fixup, caso 2.2: w ha entrambi i figli neri e p[x] è nero B B new x A x D w A D C E C E δ ǫ ζ δ ǫ ζ Figura: è simile al caso 3.1, di nuovo togliamo un credito nero sia ad A che a D (A diventa nero ordinario e D diventa rosso) e facendo acquisire un extra credito a B che da nero diventa doppio-nero. A questo punto B diventa il nuovo x

RB-Delete-Fixup: caso 3 B D A x D w B E C E x A new w C ǫ ζ δ ǫ ζ δ Figura: viene trasformato in uno dei casi precedenti colorando D (i.e. w) di rosso, B (i.e. p[x]) di nero e ruotando il padre di x a sinistra

Analisi RB-Delete-Fixup(T,x) richiede un tempo O(log 2 n) Di conseguenza, anche RB-Delete(T,x) richiede un tempo O(log 2 n)

: un esempio 38 38 19 41 19 41 12 31 12 31 8 Figura: cancellazione di 8

: un esempio 38 38 38 19 41 19 41 19 41 12 31 31 Figura: cancellazione di 12 31

: un esempio 38 38 19 41 31 41 31 Figura: cancellazione di 19

: un esempio 38 38 38 38 31 41 41 41 41 Figura: cancellazione di 31 41 Figura: cancellazione di 38