Algoritmi e Strutture Dati

Documenti analoghi
Algoritmi e strutture dati

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

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

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

Algoritmi e Strutture Dati. Capitolo 6 Il problema del dizionario

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Alberi Bilanciati di Ricerca

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

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

Struttura dati Dizionario

dizionari alberi bilanciati

QuickSort Università degli Studi di Milano

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4

Alberi binari di ricerca

Code con priorità. Moreno Marzolla Dip. di Scienze dell'informazione Università di Bologna.

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

Alberi ed Alberi Binari di Ricerca

Alberi Binari di Ricerca

Multi-way search trees

Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni.

algoritmi e strutture di dati

Esercitazione 6. Alberi binari di ricerca

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

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.

Algoritmi e Strutture Dati

Alberi binari. Alberi binari di ricerca

Algoritmi e Strutture Dati

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

ABR di altezza logaritmica

Fondamenti teorici e programmazione

In questa lezione Alberi binari di ricerca: la cancellazione

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

Alberi binari di ricerca

Alberi binari di ricerca

Algoritmi e strutture dati

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Algoritmi e Strutture di Dati

Algoritmi e Strutture di Dati

ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09)

Algoritmi e Strutture Dati

Alberi Rosso-Neri: definizione

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Alberi binari di ricerca

Informatica 3. LEZIONE 27: Strutture ad albero avanzate. Modulo 1: Trie Modulo 2: Alberi bilanciati Modulo 3: Strutture dati spaziali

Tipi di indice. Indici. Leggere sezioni 13.1, 13.2 e 13.3 di Garcia- Molina et al. Tipi di strutture ad indice. ISAM: Indici primari

Alberi Binari di Ricerca e Alberi Rosso-Neri

Alberi binari: definizione e alcune proprietà

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

Esercitazione 5 Alberi Binari di Ricerca

Algoritmi e Strutture Dati

ricerca di un elemento, verifica dell appartenenza di un elemento

Esercizi BST - AVL. E. Fachini

In questa lezione Alberi binari di ricerca

Alberi di ricerca binari

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

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco.

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

Informatica 3. Informatica 3. LEZIONE 23: Indicizzazione. Lezione 23 - Modulo 1. Indicizzazione. Introduzione. Indicizzazione:

Lezione 12 Tabelle Hash

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

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

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

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

ALBERI BINARI DI RICERCA

Dato un insieme S di n elementi totalmente ordinato, l'algoritmo di ordinamento detto HeapSort ha le seguenti caratteristiche:

Heap e code di priorità

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco.

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

ricerca di un elemento, verifica dell appartenenza di un elemento

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

Un heap binario è un albero binario con le seguenti caratteristiche:

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

Alberi due-tre e alberi B

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

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

Informatica 3. LEZIONE 16: Heap - Codifica di Huffmann. Modulo 1: Heap e code di priorità Modulo 2: Esempio applicativo: codifica di Huffmann

La cancellazione in un AVL

Alberi binari e alberi binari di ricerca

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

Alberi binari. Alberi Albero binario Heap tree

Problemi di ordinamento

Tipi di dato e Strutture dati elementari

Esercizi su alberi binari

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

Laboratorio 26 Aprile 2012

Alberi binari e alberi binari di ricerca

Algoritmi e Strutture di Dati

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

Strutture dati Alberi binari

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 e alberi binari di ricerca

Un esempio di mutua ricorsione

Per semplicità eliminiamo le ripetizioni nell'albero.

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

Algoritmi e Strutture Dati

Transcript:

Algoritmi e Strutture Dati Alberi di ricerca Domenico Fabio Savo 1

Dizionari Gli alberi di ricerca sono usati per realizzare in modo efficiente il tipo di dato Dizionario 2

Alberi binari di ricerca (BST = binary search tree) 3

Definizione Un BST è albero binario che soddisfa le seguenti proprietà: 1. ogni nodo v contiene un elemento elem(v) cui è associata una chiave chiave(v) presa da un dominio totalmente ordinato 2. le chiavi nel sottoalbero sinistro di v sono chiave(v) 3. le chiavi nel sottoalbero destro di v sono chiave(v) Le proprietà 2 e 3 sono dette "proprietà di ricerca". 4

Esempi Albero binario di ricerca Albero binario non di ricerca 5

Search Idea: Traccia un cammino nell albero partendo dalla radice: su ogni nodo sfruttiamo le proprietà di ricerca per decidere se proseguire nel sottoalbero sinistro o destro 6

Search: analisi L'approccio adottato nella funzione search ricorda molto da vicino quello della ricerca binaria. Il suo costo però è O(h), dove h è l'altezza dell'albero, e non O(log n). Questa differenza è dovuta al fatto che un BST potrebbe non essere bilanciato. 20 11 25 30 h 35 7

Insert Un nuovo nodo viene sempre aggiunto come foglia. L'inserimento può quindi essere implementato come segue: 1. crea un nuovo nodo u con elem(u)=e e chiave(u)=k 2. cerca la chiave k nell albero, identificando così il nodo v che diventerà padre di u 3. appendi u come figlio sinistro/destro di v in modo che siano mantenute le proprietà di ricerca 8

Insert: analisi I passi 1. e 3. richiedono un numero di passi costante e posso quindi essere eseguiti in tempo O(1). Il passo 2. richiede di effettuare una ricerca nell'albero che, come abbiamo visto, richiede tempo O(h). In totale, anche il costo per l'inserimento è quindi O(h) 9

Delete Come avviene in molte strutture dati, cancellare è più difficile che inserire. Per implementare l'operazione di delete introducimo due nuove operazioni: max(nodo u) nodo pred(nodo u) nodo 10

Max Questa operazione permette di individuare il valore massimo in un albero radicato in u. Grazie alle proprietà di ricerca, per trovare il massimo è sufficiente, partendo da u, scendere verso destra nell'albero finché è possibile. Il tempo di esecuzione è chiaramente O(h). 11

Ricerca del predecessore (1/3) Il predecessore di un nodo u è il nodo v dell'albero avente massima chiave minore o uguale alla chiave di u. Per trovare il predecessore di u possiamo distinguere due casi: 1. u ha un figlio sinistro: in tal caso pred(u) è il massimo del sottoalbero sinistro di u. 2. u non ha un figlio sinistro: pred(u), se esiste, è il più basso antenato di u (ovvero, l'antenato di u con massima profondità nell'albero) il cui figlio destro è anch'esso antenato di u. Per trovarlo, risaliamo da u verso la radice fino ad incontrare la prima "svolta a sinistra". 12

Ricerca del predecessore (2/3) Caso 1: u ha un figlio sinistro Caso 2: u non ha un figlio sinistro 13

Ricerca del predecessore (3/3) Anche la ricerca del predecessore di un nodo u ha costo O(h), dove h è l'altezza dell'albero 14

Delete caso 1 Sia u il nodo contenente l elemento e da cancellare. Distinguiamo tre casi: Caso 1: u è una foglia: in tal caso è sufficiente eliminarla 15

Delete caso 2 Caso 2: u ha un unico figlio: sia v l'unico figlio di u Se u è la radice dell'albero, v diviene la nuova radice. Altrimenti, dopo aver individuato il genitore w di u, l'arco (w, u), viene sostituito dall'arco (w, v) w w u v v 16

Delete caso 3 Caso 3: u ha due figli: ci riconduciamo ad uno dei casi precedenti nel seguente modo. Individuiamo il predecessore v di u. Tale predecessore è sicuramente il massimo del sottoalbero sinistro di u poiché u ha due figli. Copiamo v in u ed eliminiamo il vecchio nodo v applicando uno dei casi precedenti. 17

Delete caso 3 Caso 3: u ha due figli: lo sostituisco con il predecessore (v) e rimuovo fisicamente il predecessore (che ha un solo figlio) 18

Delete: analisi Si può verificare che le proprietà di ricerca sono mantenute. La cancellazione di un nodo interno richiede l'individuazione del nodo da cancellare nonché del suo predecessore (caso 3). Quindi il costo della cancellazione è O(h) 19

BST riassumendo Tutte le operazioni hanno costo O(h) dove h è l altezza dell albero O(n) nel caso peggiore (alberi molto sbilanciati e profondi) 20

Alberi AVL (Adel son-vel skii e Landis) 21

Definizioni Fattore di bilanciamento di un nodo v = altezza del sottoalbero sinistro di v altezza del sottoalbero destro di v Un albero si dice bilanciato in altezza se ogni nodo v ha fattore di bilanciamento 1 Alberi AVL = alberi binari di ricerca bilanciati in altezza 22

Altezza di alberi AVL Si può dimostrare che un albero AVL con n nodi ha altezza O(log n) Segue che, utilizzando l'algoritmo search introdotto per i BST, possiamo implementare la ricerca in un AVL con costo O(log n) 23

Implementazione delle operazioni L operazione search procede come in un BST Ma inserimenti e cancellazioni potrebbero sbilanciare l albero Dobbiamo mantenere il bilanciamento (utilizziamo le rotazioni ) 24

La rotazione di base Nella rotazione di base (anche detta rotazione semplice), un nodo perno viene fatto ruotare verso destra o verso sinistra (i due casi sono simmetrici). La rotazione mantiene la proprietà di ricerca Richiede tempo O(1) 25

Ribilanciamento tramite rotazioni Le rotazioni sono effettuate su nodi sbilanciati Sia v un nodo con fattore di bilanciamento 2 Esiste almeno un sottoalbero T di v che lo sbilancia A seconda della posizione di T si hanno 4 casi: Se esiste un solo sottoalbero T che causa lo sbilanciamento: I quattro casi sono simmetrici a coppie (SS con DD e SD con DS). 26

Rotazione SS Applicare una rotazione semplice verso destra su v L altezza dell albero coinvolto nella rotazione passa da h+3 a h+2 27

Rotazione SD Richiede di applicare due rotazioni. Sia z il figlio sinistro di v: l'albero che sbilancia v è il sottoalbero destro di z. Effettuiamo una prima rotazione semplice di z verso sinistra, seguita da una rotazione semplice di v verso destra. 28

Più sottoalberi che sbilanciano Nel caso in cui il sottoalbero che crea lo sbilanciamento non è unico (T1 e T2 nella figura) è sufficiente effettuare una rotazione nel verso opportuno. 29

1. Crea un nuovo nodo u con: elem(u) = e chiave(u)= k insert(elem e, chiave k) 2. Inserisci u come in un BST (quindi come foglia) 3. Ricalcola i fattori di bilanciamento dei nodi nel cammino dalla radice a u: sia v il più profondo nodo con fattore di bilanciamento pari a ±2 (nodo critico) 4. Esegui una rotazione opportuna su v Osservazione: una sola rotazione è sufficiente, poiché l altezza dell albero coinvolto diminuisce di 1 30

delete(elem e) 1. Cancella il nodo come in un BST 2. Ricalcola i fattori di bilanciamento dei nodi nel cammino dalla radice al padre del nodo eliminato fisicamente 3. Ripercorrendo il cammino dal basso verso l alto, esegui l opportuna rotazione semplice o doppia sui nodi sbilanciati Osservazione: potrebbero essere necessarie O(log n) rotazioni 31

Supponiamo di voler cancellare il nodo 1 Cancellazione esempio (1/7) 32

Cancellazione esempio (2/7) L'albero che si ottiene è sbilanciato, in particolare si individua il nodo 3 come nodo critico. h(sx(3)) h(dx(3)) = 2 33

Cancellazione esempio (3/7) A sbilanciare il nodo 3 è il sotto albero dx del suo figlio dx. Siamo quindi nel caso DD Dobbiamo applicare una rotazione semplice verso sinistra con perno nel nodo 3 34

Cancellazione esempio (4/7) Rotazione semplice a sinistra 35

Cancellazione esempio (5/7) L'albero è ancora sbilanciato! Il nodo critico è il nodo 8 h(sx(8)) h(dx(8)) = 2 36

Cancellazione esempio (6/7) Siamo ancora nel caso DD: a sbilanciare l'albero radicato nel nodo 8 è il sottoalbero dx del figlio dx del nodo 8 Dobbiamo applicare una rotazione semplice verso sinistra con perno nel nodo 8 37

Cancellazione esempio (8/8) Dopo la rotazione semplice verso sinistra con perno nel nodo 8 otteniamo finalmente un albero bilanciato 38

Classe AlberoAVL 39

Costo delle operazioni Tutte le operazioni hanno costo O(log n) poiché l altezza dell albero è O(log n) e ciascuna rotazione richiede solo tempo costante 40