Lezione 15. Algoritmi su gli alberi binari: visite

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Lezione 15. Algoritmi su gli alberi binari: visite"

Transcript

1 Lezione 15 Alberi binari di ricerca Algoritmi su gli alberi binari: visite Dato un puntatore alla radice di un albero vogliamo scandire in modo sistematico tutti i nodi di tale albero In una lista abbiamo una unica possibilità: quella di seguire il link al nodo successivo Con un albero binario sono possibili 3 strategie: preordine o ordine anticipato: si visita prima il nodo e poi i sottoalberi sinistro e destro inordine o ordine simmetrico: si visita prima il sottoalbero sinistro e poi il nodo e poi il sottoalbero destro postordine o ordine posticipato: si visita prima il sottoalbero sinistro, poi quello destro e poi il nodo 1

2 Visita in ordine simmetrico Inorder-Tree-Walk(x) 1 if x NIL 2 then Inorder-Tree-Walk(left[x]) 3 stampa(key[x]) 4 Inorder-Tree-Walk(right[x]) Visualizzazione si parte in 2 viene chiamata la funzione sul figlio sinistro siamo in 1 viene chiamata la funzione sul figlio sinistro non esiste figlio sinistro e la ricorsione termina torniamo in 1 stampiamo 1 viene chiamata la funzione sul figlio destro non esiste figlio destro e la ricorsione termina torniamo in 1 la funzione termina torniamo in 2 stampiamo 2. 2

3 Visualizzazione viene chiamata la funzione sul figlio destro siamo in 8 viene chiamata la funzione sul figlio sinistro siamo in 4 viene chiamata la funzione sul figlio sinistro non esiste figlio sinistro e la ricorsione termina torniamo in 4 stampiamo 4 viene chiamata la funzione sul figlio destro non esiste figlio destro e la ricorsione termina la funzione termina torniamo in 8 stampiamo 8 viene chiamata la funzione sul figlio destro siamo in 9 Visualizzazione viene chiamata la funzione sul figlio sinistro non esiste figlio sinistro e la ricorsione termina torniamo in 9 stampiamo 9 viene chiamata la funzione sul figlio destro non esiste figlio destro e la ricorsione termina torniamo in 9 la funzione termina torniamo in 8 la funzione termina torniamo in 2 la funzione termina 3

4 Visita in ordine anticipato Inorder-Tree-Walk(x) 1 if x NIL 2 then stampa(key[x]) 3 Inorder-Tree-Walk(left[x]) 4 Inorder-Tree-Walk(right[x]) Visualizzazione si parte in 2 stampiamo 2 viene chiamata la funzione sul figlio sinistro siamo in 1 stampiamo 1 viene chiamata la funzione sul figlio sinistro non esiste figlio sinistro e la ricorsione termina torniamo in 1 viene chiamata la funzione sul figlio destro non esiste figlio destro e la ricorsione termina torniamo in 1 la funzione termina torniamo in 2 4

5 Visualizzazione viene chiamata la funzione sul figlio destro siamo in 8 stampiamo 8 viene chiamata la funzione sul figlio sinistro siamo in 4 stampiamo 4 viene chiamata la funzione sul figlio sinistro non esiste figlio sinistro e la ricorsione termina torniamo in 4 viene chiamata la funzione sul figlio destro non esiste figlio destro e la ricorsione termina la funzione termina torniamo in 8 viene chiamata la funzione sul figlio destro siamo in 9 Visualizzazione viene chiamata la funzione sul figlio sinistro non esiste figlio sinistro e la ricorsione termina torniamo in 9 viene chiamata la funzione sul figlio destro non esiste figlio destro e la ricorsione termina torniamo in 9 la funzione termina torniamo in 8 la funzione termina torniamo in 2 la funzione termina 5

6 Visita in ordine posticipato Inorder-Tree-Walk(x) 1 if x NIL 2 then Inorder-Tree-Walk(left[x]) 3 Inorder-Tree-Walk(right[x]) 4 stampa(key[x]) Algoritmi ricorsivi su alberi binari Capita di dover determinare dei parametri strutturali di un albero avendo in ingresso solo il link alla radice Si può sfruttare la struttura ricorsiva degli alberi ed realizzare versioni ricorsive delle funzioni di interesse Consideriamo una funzione per determinare il numero di nodi ed una per determinare l altezza dell albero 6

7 Funzioni ricorsive int count(link h) { if (h == NULL) return 0; return count(h->l) + count(h->r) + 1; } int height(link h) { int u, v; if (h == NULL) return -1; u = height(h->l); v = height(h->r); if (u > v) return u+1; else return v+1; } Ricerca Molte applicazioni richiedono un insieme dinamico che fornisca solo operazioni di: inserimento cancellazione ricerca massimo/minimo predecessore/successore (il più piccolo/grande elemento maggiore/minore di un elemento dato) 7

8 Alberi Binari di ricerca Gli alberi binari di ricerca sono strutture dati dinamiche che forniscono le operazioni richieste (insert, delete, search, maximum, predecessor, etc) in tempo limitato asintoticamente dall altezza dell albero, cioè per le varie operazioni si ha T(n)=O(h) Alberi Binari di Ricerca Un albero binario di ricerca è un albero binario in cui le chiavi soddisfano la: proprietà dell albero binario di ricerca sia x un nodo key di left[x] key di x key di right[x] key di x

9 Ordinamento delle chiavi In un albero binario di ricerca l operazione di ordinamento viene eseguita semplicemente attraversando i nodi dell albero in modo ricorsivo la visita deve essere una visita in ordine simmetrico Visualizzazione Root[t] Sequenza stampata:

10 La ricerca L idea è di confrontare la chiave di un nodo x con la chiave cercata nel caso che non coincidano si cerca solo nel sottoalbero in cui potrà trovarsi è possibile sapere quale sia il sottoalbero perché tutti i nodi del sottoalbero destro contengono chiavi maggiori della chiave di x (e nel sottoalbero sinistro chiavi minori) PseudoCodice per la Ricerca (versione ricorsiva) Tree-Search(x,k) 1 if x = NIL o k=key[x] 2 then return x 3 if k < key[x] 4 then return Tree-Search(left[x],key) 5 else return Tree-Search(right[x],key) 10

11 Tempo di calcolo La procedura discende a partire dalla radice l albero e restituisce un puntatore al nodo la cui chiave coincide con la chiave cercata nel caso in cui essa non esista la procedura discende comunque fino ad una foglia e restituisce un puntatore nullo Il tempo impiegato è proporzionale alla lunghezza del cammino percorso, ovvero limitato dalla altezza dell albero pertanto T(n)=O(h) per albero binario completo T(n)=O(lg n) per albero degenere (lista) T(n)=O(n) Nota E possibile scrivere qualsiasi procedura ricorsiva in forma non ricorsiva (e viceversa) La forma ricorsiva è spesso più elegante e compatta ma non la più efficiente Di seguito si da una procedura non ricorsiva per la ricerca in un albero binario 11

12 PseudoCodice per la Ricerca (versione iterativa) Iterative-Tree-Search(x,k) 1 while x NIL e k key[x] 2 do if k < key[x] 4 then x left[x] 5 else x right[x] 6 return x Determinazione della chiave massima e minima La chiave massima in un albero binario dovrà trovarsi nel sottoalbero destro della radice e nel sottoalbero destro del figlio destro della radice e così via Analogamente per la chiave minima che dovrà essere nel sottoalbero sinistro Pertanto per determinare l elemento massimo è sufficiente discendere tutti i nodi da figlio destro in figlio destro fino ad arrivare alla foglia (e analogamente con i figli sinistri per il minimo) 12

13 Massimo Massimo=20 9 Minimo Minimo=

14 Minimo e massimo Tree-Minimum(x) 1 while left[x] NIL 2 do x left[x] 3 return x Tree-Maximum(x) 1 while right[x] NIL 2 do x right[x] 3 return x Successore e predecessore Dato un nodo nell albero di ricerca talvolta si richiede di determinare il suo successore (o predecessore) secondo l ordinamento fornito dalle chiavi. Se tutte le chiavi sono distinte, il successore di un nodo x è il nodo con la più piccola chiave maggiore della chiave di x Con gli alberi binari di ricerca è possibile determinare il successore (predecessore) di un nodo senza dover confrontare le chiavi 14

15 Successore: idea intuitiva Si considerano due casi: il nodo x ha un figlio destro il nodo x non ha un figlio destro Nel primo caso: si considera il sottoalbero destro che contiene sicuramente nodi con chiavi maggiori della chiave di x in questo sottoalbero il nodo con la chiave più piccola è la foglia alla estrema sinistra, cioè il nodo restituito dalla procedura Tree-Minimum Successore di nodo con figlio dx: visualizzazione 6 15 Successore di sottoalbero destro minimo 15

16 Successore di nodo senza figlio dx: idea intuitiva Nel caso in cui x non ha un figlio destro allora il predecessore deve essere un antenato p di x dal punto di vista di p, x deve essere un discendente appartenente ad un sottoalbero sinistro infatti le chiavi nel sottoalbero sx hanno chiave minore antenati ha x in sottoalbero dx? SI ha x in sottoalbero sx? NO Successore di x = 4? Successore di nodo senza figlio dx: idea intuitiva perché la chiave di p sia la più piccola possibile allora p deve essere l antenato più prossimo altrimenti se consideriamo un antenato lontano è vero che ha chiave maggiore, ma.. esisterà un antenato meno lontano e più piccolo! Antenati che hanno x in sottoalbero sx Successore di x = 4 16

17 Idea intuitiva Per determinare questo nodo antenato è sufficiente risalire gli antenati di x fino a quando non si trova un nodo antenato che è un figlio sinistro di un nodo y. Il nodo y è il nodo cercato, il predecessore Si mantengono pertanto i puntatori a due generici antenati x e y e si risale fino a quando x=left[y] Visualizzazione Successore di

18 PseudoCodice Successore Tree-Successore(x) 1 if right[x] NIL 2 then return Tree-Minimum(right[x]) 3 y p[x] 4 while y NIL e x = right[y] 5 do x y 6 y p[x] 7 return y Predecessore La procedura per la determinazione del predecessore è simmetrica a quella vista per il successore il predecessore si troverà nel sottoalbero sinistro (se questo esiste), e sarà l elemento massimo di questo sottoalbero se non esiste sottoalbero sinistro il predecessore sarà l antenato più prossimo che ha un figlio destro che è antenato del nodo in questione 18

19 PseudoCodice Predecessore Tree-Predecessore(x) 1 if left[x] NIL 2 then return Tree-Maximum(left[x]) 3 y p[x] 4 while y NIL e x = left[y] 5 do x y 6 y p[x] 7 return y Inserzione Per inserire un nuovo valore k in un albero binario di ricerca, si prepara un nodo z tale che: possieda come chiave key[z]=k e non abbia collegamenti left[z]=right[z]=p[k]=nil si cerca la posizione in cui inserirlo si modificano i campi di z per allacciarlo all albero binario di ricerca 19

20 Inserzione Per trovare la posizione giusta ci si muove a partire dalla radice spostandosi sul sottoalbero destro o sinistro come in una ricerca si prosegue però fino ad arrivare ad un punto in cui fallirebbe la ricerca a questo punto si inserisce il nuovo nodo Visualizzazione: inserzione di key

21 Pseudocodice Inserzione Tree-Insert(T,z) 1 y NIL 2 x root[t] 3 while x NIL 4 do y x 5 if key[z]<key[x] 6 then x left[x] 7 else x right[x] 8 p[z] y 9 if y=nil 10 then root[t] z 11 else if key[z] < key[y] 12 then left[y] z 13 else right[y] z ricerca della posizione Pseudocodice Inserzione Tree-Insert(T,z) 1 y NIL 2 x root[t] 3 while x NIL 4 do y x 5 if key[z]<key[x] 6 then x left[x] 7 else x right[x] 8 p[z] y 9 if y=nil 10 then root[t] z 11 else if key[z] < key[y] 12 then left[y] z 13 else right[y] z Inserzione del nodo z caso: inserzione primo elemento caso: inserzione elemento generico a dx o sx del nodo trovato 21

22 Cancellazione La procedura di cancellazione è più laboriosa in quanto si deve tenere conto di tre casi possibili dato un nodo z i casi sono: z non ha figli z ha un unico figlio z ha due figli Caso 1: Nel caso in cui z non abbia figli si elimina direttamente il nodo z

23 Caso 2: Nel caso in cui z abbia un unico figlio si rimuove z e si collega il figlio al posto di z il secondo caso è identico al caso di eliminazione di un nodo da una lista concatenata Caso 3: Nel caso in cui z abbia 2 figli si determina il successore x di z si copia il contenuto di x al posto di quello di z infine si elimina il vecchio nodo x (caso 1 o 2) Nota: il successore di x non può avere 2 figli perché non può avere un figlio sx (altrimenti sarebbe questo il successore)

24 PseudoCodice Cancellazione Tree-Delete(T,z) 1 if left[z]=nil o right[z]=nil 2 then y z 3 else y Tree-Successor(z) 4 if left[y] NIL 5 then x left[y] 6 else x right[y] 7 if x NIL 8 then p[x] p[y] 9 if p[y] = NIL 10 then root[t] x 11 else if y=left[p[y]] 12 then left[p[y]] x 13 else right[p[y]] x 14 if y z 15 then key[z] key[y] 17 return y Determinazione del nodo da cancellare caso 1 o 2 PseudoCodice Cancellazione Tree-Delete(T,z) 1 if left[z]=nil o right[z]=nil 2 then y z 3 else y Tree-Successor(z) 4 if left[y] NIL 5 then x left[y] 6 else x right[y] 7 if x NIL 8 then p[x] p[y] 9 if p[y] = NIL 10 then root[t] x 11 else if y=left[p[y]] 12 then left[p[y]] x 13 else right[p[y]] x 14 if y z 15 then key[z] key[y] 17 return y Determinazione del nodo da cancellare caso 3 24

25 PseudoCodice Cancellazione Tree-Delete(T,z) 1 if left[z]=nil o right[z]=nil 2 then y z 3 else y Tree-Successor(z) 4 if left[y] NIL 5 then x left[y] 6 else x right[y] 7 if x NIL 8 then p[x] p[y] 9 if p[y] = NIL 10 then root[t] x 11 else if y=left[p[y]] 12 then left[p[y]] x 13 else right[p[y]] x 14 if y z 15 then key[z] key[y] 17 return y in x si memorizza l unico figlio del nodo da rimuovere (può essere NIL) PseudoCodice Cancellazione Tree-Delete(T,z) 1 if left[z]=nil o right[z]=nil 2 then y z 3 else y Tree-Successor(z) 4 if left[y] NIL 5 then x left[y] 6 else x right[y] 7 if x NIL 8 then p[x] p[y] 9 if p[y] = NIL 10 then root[t] x 11 else if y=left[p[y]] 12 then left[p[y]] x 13 else right[p[y]] x 14 if y z 15 then key[z] key[y] 17 return y Se x esiste si attacca all albero 25

26 PseudoCodice Cancellazione Tree-Delete(T,z) 1 if left[z]=nil o right[z]=nil 2 then y z 3 else y Tree-Successor(z) 4 if left[y] NIL 5 then x left[y] 6 else x right[y] 7 if x NIL 8 then p[x] p[y] 9 if p[y] = NIL 10 then root[t] x 11 else if y=left[p[y]] 12 then left[p[y]] x 13 else right[p[y]] x 14 if y z 15 then key[z] key[y] 17 return y Se il nodo eliminato era la radice allora la nuova radice è x PseudoCodice Cancellazione Tree-Delete(T,z) 1 if left[z]=nil o right[z]=nil 2 then y z 3 else y Tree-Successor(z) 4 if left[y] NIL 5 then x left[y] 6 else x right[y] 7 if x NIL 8 then p[x] p[y] 9 if p[y] = NIL 10 then root[t] x 11 else if y=left[p[y]] 12 then left[p[y]] x 13 else right[p[y]] x 14 if y z 15 then key[z] key[y] 17 return y Se il nodo eliminato era un figlio sx allora si aggiorna il puntatore sx altrimenti dx 26

27 PseudoCodice Cancellazione Tree-Delete(T,z) 1 if left[z]=nil o right[z]=nil 2 then y z 3 else y Tree-Successor(z) 4 if left[y] NIL 5 then x left[y] 6 else x right[y] 7 if x NIL 8 then p[x] p[y] 9 if p[y] = NIL 10 then root[t] x 11 else if y=left[p[y]] 12 then left[p[y]] x 13 else right[p[y]] x 14 if y z 15 then key[z] key[y] 17 return y Se il nodo eliminato ha richiesto la determinazione del successore allora copia la chiave del successore PseudoCodice Cancellazione Tree-Delete(T,z) 1 if left[z]=nil o right[z]=nil 2 then y z 3 else y Tree-Successor(z) 4 if left[y] NIL 5 then x left[y] 6 else x right[y] 7 if x NIL 8 then p[x] p[y] 9 if p[y] = NIL 10 then root[t] x 11 else if y=left[p[y]] 12 then left[p[y]] x 13 else right[p[y]] x 14 if y z 15 then key[z] key[y] 17 return y Restituisci il nodo eliminato per una eventuale deallocazione 27

28 Esercizio Implementare un albero binario di ricerca: Classe Nodo Classe Albero Ricerca Massimo/Minimo Inserzione Stampa #include<iostream> #include<cassert> using namespace std; Implementazione C++ template<class T, class LessClass > class TreeClass{ private: struct Node{Node *left, *right, * parent; T key;}; Node *root; public: TreeClass():root(0){} void insert(t); void print(){p_print(root); cout<<endl;} bool search(t user_key){return p_search(root, user_key);} T minimum(); T maximum(); private: void p_print(node *); bool p_search(node * x, T user_key); }; 28

29 Implementazione C++ template<class T, class LessClass > void TreeClass<T, LessClass>::p_print(Node *x){ if(x!=0){ p_print(x->left); cout<<x->key<<" "; p_print(x->right); } } template<class T, class LessClass > bool TreeClass<T, LessClass>::p_search(Node * x, T usr_key){ LessClass less; if(x==0) return false; if(!less(x->key,usr_key) &&!less(usr_key,x->key)) return true; //ugualianza if(less(usr_key,x->key)) p_search(x->left, usr_key); else p_search(x->right, usr_key); } template<class T, class LessClass > void TreeClass<T,LessClass>::insert(T usr_key){ LessClass less; //inizializzazione del nodo da aggingere Node * z=new Node; assert(z); z->key=usr_key; z->left=0; z->right=0; z->parent=0; //ricerca della giusta posizione di inserzione Node * y=0; Node * x=root; while(x!= 0){ y=x; if(less(z->key, x->key)) x=x->left; else x=x->right; } //settaggio dei puntatori z->parent=y; if(y==0) root=z; else if(less(z->key, y->key)) y->left=z; else y->right=z; } 29

30 Implementazione C++ template<class T, class LessClass > T TreeClass<T, LessClass>::minimum(){ assert(root); Node * x=root; while(x->left!=0) x=x->left; return x->key; } template<class T, class LessClass > T TreeClass<T, LessClass>::maximum(){ assert(root); Node * x=root; while(x->right!=0) x=x->right; return x->key; } Implementazione C++ template<class T> struct LessClass{ bool operator()(const T & a, const T & b)const{return a<b;} }; int main(){ //integer example int v[]={2,5,8,1,3,4,7,9,6,0}; TreeClass<int, LessClass<int> > T; for(int i=0;i<10;i++) T.insert(v[i]); T.print(); cout<<"searching 5:"<< (T.search(5)? "Found":"Not found")<<endl; cout<<"searching 11:"<< (T.search(11)? "Found":"Not found")<<endl; cout<<"searching maximum:"<<t.maximum()<<endl; cout<<"searching minimum:"<<t.minimum()<<endl; 30

31 Implementazione C++ //char example char c[]="this_is_a."; TreeClass<char, LessClass<char> > Tc; for(int i=0;i<10;i++) Tc.insert(c[i]); Tc.print(); cout<<"searching s:"<< (Tc.search('s')? "Found":"Not found")<<endl; cout<<"searching v:"<< (Tc.search('v')? "Found":"Not found")<<endl; cout<<"searching maximum:"<<tc.maximum()<<endl; cout<<"searching minimum:"<<tc.minimum()<<endl; } cout<<endl; return 0; 31

Alberi Binari di Ricerca

Alberi Binari di Ricerca Alberi Binari di Ricerca Determinazione della chiave massima e minima La chiave massima in un albero binario dovrà trovarsi nel sottoalbero destro della radice e nel sottoalbero destro del figlio destro

Dettagli

Alberi Binari di Ricerca

Alberi Binari di Ricerca Alberi Binari di Ricerca Algoritmi su gli alberi binari: visite Dato un puntatore alla radice di un albero vogliamo scandire in modo sistematico tutti i nodi di tale albero In una lista abbiamo una unica

Dettagli

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

Struttura di dati che può essere usata sia come dizionario, sia come coda con priorità Albero binario di ricerca Struttura di dati che può essere usata sia come dizionario, sia come coda con priorità Proprietà: sia x un nodo di un (sotto)albero binario di ricerca Se y è un nodo del sottoalbero

Dettagli

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. 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 Un albero è un insieme di oggetti, chiamati nodi, su cui è definita una relazione binaria G(x, y) che leggiamo x è genitore di y tale che: 1. esiste un unico nodo, chiamato radice, che non ha genitori;

Dettagli

Alberi binari di ricerca

Alberi binari di ricerca Alberi binari di ricerca Ilaria Castelli castelli@dii.unisi.it Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione A.A. 2009/20010 I. Castelli Alberi binari di ricerca, A.A. 2009/20010

Dettagli

Alberi di ricerca binari

Alberi di ricerca binari Fulvio Corno, Matteo Sonza Reorda Dip. Automatica e Informatica Politecnico di Torino Introduzione Gli alberi di ricerca binari (Binary Search Tree, o BST) sono una struttura di dati che supporta in modo

Dettagli

Alberi binari di ricerca

Alberi binari di ricerca Alberi binari di ricerca Definizione Visita dell albero inorder Ricerca Ricerca minimo, massimo e successore. Inserimento ed eliminazione di un nodo Problema del bilanciamento dell albero Albero binario

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Alberi Binari di Ricerca (BST) Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Alberi Binari di Ricerca (Binary Search Trees BST)

Dettagli

Esercitazione 6. Alberi binari di ricerca

Esercitazione 6. Alberi binari di ricerca Esercitazione 6 Alberi binari di ricerca Struttura base Rappresentabile attraverso una struttura dati concatenata in cui ogni nodo è un oggetto di tipo struttura Ogni nodo contiene: campo chiave (key)

Dettagli

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc Algoritmi e Strutture di Dati I 1 Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc Algoritmi e Strutture di Dati I 2 Grafo Un grafo G è una coppia (V, E) ove V è un

Dettagli

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve LE STRUTTURE DATI DINAMICHE: GLI ALBERI Cosimo Laneve 1 argomenti 1. definizione di alberi e nozioni relative 2. implementazione degli alberi, creazione, visita 3. algoritmo di visita iterativa e sua implementazione

Dettagli

Alberi Binari di Ricerca e Alberi Rosso-Neri

Alberi Binari di Ricerca e Alberi Rosso-Neri Alberi Binari di Ricerca e Alberi Rosso-Neri Obiettivi Studiare strutture dati che consentano di effettuare in modo efficiente le operazioni di Minimo e massimo Successore Inserimento e cancellazione Ricerca

Dettagli

Alberi Binari di Ricerca

Alberi Binari di Ricerca Alberi Binari di Ricerca Prof. G. M. Farinella gfarinella@dmi.unict.it www.dmi.unict.it/farinella Riferimenti Bibliografici Cormen T.H., Leiserson C.E., Rivest R.L Introduction to Algorithms, Third Edition,

Dettagli

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

Organigramma Gerarchia. (Tree) Nessuna persona può avere più di un superiore Ogni persona può essere superiore di altre Alberi Struttura dati Albero Organigramma Gerarchia (Tree) Nessuna persona può avere più di un superiore Ogni persona può essere superiore di altre Esempio di un organigramma di un azienda Tree terminology

Dettagli

ALGORITMI E STRUTTURE DATI

ALGORITMI E STRUTTURE DATI ALGORITMI E STRUTTURE DATI Esercitazioni AndreA Orlandini http://www.dia.uniroma3.it/~orlandin/asd/ e-mail: orlandin@dia.uniroma3.it Orario di ricevimento: Martedì 14.00-16.00 Puntatori e Alberi, ABR StudentiDIA

Dettagli

Alberi ed Alberi Binari

Alberi ed Alberi Binari Alberi ed Alberi Binari Il tipo di dato Albero Un albero è una struttura di data organizzata gerarchicamente. È costituito da un insieme di nodi collegati tra di loro: ogni nodo contiene dell informazione,

Dettagli

Alberi binari e alberi binari di ricerca

Alberi binari e alberi binari di ricerca Alberi binari e alberi binari di ricerca Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica

Dettagli

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.

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. 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 FB = -1 livello 1 FB = -1 livello 2 livello 3 L altezza è 3, il minimo si trova nel

Dettagli

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

ALBERI : introduzione SOMMARIO ALBERI ALBERI. ALBERI: introduzione ALBERI BINARI: introduzione VISITE RICORSIVE DI ALBERI SOMMARIO ALBERI: introduzione ALBERI BINARI: introduzione VISITE RICORSIVE DI ALBERI Dimensione e Altezza ALBERI BINARI DI RICERCA (BST) Introduzione Ricerca, inserimento e cancellazione Implementazione

Dettagli

Algoritmi e strutture dati

Algoritmi e strutture dati Algoritmi e strutture dati Roberto Cordone A. A. 2015-16 Capitolo 3 Implementazioni dei dizionari ordinati Nota: queste dispense sono un rapido riassunto delle lezioni svolte nel dicembre 2015 e gennaio

Dettagli

Sommario. Le strutture dati elementari per implementare sequenze: Vettori Liste

Sommario. Le strutture dati elementari per implementare sequenze: Vettori Liste Sequenze Sommario Le strutture dati elementari per implementare sequenze: Vettori Liste Strutture dati elementari Le strutture dati vettore e lista sono fra le strutture dati più usate e semplici Il loro

Dettagli

Problemi di ordinamento

Problemi di ordinamento Problemi di ordinamento Input: una sequenza di n numeri a 1, a 2,..., a n ; Output: una permutazione a 1, a 2,..., a n di a 1, a 2,..., a n tale che a 1 a 2... a n. Generalmente, la sequenza è rappresentata

Dettagli

Visite di alberi binari. Laboratorio di Algoritmi e Strutture Dati

Visite di alberi binari. Laboratorio di Algoritmi e Strutture Dati Visite di alberi binari Laboratorio di Algoritmi e Strutture Dati Visita di Alberi Gli alberi possono essere visitati (o attraversati) in diversi modi: Visita in Preordine: prima si visita il nodo e poi

Dettagli

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

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

Dettagli

ricerca di un elemento, verifica dell appartenenza di un elemento

ricerca di un elemento, verifica dell appartenenza di un elemento Alberi Binari di Ricerca Gli alberi binari di ricerca (o, alberi di ricerca binaria) sono strutture dati che consentono, su un insieme di elementi con un ordine totale le operazioni di: ricerca di un elemento,

Dettagli

Implementazione ADT: Alberi

Implementazione ADT: Alberi Implementazione ADT: Alberi Livelli di astrazione 2001/2002 1 Esercitazione 5 (E6): alberi (tree) albero struttura dati fondamentale, soprattutto per le operazioni di ricerca tipi di albero con radice

Dettagli

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve GLI ALBERI BINARI DI RICERCA Cosimo Laneve argomenti 1. alberi binari di ricerca 2. la ricerca di elementi e la complessità computazionale 3. operazione di cancellazione di elementi 4. esempi/esercizi

Dettagli

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

Alberi e alberi binari I Un albero è un caso particolare di grafo Alberi e alberi binari Un albero è un caso particolare di grafo È costituito da un insieme di nodi collegati tra di loro mediante archi Gli archi sono orientati (ogni arco esce da un nodo origine ed entra

Dettagli

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione Alberi Strutture dati: Alberi Strutture gerarchiche di dati Esempi Il file system di un sistema operativo L organigramma di un azienda Alberi generali, alberi n-ari, alberi binari, Ogni nodo ha un unico

Dettagli

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

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

Dettagli

Dati e Algoritmi I (Pietracaprina) Esercizi su Alberi Binari di Ricerca e (2,4)-Tree

Dati e Algoritmi I (Pietracaprina) Esercizi su Alberi Binari di Ricerca e (2,4)-Tree Dati e Algoritmi I (Pietracaprina) Esercizi su Alberi Binari di Ricerca e (2,4)-Tree Dati e Algoritmi I (Pietracaprina): Esercizi 1 Problema 1 Si definisca Interval Tree un albero binario di ricerca le

Dettagli

Informatica 3. Informatica 3. LEZIONE 17: Alberi generici. Lezione 17 - Modulo 1. Introduzione. ADT dell albero generico.

Informatica 3. Informatica 3. LEZIONE 17: Alberi generici. Lezione 17 - Modulo 1. Introduzione. ADT dell albero generico. Informatica 3 Informatica 3 LEZIONE 17: lberi generici Lezione 17 - Modulo 1 Modulo 1: Definizione e DT Modulo 2: Implementazione Modulo 3: lberi e classi di equivalenza Definizione e DT Politecnico di

Dettagli

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

Albero binario. Alberi binari (introduzione) Terminologia. Alberi di ricerca binaria (BST) Albero binario 2 Alberi binari (introduzione) Struttura di dati bidimensionale formata da nodi costituiti ciascuno dai dati da memorizzare e da due link Ver. 2.4 20 - Claudio Fornaro - Corso di programmazione

Dettagli

ADT Coda con priorità

ADT Coda con priorità Code con priorità ADT Coda con priorità Una coda con priorità è una struttura dati dinamica che permette di gestire una collezione di dati con chiave numerica. Una coda con priorità offre le operazioni

Dettagli

Per semplicità eliminiamo le ripetizioni nell'albero.

Per semplicità eliminiamo le ripetizioni nell'albero. Albero binario di ricerca 20 40 100 95 Un albero binario di ricerca é un albero binario in cui ogni nodo ha un etichetta minore o uguale a quelle dei nodi nel sottoalbero radicato nel figlio destro e maggiore

Dettagli

alberi binari di ricerca (BST)

alberi binari di ricerca (BST) Le tabelle di simboli e gli alberi binari di ricerca (BT) ianpiero abodi e Paolo amurati Dip. utomatica e Informatica Politecnico di Torino Tabelle di simboli Definizione: una tabella di simboli è una

Dettagli

Informatica 3. Informatica 3. LEZIONE 14: Alberi binari: introduzione. Lezione 14 - Modulo 1. Definizioni. Introduzione. Definizioni e proprietà

Informatica 3. Informatica 3. LEZIONE 14: Alberi binari: introduzione. Lezione 14 - Modulo 1. Definizioni. Introduzione. Definizioni e proprietà Informatica 3 Informatica 3 LEZIONE 14: Alberi binari: introduzione Lezione 14 - Modulo 1 Modulo 1: Definizioni e proprietà Modulo 2: Attraversamento degli alberi binari Definizioni e proprietà Politecnico

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica Liste semplici (semplicemente linkate) Una lista semplice e costituita da nodi Laboratorio di Informatica 7. Strutture complesse di dati in C++ Ogni nodo e una struttura che contiene : Dati Un riferimento

Dettagli

Alberi Binario in Java

Alberi Binario in Java Alberi Binario in Java Realizzare un albero binario di ricerca. L albero binario è di ricerca se esiste una relazione di ordinamento tra i valori dei nodi (valori comparabili). In particolare, dato un

Dettagli

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

Alberi rosso-neri. Oltre ad essere alberi binari di ricerca, gli alberi rosso-neri soddisfano le seguenti proprietà: Alberi rosso-neri Gli alberi rosso-neri sono alberi binari di ricerca in cui le operaioni Insert e Delete sono opportunamente modificate in modo tale da garantire un altea dell albero h = O(log n). A tale

Dettagli

Espressioni aritmetiche

Espressioni aritmetiche Espressioni aritmetiche Consideriamo espressioni costruite a partire da variabili e costanti intere mediante applicazione delle operazioni di somma, sottrazione, prodotto e divisione (intera). Ad esempio:

Dettagli

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

Alberi rosso-neri. Le operazioni sugli alberi binari di ricerca hanno complessità proporzionale all altezza h dell albero. Alberi rosso-neri Le operazioni sugli alberi binari di ricerca hanno complessità proporzionale all altezza h dell albero. Gli alberi rosso-neri sono alberi binari di ricerca in cui le operazioni Insert

Dettagli

Strutture dati dinamiche in C (II)

Strutture dati dinamiche in C (II) Strutture dati dinamiche in C (II) Laboratorio di Linguaggi di Programmazione a.a. 2001/2002 dott.ssa Francesca A. Lisi lisi@di.uniba.it Sommario Le liste concatenate (ancora ma in modo più formale) L

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Il concetto di dato Il concetto di tipo di dato Insertion Sort for j 2 to lenght[a]

Dettagli

Lezione 8 Struct e qsort

Lezione 8 Struct e qsort Lezione 8 Struct e qsort Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 3 QuickSort strambo Modificare il Quicksort

Dettagli

In questa lezione Alberi binari di ricerca: la cancellazione

In questa lezione Alberi binari di ricerca: la cancellazione In questa leione Alberi binari di ricerca: la cancellaione 1 L algoritmo di Hibbard per cancellare (1962) Sia il nodo da cancellare: 1) è una foglia: si rimuove 2) ha un solo figlio x: si rende x figlio

Dettagli

Esercizi Capitolo 6 - Alberi binari di ricerca

Esercizi Capitolo 6 - Alberi binari di ricerca Esercizi Capitolo 6 - Alberi binari di ricerca Alberto Montresor 9 Agosto, 204 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile

Dettagli

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

ADT Dizionario. Ordered search table. Supponiamo che sia definita una relazione d'ordine totale sulle chiavi del dizionario D: Ordered search table Supponiamo che sia definita una relazione d'ordine totale sulle chiavi del dizionario D: possiamo memorizzare le entrate di D in un array list S in ordine non decrescente di chiavi:

Dettagli

Indice come albero binario di ricerca!

Indice come albero binario di ricerca! Indice come albero binario di ricerca! n Obiettivo: Utilizzare una struttura dati del tipo albero binario di ricerca per realizzare un indice su file Ricerca sull indice in memoria centrale, poi accesso

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Alberi Rosso-Neri (RB-Trees) Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino Alberi Rosso-Neri Definizione Altezza nera di un red-black tree

Dettagli

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Esercizi II parte Esercizio 1 Discutere la correttezza di ciascuna delle seguenti affermazioni. Dimostrare formalmente la validità

Dettagli

Implementazione dell albero binario in linguaggio C++

Implementazione dell albero binario in linguaggio C++ Implementazione dell albero binario in linguaggio C++ Costruire il programma per gestire le operazioni su un albero binario. Ogni nodo dell albero contiene un codice e una descrizione; il programma deve

Dettagli

Heap e code di priorità

Heap e code di priorità Heap e code di priorità Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010

Dettagli

ALBERI DI RICERCA BINARI (O ALBERI BINARI DI RICERCA)

ALBERI DI RICERCA BINARI (O ALBERI BINARI DI RICERCA) ALBERI DI RICERCA BINARI (O ALBERI BINARI DI RICERCA) Definizione induttiva: un albero vuoto è un albero di ricerca binario un albero non vuoto avente per radice l'elemento (di chiave) x e per sottoalberi

Dettagli

Note per la Lezione 4 Ugo Vaccaro

Note per la Lezione 4 Ugo Vaccaro Progettazione di Algoritmi Anno Accademico 2016 2017 Note per la Lezione 4 Ugo Vaccaro Ripasso di nozioni su Alberi Ricordiamo che gli alberi rappresentano una generalizzazione delle liste, nel senso che

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Alberi Rosso-Neri (RB-Trees) Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2007/08 Alberi Rosso-Neri: definizione Un albero rosso-nero

Dettagli

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

Alberi binari (radicati e ordinati) della radice Il padre del nodo 5 e del nodo 3 Alberi binari (radicati e ordinati) Il figlio sinistro della radice Il padre del nodo 5 e del nodo 3 4 3 Il figlio sinistro del nodo 2 2 5 1 6 7 8 9 La radice Il figlio destro della radice una foglia Figlio

Dettagli

Lezione 12 Tabelle Hash

Lezione 12 Tabelle Hash Lezione 12 Tabelle Hash Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 2 ABR: Visita Scrivere un programma che legga

Dettagli

Alberi Rosso-Neri: definizione

Alberi Rosso-Neri: definizione Alberi Rosso-Neri: definizione Altezza di un red-black tree Un albero Rosso Nero (Red Black Tree, RB tree) èunalbero binario di ricerca in cui ad ogni nodo viene associato un colore rosso o nero Ogni nodo

Dettagli

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Alberi binari di ricerca 2 1 Alberi L albero è un tipo astratto di dato utilizzato per rappresentare

Dettagli

Lezione 9 Alberi binari di ricerca

Lezione 9 Alberi binari di ricerca Lezione 9 Alberi binari di ricerca Rossano Venturini rossano.venturini@unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 1 Lista monodirezionale Scrivere

Dettagli

Divide et impera su alberi

Divide et impera su alberi Divide et impera su alberi Caso base: peru = null o una foglia Decomposizione: riformula il problema per i sottoalberi radicati nei figli di u. Ricombinazione: ottieniilrisultatoconricombina 1 Decomponibile(u):

Dettagli

Esercizi su alberi binari

Esercizi su alberi binari Esercizi su alberi binari Esercizi svolti: Determinazione nodi contenti verifica completezza verifica quasi completezza lunghezza del cammino interno determinazione ultima foglia in un quasi completo verifica

Dettagli

Un esempio di mutua ricorsione

Un esempio di mutua ricorsione Inserimento in un ABR n-bilanciato Un esempio di mutua ricorsione con gli alberi bilanciati in altezza, proprietà più debole, si ottiene maggiore semplicità delle operazioni di ribilanciamento (niente

Dettagli

Inserimento in una lista ordinata

Inserimento in una lista ordinata Inserimento in una lista ordinata Vogliamo inserire un nuovo elemento in una lista in cui gli elementi sono memorizzati in ordine crescente: Passo 1: creare un nuovo nodo della lista Passo 2: trovare il

Dettagli

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla marzolla@cs.unibo.it Ultimo aggiornamento: 3 novembre 2010 1 Trova la somma/1 Scrivere un algoritmo che dati in input un array A[1... n] di n interi

Dettagli

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

23/10/2016. gli alberi. alcune definizioni. un esempio. LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica. gli alberi Un albero è una struttura dati NON LINEARE organizzata gerarchicamente. LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica È costituito da un insieme di nodi collegati tra di loro:

Dettagli

type keytype: integer; Tree: "Node; record Node = key: keytype; parent: "Node ; left: Tree; right: Tree; Figure 1: Tipi di dato per rappresentare albe

type keytype: integer; Tree: Node; record Node = key: keytype; parent: Node ; left: Tree; right: Tree; Figure 1: Tipi di dato per rappresentare albe Appunti Senza Pretese di Programmazione II: Alberi di Ricerca Alessandro Panconesi DSI, La Sapienza, Roma Vediamo adesso un altro modo di risolvere Il Problema del Dizionario, cioé quello di realizzare

Dettagli

Alberto Montresor Università di Trento

Alberto Montresor Università di Trento !! Algoritmi e Strutture Dati! Capitolo 5 - Alberi!!! Alberto Montresor Università di Trento!! This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy of this

Dettagli

Questa soluzione va contemplata quando le lunghezze stimate dalle liste usate sono significativamente maggiori delle dimensioni di un elemento.

Questa soluzione va contemplata quando le lunghezze stimate dalle liste usate sono significativamente maggiori delle dimensioni di un elemento. Un ulteriore semplificazione si ottiene utilizzando un elemento sentinella (dummy) che non contiene informazione, ma serve a segnalare la fine (e l inizio) di una lista. Questa soluzione va contemplata

Dettagli

Lezione 7 Alberi binari: visite e alberi di ricerca

Lezione 7 Alberi binari: visite e alberi di ricerca Lezione 7 Alberi binari: visite e alberi di ricerca Informatica 6 Maggio 2015 Operazioni sugli alberi: visita La visita di un albero esplora tutti i nodi ed esegue una qualche operazione su di essi. Per

Dettagli

Prossime lezioni e tutorato!

Prossime lezioni e tutorato! Prossime lezioni e tutorato! n 15 Aprile h. 11 Lezione in laboratorio n 20 Aprile (lunedi ) h. 8.45 lezione in Aula 1 (Java) n 22 Aprile h. 11 Lezione in laboratorio Tutorato: n 13 Aprile h. 8.45 n 16

Dettagli

Alberi binari. Alberi binari di ricerca

Alberi binari. Alberi binari di ricerca Alberi binari Alberi binari Alberi binari di ricerca Cause: Inserimenti Sbilanciamento Cancellazioni Alberi binari Alberi binari di ricerca Alberi binari di ricerca bilanciati Alberi binari Alberi binari

Dettagli

Argomenti della lezione. Introduzione agli Algoritmi e alle Strutture Dati. Lista Lineare. Lista Lineare come Tipo di Dato Astratto

Argomenti della lezione. Introduzione agli Algoritmi e alle Strutture Dati. Lista Lineare. Lista Lineare come Tipo di Dato Astratto Argomenti della lezione Introduzione agli Algoritmi e alle Strutture Dati Operazioni su Liste Dr. Emanuela Merelli Tipi di Dato Astratto Lista Lineare Pila Coda Concetto di Struttura dati dinamiche Lista

Dettagli

Algoritmi Greedy. Tecniche Algoritmiche: tecnica greedy (o golosa) Un esempio

Algoritmi Greedy. Tecniche Algoritmiche: tecnica greedy (o golosa) Un esempio Algoritmi Greedy Tecniche Algoritmiche: tecnica greedy (o golosa) Idea: per trovare una soluzione globalmente ottima, scegli ripetutamente soluzioni ottime localmente Un esempio Input: lista di interi

Dettagli

ADT ALBERO BINARIO (tree)) ADT ALBERO BINARIO

ADT ALBERO BINARIO (tree)) ADT ALBERO BINARIO ADT ALBERO BINARIO (tree)) Rappresentazione collegata (puntatori a strutture) 1 ADT ALBERO BINARIO OPERAZIONI O PRIMITIVE DA REALIZZARE Operazione cons_tree: D x tree -> tree root: tree -> D left: tree

Dettagli

dizionari alberi bilanciati

dizionari alberi bilanciati dizionari alberi bilanciati dizionari ADT che supportano le seguenti operazioni membership anche detta search insert delete o remove le liste e i BST sono dizionari maggio 2002 ASD2002 - Alberi bilanciati

Dettagli

Da libro di testo Cormen et al. CAP 21: par 21.1, 21.2, 21.3 pagg. 468-477 Strutture dati per insiemi disgiunti Una struttura dati per insiemi disgiunti mantiene una collezione S={S 1,S 2,,S k } di insiemi

Dettagli

Esercitazioni di Algoritmi e Strutture Dati

Esercitazioni di Algoritmi e Strutture Dati Esercitazioni di Algoritmi e Strutture Dati III esercitazione, 17/03/2016 Tong Liu 1 ESERCIZIO PRECEDENTE Es 2.5, Il rango di un elemento di una lista di interi é la somma degli elementi successivi piú

Dettagli

Alberi binari. Ilaria Castelli castelli@dii.unisi.it A.A. 2009/2010. Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione

Alberi binari. Ilaria Castelli castelli@dii.unisi.it A.A. 2009/2010. Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione Alberi binari Ilaria Castelli castelli@dii.unisi.it Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione A.A. 2009/2010 I. Castelli Alberi binari, A.A. 2009/2010 1/20 Alberi binari

Dettagli

Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari.

Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari. Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari. Algoritmi e Strutture Dati + Lab A.A. / Informatica Università degli Studi di Bari Aldo Moro Nicola Di Mauro ALBERO

Dettagli

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

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet  francesc Algoritmi e Strutture di Dati I 1 Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc Algoritmi e Strutture di Dati I 2 Oggetti e puntatori Un oggetto è un area di memoria

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Heap Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Heap Heap binari: definizione Un heap binario è una struttura dati composta

Dettagli

Verificare se un albero binario è bilanciato

Verificare se un albero binario è bilanciato Verificare se un albero binario è bilanciato Definizione: Un albero è bilanciato nel Numero dei Nodi, brevemente n- bilanciato, quando, per ogni sottoalbero t radicato in un suo nodo, il numero dei nodi

Dettagli

Alberi ( GT. 7 ) In informatica, un albero è un modello astratto con cui viene rappresentata una struttura gerarchica

Alberi ( GT. 7 ) In informatica, un albero è un modello astratto con cui viene rappresentata una struttura gerarchica Alberi ( GT. 7 ) Albero definizioni Albero ADT (Abstract Data Type) Algoritmi di base su alberi Alberi binari Strutture dati per rappresentare alberi Implementazione AlberoBinario 1 Alberi (GT. 7) In informatica,

Dettagli

B-Alberi Esercitazioni

B-Alberi Esercitazioni B-Alberi Esercitazioni Introduzione B-Trees: alberi bilanciati di ricerca progettati per essere memorizzati su dischi magnetici. Dischi magnetici molto più lenti delle memorie ad accesso casuale. La misura

Dettagli

Alberi auto-aggiustanti

Alberi auto-aggiustanti Alberi auto-aggiustanti Dispensa didattica per il corso di Algoritmi e Strutture Dati a.a. 2007/2008 ver. 1.3 Ing. Claudio Mazzariello, Prof. Carlo Sansone 27 Maggio 2008 A differenza di altre possibili

Dettagli

Introduzione agli algoritmi Prova di esame del 30/6/2016 Prof.sse E. Fachini - R. Petreschi

Introduzione agli algoritmi Prova di esame del 30/6/2016 Prof.sse E. Fachini - R. Petreschi B Introduzione agli algoritmi Prova di esame del 30/6/2016 Prof.sse E. Fachini - R. Petreschi Si consideri l operazione di inserimento in un AVL. Si supponga di trovarsi nel caso in cui una rotazione a

Dettagli

Alberi. La definizione ricorsiva: Un albero radicato (non vuoto) è: o un singolo nodo o una radice connessa a un insieme di alberi.

Alberi. La definizione ricorsiva: Un albero radicato (non vuoto) è: o un singolo nodo o una radice connessa a un insieme di alberi. Alberi La definizione in termini di teoria dei grafi: Un grafo (non orientato) senza cicli e connesso è detto albero. Un albero radicato è una coppia < T, r > dove T è un albero e r è un suo vertice, detto

Dettagli

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

Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni. Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni. Algoritmi e Strutture Dati + Lab A.A. 14/15 Informatica Università degli Studi di Bari Aldo Moro Nicola Di Mauro

Dettagli

Alberi binari e di ricerca. Parte 1 BST e GUI. Introduzione. 1. Minimo Antenato Comune. 2. Vistita in ampiezza

Alberi binari e di ricerca. Parte 1 BST e GUI. Introduzione. 1. Minimo Antenato Comune. 2. Vistita in ampiezza Alberi binari e di ricerca Introduzione L esercitazione corrente riguarda problemi su alberi binari semplici e di ricerca. 1. Nella prima parte vengono proposti esercizi da svolgere mediante le classi

Dettagli

alberi tipo astratto, implementazione, algoritmi

alberi tipo astratto, implementazione, algoritmi alberi tipo astratto, implementazione, algoritmi argomenti tipo astratto albero definizione implementazione in Java algoritmi di visita alberi binari implementazione di alberi binari in Java ASD - Alberi

Dettagli

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente,

Dettagli

Dati e Algoritmi I (Pietracaprina) Esercizi sugli Alberi

Dati e Algoritmi I (Pietracaprina) Esercizi sugli Alberi Dati e Algoritmi I (Pietracaprina) Esercizi sugli Alberi Dati e Algoritmi I (Pietracaprina): Esercizi 1 Problema 1 Dimostrare che un albero non vuoto con n nodi interni, dove ogni nodo interno ha almeno

Dettagli

Alberi. Alberi: definizioni. Alberi Binari. Esercizi su alberi binari: metodi ricorsivi. Struttura dati per alberi generici. ASD-L - Luca Tesei

Alberi. Alberi: definizioni. Alberi Binari. Esercizi su alberi binari: metodi ricorsivi. Struttura dati per alberi generici. ASD-L - Luca Tesei Alberi Alberi: definizioni Alberi Binari Esercizi su alberi binari: metodi ricorsivi Struttura dati per alberi generici 1 Alberi Gli alberi sono strutture dati naturalmente ricorsive Un albero è un particolare

Dettagli

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Sommario Implementazione con Vettori Implementazione con Strutture Collegate Concetti

Dettagli

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione Corso di Fondamenti di Programmazione canale E-O Tiziana Calamoneri Ricorsione DD Cap. 5, pp. 160-184 KP Cap. 5, pp. 199-208 Un esempio Problema: prendere in input un intero e calcolarne il fattoriale

Dettagli

Introduzione. Heap-binomiali: un heap binomiale è un insieme di alberi binomiali.

Introduzione. Heap-binomiali: un heap binomiale è un insieme di alberi binomiali. Heap binomiali 1 Introduzione Heap-binomiali: un heap binomiale è un insieme di alberi binomiali. Alberi-binomiali: un albero binomiale è un albero ordinato definito ricorsivamente. 2 Proprietà degli alberi

Dettagli