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

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

Algoritmi e Strutture di Dati

algoritmi e strutture di dati

Indici con gli alberi

Algoritmi e Strutture Dati

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

Alberi Binari di Ricerca e Alberi Rosso-Neri

Algoritmi e Strutture Dati

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

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

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

Algoritmi e Strutture Dati

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4

Alberi Rosso-Neri: definizione

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.

Alberi binari. Alberi binari di ricerca

ricerca di un elemento, verifica dell appartenenza di un elemento

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

Alberi di ricerca binari

Multi-way search trees

Alberi. Definizione, realizzazione e algoritmi elementari. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 7

In questa lezione Alberi binari di ricerca

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

In questa lezione Alberi rosso-neri

Alberi binari di ricerca

Alberi binari e alberi binari di ricerca

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

Alberi binari e alberi binari di ricerca

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

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve

Lezione 9 Alberi binari: visite ed esercizi

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

Lezione 7 Alberi binari: visite e alberi di ricerca

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE

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

ADT ALBERO BINARIO (tree)) ADT ALBERO BINARIO

Esercizi Capitolo 6 - Alberi binari di ricerca

Problemi di ordinamento

Algoritmi e Strutture Dati. Alberi binari di ricerca

ALGORITMI E STRUTTURE DATI

ricerca di un elemento, verifica dell appartenenza di un elemento

Prova di Algoritmi e s.d. (1o anno) 17 Settembre TESTO e RISPOSTE

Strutture dati Alberi binari

Esercizi BST - AVL. E. Fachini

QuickSort Università degli Studi di Milano

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

Algoritmi e strutture dati

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

Per semplicità eliminiamo le ripetizioni nell'albero.

Espressioni aritmetiche

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

Alberi Bilanciati di Ricerca

Alberi binari e alberi binari di ricerca

B-alberi. Strutture dati avanzate

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Strutture dati - Parte 2

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

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

Algoritmi e Strutture Dati

dizionari alberi bilanciati

Algoritmi e Strutture Dati. Capitolo 6 Il problema del dizionario

Heap binomiali. Oltre alle precedenti operazioni fondamentali degli heap riunibili, sugli heap binomiali definiremo anche le due ulteriori operazioni:

Algoritmi e Strutture di Dati

Esercizi parte 3. La classe ArrayBinTree dovra implementare, tra le altre, l operazione seguente: padre: dato un nodo, restituire l indice del padre.

Heap Ordinamento e code di priorità. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 9

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

Esercizi su programmazione ricorsiva 3

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

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

In questa lezione Alberi binari di ricerca: la cancellazione

Esercitazione su Albero Binario

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

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

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

Esercizi su alberi binari

alberi binari di ricerca (BST)

Algoritmi e Strutture Dati. Alberi di Ricerca Alberi Bilanciati I (Alberi AVL)

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

Prova di Algoritmi e s.d. (1o anno) 7 Febbraio TESTO e RISPOSTE

Alberi ed Alberi Binari di Ricerca

Appunti Senza Pretese di Programmazione II: Alberi di Ricerca

Algoritmi e strutture dati

Il numero dei nodi al livello i è 1, per 0 i altezza L altezza h di un albero completamente sbilanciato con n nodi è h = n-1

Lezione 10 Alberi e gestione delle eccezioni

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

Esercizi su ABR. Prof. E. Fachini - Intr. Alg.!1

Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z

Algoritmi e Strutture di Dati

Introduzione Implementazione (1)

ABR di altezza logaritmica

alberi completamente sbilanciati

Ricerca con una chiave k Assumiamo l esistenza di un descrittore albero con i campi: albero.radice (=null per l albero vuoto) albero.dimensione (=0 pe

Alberi. Alberi: Esempio di utilizzo

Esempi. Albero di interi. Struttura che non è un albero!

In questa lezione. Costruire un max-heap. [CLRS01] cap. 6 par Prof. E. Fachini - Intr. Alg.

Alberi Binari di Ricerca

F(<M>, <w>) = 1, se quando M opera su w esistono due configurazioni di M. 0 altrimenti. Parte b

Un albero completamente bilanciato o pieno (full) alberi completamente sbilanciati. Un albero binario completo

Transcript:

Dizionari Realizzazione con alberi binari di ricerca. Alberi rosso-neri. Dizionari con gli alberi Astro, Dado, Lana, Mela, Tasto,Vela, Zappa Astro Mela Tasto Zappa Alberi binari di ricerca Gli alberi binari di di ricerca sono etichettati in in modo che i i sottoalberi sinistro e destro siano di di ricerca, e la la radice maggiorizza propriamente tutte le le etichette a sinistra ed ed è maggiorizzata da da tutte quelle a destra label( t) = { k} label(left( t)) label(right( t)) se t = Nil se t = ConsTree( k, l, r) t è di ricerca se è uoto oppure se t = ConsTree(k, l, r) e l, r sono di ricerca max(label(l)) < k < min(label(r))

Un albero di ricerca 15 6 18 3 7 17 20 2 4 13 9 ADT degli alberi binari di ricerca Tipi: Ke, Stree Operatori: Nil: oid Stree ConsTree: Ke, Stree, Stree Stree Left, Right: Stree Stree Label: Stree Ke SetLabel: Ke, Stree Stree SetLeft, SetRight: Stree, Stree Stree ADT degli alberi binari di ricerca Label(ConsTree(k, l, r)) = k Left(ConsTree(k, l, r)) = l, Right(ConsTree(k, l, r)) = r ConsTree(k, l, r) Nil SetLabel(k, t) = t Pre: t Nil, Post: Label(t ) = k, Left(t ) = Left(t), Right(t ) = Right(t) SetLeft(t, t) = t, Pre: t Nil, Post: Label(t ) = Label(t), Left(t ) = t, Right(t ) = Right(t)

Ricerca Search (k, t) // Post: ritorna true sse k label(t) if t = Nil then return false else if Label(t) = k then return true else if k < Label(t) then return Search(k, Left(t)) else return Search(k, Right(t)) Minimo Minimum (t) // Pre: t Nil // Post: ritorna il minimo in label(t) // Oss. Il minimo in t è il nodo più a sinistra if Left(t) = Nil then return Label(t) else return Minimum (Left(t)) Successore Successor (15, t) = 17 = Minimum(Left(t)) 15 6 18 3 7 17 20 2 4 13 9

Successore Successor (13, t) = 15 15 6 18 3 7 17 20 2 4 13 9 Successore Successor (k, t) // Pre: k label(t) // Post: ritorna il minimo in label(t) {k : k k} se esiste // + altrimenti return Succ(k, +, t) Succ(k, x, t) // Post: ritorna il minimo in label(t) {k : k k} se esiste // x altrimenti Successore Succ(k, x, t) // Pre: k label(t) // Post: ritorna il minimo in label(t) {k : k k} se esiste // x altrimenti if Label(t) = k then if Right(t) Nil then return Minimum(Right(t)) else return x else if k < Label(t) then return Succ (k, Label(t), Left(t)) else // Label(t) < k return Succ(k, x, Right(t))

Inserimento Insert (k, t) // Post: trasforma t nel più piccolo albero di ricerca t t.c. // t t e label(t ) = label(t) {k} t t se t è un if t = Nil then return ConsTree(k, Nil, Nil) albero che si else if Label(t) = k then return t ottiene da t omettendo un else if k < Label(t) then sottoalbero SetLeft(Insert(k, Left(t)), t), return t else SetRight(Insert(k, Right(t)), t), return t Un albero di ricerca 15 Gli inserimenti aengono sempre sulle foglie 6 18 3 7 17 20 2 4 13 5 9 Chiae inserita Cancellazione Delete (k, t) // Post: trasforma t nel più grande albero di ricerca t t.c. // t t e label(t ) = label(t) {k} if t = Nil then return t else if Label(t) = k then /* canc. in radice: casi di base */ else if k < Label(t) then SetLeft(Delete(k, Left(t)), t), return t else SetRight(Delete(k, Right(t), t), return t

Cancellazione della radice Caso 1: Caso 3: Caso 2: Cancellazione della radice Caso 1: if Left(t) = Nil then return Rigth(t) Cancellazione della radice Caso 2: else if Right(t) = Nil then return Left(t)

Cancellazione della radice Caso 3: else m (m, t ) DelMax(Left(t)) SetLabel(m, t) // rimpiazza con m l etichetta della radice SetLeft (t, t) // rimpiazza Left(t) con t = Left(t) {m} return t Cancellazione del massimo DelMax (t) // Pre: t Nil // Post: ritorna (m, t ), m = max (label(t)), // t è l albero ottenuto da t rimuoendo m if Right(t) = Nil then return (Label(t), Left(t)) else (m, t ) DelMax(Right(t)) SetRight(t, t) return (m, t) O m Alberi bilanciati O(log n) Qual è il il caso peggiore? Cosa sappiamo del caso medio? Search, Insert e Delete hanno complessità O(h) doe h è l altezza dell albero Esistono alberi (completi, quasi completi) la cui altezza h è O(log n), doe n è la cardinalità Potremmo definire bilanciati gli alberi con questa relazione altezza/cardinalità

Alberi (s)bilanciati Se inseriamo n chiai in un albero di ricerca inizialmente uoto in ordine crescente cosa si ottiene? a 1 h = n a 2 O a n Alberi bilanciati Se le n! possibili permutazioni di n chiai distinte sono equiprobabili, il tempo medio di Search, Insert e Delete è effettiamente Θ(log n) ma Sarà meglio ristrutturare! Alberi Rosso-Neri (Red-Black) Un Un albero binario di di ricerca è Rosso-Nero se se i i ertici sono rossi o neri e se: se: 1. 1. (Nero) le le foglie (NIL) sono nere 2. 2. (Rosso) ogni ertice rosso ha ha due figli neri 3. 3. (Ramo) il il numero dei dei nodi neri è uguale su su ogni ramo Per semplicità terminologica consideriamo foglia l albero uoto: i ertici interni sono allora i ertici tout court

Un albero Rosso-Nero 15 6 18 7 17 20 15) = numero di ertici (interni) neri sui rami dell albero con radice in 15 = 2 22 Il teorema degli alberi RB Teorema. L altezza di di un un albero RB di di n ertici interni (per non contare le le foglie NIL) è h 2 log log (n (n + 1) 1) Se = root(t) ed n il numero dei ertici interni di t allora: n 2 Proa: per induzione su. Il teorema degli alberi RB Teorema. L altezza di di un un albero RB di di n ertici interni (per non contare le le foglie NIL) è h 2 log log (n (n + 1) 1) = 0 t = n 2 n = 0 = 2 0 1

Il teorema degli alberi RB Teorema. L altezza di di un un albero RB di di n ertici interni (per non contare le le foglie NIL) è h 2 log log (n (n + 1) 1) > 0 u = root( left( t)), w = root( right( t)) n 2 t = oppure t = bh ( u) = w) = u) = w) = Il teorema degli alberi RB Teorema. L altezza di di un un albero RB di di n ertici interni (per non contare le le foglie NIL) è h 2 log log (n (n + 1) 1) > 0 u = root( left( t)), w = root( right( t)) n 2 t = oppure t = n = int( t) = int( left( t)) + int( right( t)) + 1 2 = 2 + 2 + 1 ip.ind. Il teorema degli alberi RB Teorema. L altezza di di un un albero RB di di n ertici interni (per non contare le le foglie NIL) è h 2 log log (n (n + 1) 1) n 2 Regole (Rosso) e (Cammino) h 2 quando = root( t) : n 2 h / 2 n 2 h / 2 n + 1 2 h / 2 2log( n + 1) h

Inserimento in un albero RB L inserimento in un albero di ricerca aiene sempre sulle foglie Inserimento in un albero RB Come è possibile aggiungere ertici mantenendo l inariante di struttura? Inserimento in un albero RB Deo colorare il nuoo ertice, e scelgo il rosso: la regola (Cammino) è sala, ma la regola (Rosso) è iolata La regola (Rosso) è locale, ma (Cammino) è globale: dunque più difficile da recuperare

Inserimento in un albero RB x u Caso 1 w Ricolorando u, x, w la regola (Cammino) è sala; la regola (Rosso) è soddisfatta in u ma non in u x w Vero, ma è più icino alla radice di! Ricolorazione Caso 1: se il padre u e lo zio w di sono rossi (e dunque il nonno x è nero) allora colora di rosso il nonno e di nero il padre e lo zio Post: l altezza nera dell albero è immutata, ma può darsi che ora il nonno sia figlio rosso di un altro ertice rosso Inserimento in un albero RB LR() u w z Poiché è figlio destro del nodo rosso, ma lo zio z è nero, ruotiamo a sinistra Caso 2 u w z Ora è ancora anomalo, ma più prossimo alla radice

Rotazione x x γ RightRotate(, t) α α β LeftRotate(x, t) β γ La rotazione sinistra/destra presera la proprietà di essere un albero di ricerca Rotazione: caso 2 Caso 2: se è figlio destro (sinistro) del ertice rosso, ma lo zio z è nero, ruota a sinistra (destra). Post: l altezza nera dell albero è immutata, ma è padre rosso di un ertice rosso (cioè ) Inserimento in un albero RB Caso 3 r w RR(r) Non potendo ricolorare subito, prima ruotiamo a destra il padre r di, poi ricoloriamo r di rosso e di nero w r Finalmente un albero RB

Rotazione: caso 3 Caso 3: se (rosso) ha un figlio sinistro (destro) rosso allora: 1. Se è la radice, allora colorala di nero 2. Se non è la radice allora ruota a destra (sinistra) il padre r di, e colora di nero ed r di rosso Post: l altezza nera dell albero è immutata, e l anomalia di rispetto alla regola (Rosso) è risolta Realizzazione di un albero RB parent ke color left right Realizzazione delle rotazioni x x γ α LeftRotate(, t) α β w.right,.right w.left if w.left Nil then w.left.parent w.parent.parent if.parent = Nil then t.root w else if =.parent.left then.parent.left w else.parent.right w w.left,.parent w LeftRotate(x, t) β γ

Analisi della complessità Insert(k, t) inserisci k in t come per gli alberi binari di ricerca O(h) ristruttura ricolorando e con rotazioni da una foglia erso la radice O(h) O ( h) + O( h) = O( h) = O(log n) Analoghe considerazioni algono per Delete, mentre Search è oiamente O(h) = O(log n) Fine