algoritmi e strutture di dati

Documenti analoghi
Algoritmi e Strutture di Dati

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

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

Algoritmi e Strutture di Dati

In questa lezione Alberi binari di ricerca

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

Algoritmi e Strutture Dati

In questa lezione Alberi rosso-neri

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

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

Alberi Binari di Ricerca e Alberi Rosso-Neri

Algoritmi e Strutture Dati

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

Alberi binari. Alberi binari di ricerca

Algoritmi e Strutture Dati

Alberi Rosso-Neri: definizione

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

Strutture dati - Parte 2

Algoritmi e strutture dati

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

In questa lezione Alberi binari di ricerca: la cancellazione

Problemi di ordinamento

Algoritmi e Strutture Dati

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

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

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

Alberi binari di ricerca

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

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.

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Algoritmi e Strutture Dati. Alberi binari di ricerca

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

Esercizi su alberi binari

Strutture dati Alberi binari

ABR di altezza logaritmica

Fondamenti teorici e programmazione

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

In questa lezione. Code di priorità. [CLRS01] cap. 6 da pag. 114 a pag Prof. E. Fachini - Intr. Alg. lunedì 17 settembre 2012

Algoritmi e strutture dati

Alberi binari di ricerca

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

Alberi di ricerca binari

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

Alberi ed Alberi Binari di Ricerca

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

Algoritmi e Strutture di Dati

Strutture Dati. Parte II: alberi e grafi

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

Algoritmi e Strutture Dati. Capitolo 6 Il problema del dizionario

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Multi-way search trees

ricerca di un elemento, verifica dell appartenenza di un elemento

dizionari alberi bilanciati

Algoritmi e Strutture di Dati

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

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.

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

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve

Code a priorità Una coda a priorità è una struttura dati astratta che permette di rappresentare un insieme di elementi su cui è definita una

Alberi binari di ricerca

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Struttura dati Dizionario

Alberi binari e alberi binari di ricerca

algoritmi e strutture di dati

Note per la Lezione 4 Ugo Vaccaro

Per semplicità eliminiamo le ripetizioni nell'albero.

L albero e un tipo astratto di dati usato per rappresentare relazioni gerarchiche.

Esercizi BST - AVL. E. Fachini

Heap e code di priorità

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

Algoritmi e Strutture Dati. HeapSort

Alberi binari e alberi binari di ricerca

INTRODUZIONE AGLI ALGORITMI 25 Giugno 2018 Prof.ssa Fachini/Prof.ssa Petreschi I PARTE

In questa lezione. Alberi binari: [CLRS09] cap. 12 per la visita inorder. visite e esercizi su alberi binari. Prof. E. Fachini - Intr. Alg.

Alberi Binari di Ricerca

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

Alberi binari: definizione e alcune proprietà

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

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

Esercizi di Algoritmi e Strutture Dati

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

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

Algoritmi e Strutture Dati. HeapSort

heap concetti ed applicazioni

QuickSort Università degli Studi di Milano

Strutture dati. (parte II: alberi e grafi)

Esercitazione su Albero Binario

Lezione 6: 12 Novembre 2013

alberi binari di ricerca (BST)

Spesso sono definite anche le seguenti operazioni:

Algoritmi e Strutture di Dati

Esercizio. 2 i=i*2) j=j*2)

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

K-d-tree A L B E R T O B E L U S S I A N N O A C C A D E M I C O

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

Algoritmi e Strutture Dati

Transcript:

algoritmi e strutture di dati alberi rosso-neri m.patrignani contenuto definizione di alberi rosso-neri proprietà degli alberi rosso-neri complessità delle operazioni elementari rotazioni inserimenti e cancellazioni 1

motivazioni un dizionario realizzato con un albero binario di ricerca consente operazioni efficienti quando l albero è bilanciato alberi binari di ricerca (complessità nel caso peggiore) operazione ricerca inserimento cancellazione sbilanciati Θ(n) Θ(n) Θ(n) bilanciati Θ(lg n) Θ(lg n) Θ(lg n) ha senso investire delle risorse per mantenere l albero bilanciato albero bilanciato definiamo come bilanciato un albero in cui la lunghezza del cammino più lungo tra la radice e una foglia è al massimo due volte la lunghezza del cammino più corto per gestire il bilanciamento ad ogni nodo viene associato un campo aggiuntivo che specifica il colore: rosso o nero

albero con sentinelle gestire il bilanciamento di un albero è un obiettivo complesso per semplicità vorremmo che non ci siano nodi con un solo figlio destro o un solo figlio sinistro questo può essere realizzato aggiungendo all albero t un nodo sentinella t.null e sostituendo con un puntatore a t.null ogni valore del puntatore x.left o x.right di un nodo x 16 16 1 15 1 15 t.null definizione di alberi rosso-neri un albero rosso-nero è un albero binario di ricerca nel quale 1. ogni nodo è rosso o nero. la radice e la sentinella t.null sono nere. se un nodo è rosso entrambi i suoi figli sono neri. per ogni nodo, tutti i percorsi che vanno dal nodo alle foglie sue discendenti contengono lo stesso numero di nodi neri

attenzione esempio di albero rosso-nero l albero deve essere un albero binario di ricerca non tutti gli alberi binari di ricerca possono essere colorati in maniera da diventare alberi rosso-neri 6 1 1 1 0 16 19 8 8 1 15 0 5 9 t.null alberi rosso-neri e bilanciamento supponiamo che tutti i cammini dalla radice ad una foglia abbiano k nodi neri ogni cammino ha almento k-1 archi (nell esempio: archi) il cammino più lungo alterna nodi neri e rossi e ha (k-1) archi (nell esempio: 6 archi) esempio con k= h=6 1 1 6 0 1 16 19 8 8 1 15 0 5 9 cammino più lungo (6 archi) t.null cammino più corto ( archi)

alberi rosso-neri e bilanciamento supponiamo che tutti i cammini dalla radice ad una foglia abbiano k nodi neri la lunghezza del cammino più lungo ((k-1)) è al massimo due volte la lunghezza del cammino più corto (k-1) l albero è bilanciato 6 esempio con k= 1 1 h=6 1 0 16 19 8 8 1 15 0 5 9 cammino più lungo (6 archi) t.null cammino più corto ( archi) alberi rosso-neri e profondità supponiamo che tutti i cammini dalla radice ad una foglia abbiano k nodi neri l albero contiene un sottoalbero completo di profondità h = h/ 1 esempio con k= h=6 h = 1 1 6 sottoalbero completo 1 0 16 19 8 8 1 15 0 5 9 cammino più lungo (6 archi) t.null cammino più corto ( archi) 5

alberi rosso-neri e numero dei nodi supponiamo che tutti i cammini dalla radice ad una foglia abbiano k nodi neri l albero ha profondità massima h = (k-1) l albero contiene un sottoalbero completo di profondità h = h/ 1 i nodi interni dell albero sono almeno quelli del sottoalbero completo ricorda che un albero completo di altezza x ha x+1-1 nodi h 1 + 1 h' + 1 n 1 = 1 = n + 1 h h lg( n + 1) h 1 sappiamo però che h è almeno l altezza di un albero completo con n nodi, cioè h Ω(lg(n)) dunque h Θ(lg(n)) operazioni sugli alberi rosso-neri l altezza dell albero è logaritmica nel numero dei nodi (h Θ(lg n)) tutte le operazioni di consultazione eseguibili in tempo Θ(h) su un albero binario di ricerca sono eseguibili in tempo Θ(lg n) su un albero rosso-nero: SEARCH MINIMUM MAXIMUM SUCCESSOR PREDECESSOR 6

operazioni INSERT e DELETE le operazioni INSERT e DELETE possono ugualmente essere eseguite in Θ(ln n) TREE-INSERT e TREE-DELETE, però, non garantiscono la conservazione delle proprietà degli alberi rosso-neri a valle delle operazioni di inserimento e cancellazione vengono lanciate delle procedure che ripristinano tali proprietà in Θ(ln n) nel seguito vedremo a titolo di esempio la sola procedura RB-INSERT per l inserimento di un nodo procedura RB-INSERT RB-INSERT(t,new) inserisco il nodo new nell albero t 1. y = t.null. x = t.root. while x!= t.null finché non sono arrivato a t.null. y = x cerco il padre y a cui appendere new 5. if new.key < x.key 6. x = x.left. else x = x.right 8. new.p = y aggiorno il genitore di new 9. if y == t.null se new deve diventare la radice. t.root = new aggiorno t.root. else if new.key < y.key 1. y.left = new 1. else y.right = new. new.left = new.right = t.null 15. new.color = RED i nuovi nodi sono sempre rossi 16. RB-INSERT-FIXUP(t,new) copyright ripristina 015 patrignani@dia.uniroma.it le proprietà dell albero

rotazioni l operazione base che viene utilizzata per ripristinare le proprietà dell albero rosso-nero è la rotazione le rotazioni non alterano i colori dei nodi l albero rimane un albero binario di ricerca l operazione può essere eseguita in tempo Θ(1) x LEFT-ROTATE(t,x) y α y RIGHT-ROTATE(t,y) x γ β γ α β α x β y γ α x β y γ esempio di rotazione a sinistra 6 9 18 19 1 1 1 18 6 19 9 1 1 1 8

procedura LEFT-ROTATE LEFT-ROTATE(t,x) 1. y = x.right trovo y. x.right = y.left sposto β. if y.left!= t.null. y.left.p = x 5. y.p = x.p 6. if x.p == t.null. t.root = y 8. else if x == x.p.left 9. x.p.left = y. else x.p.right = y. y.left = x 1. x.p = y α α x x β y y β γ γ ripristino dell albero rosso-nero il nuovo nodo aggiunto è una foglia e ha colore rosso ricordiamo i vincoli di un albero rosso-nero 1. ogni nodo è rosso o nero. la radice e la sentinella t.null sono nere. se un nodo è rosso entrambi i suoi figli sono neri. per ogni nodo, tutti i percorsi che vanno dal nodo alle foglie sue discendenti contengono lo stesso numero di nodi neri se l albero era vuoto la proprietà è violata in questo caso è sufficiente colorare la radice di nero altrimenti solo la proprietà potrebbe essere violata situazione più complicata 9

violazione: nodo rosso con un figlio rosso se RB-INSERT ha appeso il nuovo nodo new (che è sempre rosso) ad un genitore rosso chiamiamo zio di new il nodo fratello del genitore di new lo zio di new esiste sempre, eventualmente è t.null sono possibili tre casi new.p new caso 1: lo zio di new è nero e new è un figlio sinistro caso : lo zio di new è nero e new è un figlio destro caso : lo zio di new è rosso 5 8 zio di new violazione: caso 1 new.p.p caso 1: lo zio di new ènero e new è un figlio sinistro new.p new 8 zio di new 15 1 5 ricolorazione di new.p e di new.p.p rotazione destra su new.p.p new 1 5 8 ora l albero è rosso-nero 15

violazione: caso caso : lo zio di new ènero e new è un figlio destro new.p 1 new zio di new 15 5 8 rotazione sinistra su new.p i due nodi violano ancora la regola (ma questa volta new è un figlio sinistro e posso applicare la procedura del caso 1) 1 5 8 zio di new 15 violazione: caso caso : lo zio di new è rosso 1 new.p.p 15 ricolorazione di new.p e new.p.p new.p new 5 8 zio di new iterazione: new = new.p.p ora new e new.p potrebbero ancora violare la regola (ma new èpiù vicino alla radice) 1 new 5 8 zio di new 15

violazione: caso nel caso new è più vicino alla radice ma potrebbe violare la regola con new.p occorre rilanciare la procedura con il nuovo new l intera procedura può essere rilanciata al massimo Θ(ln n) volte il caso peggiore è quando si ha una sequenza di casi fino a che non si risale alla radice cancellazioni in un albero rosso-nero analogamente ad RB-INSERT, la procedura RB-DELETE prima cancella un nodo con la stessa strategia di TREE-DELETE degli alberi binari di ricerca poi ripristina le proprietà degli alberi rosso-neri chiamando una opportuna procedura RB-DELETE- FIXUP RB-DELETE-FIXUP utilizza rotazioni e ricolorazioni 1

conclusioni complessivamente gli alberi rosso-neri offrono una realizzazione di alberi binari di ricerca con le seguenti complessità nel caso peggiore inserimento in Θ(log n) cancellazione in Θ(log n) ricerca in Θ(log n) esercizi qual è la complessità dell algoritmo TREE-SORT, che utilizza un albero binario di ricerca per ordinare un array, nel caso in cui l albero sia un albero rosso-nero? data una realizzazione del tipo astratto di dato insieme tramite un albero rosso-nero con le seguenti funzioni INSERT(t,k) in Θ(log n) REMOVE(t,k) in Θ(log n) SEARCH(t,k) in Θ(log n) realizza la funzione UNIONE(t 1,t ) che calcola l unione di due insiemi t 1 e t e discutine la complessità 1