Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4"

Transcript

1 Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4 G. Gini 2013

2 Alberi Alberi binari Rappresentazioni Proprietà Alberi n-ari attraversamento Alberi binari di ricerca Bilanciamento

3 Famiglia circa

4 The art of computer programming Donald Knuth, Enciclopedia dell informatica in 7 volumi TeX "Beware of bugs in the above code; I have only proved it correct, not tried it."

5 albero L albero e un tipo astratto di dati usato per rappresentare relazioni gerarchiche. - struttura del file system - -albero genealogico - organigramma - albero di decisione -.

6 Albero sintattico Input: Output: s=6*8+((2+42)*(5+12)+987*7*123+15*54) exp fact term fact term fact exp term fact fact exp term fact term term fact fact exp 6 * 8 + ( ( ) * ( ) * 7 * * 54 ) Osservazione: vale anche per il linguaggio naturale term fact fact term fact fact fact term fact

7 parsing di espressioni notazione algebrica normale (INORDER) (9+7)*(3-(4+1)) notazione polacca inversa - postfissa(postorder) *

8 Albero binario def ricorsiva Un albero è vuoto oppure è un nodo con due figli, sinistro e destro, chesonoa lorovoltaalberibinari. <albero-binario> ::= NIL <nodo> <albero-binario><albero-binario> Rappresentazione grafica: ogni nodo dell'albero contiene un elemento dell'insieme e due frecce, a figlio sinistro e a figlio destro. B A D C

9 primitive sugli alberi binari 1. vuoto? (cioè NULL) 2. radice 3. sinistro 4. destro 5. aggiungi-nodo 6. rimuovi-nodo Notazioni Nodo, arco Figlio, discendente, genitore,.. Radice, foglia, ramo

10 Es: contare le foglie contafoglie(x) - per x vuoto è zero, altrimenti è la somma delle foglie del sottoalbero sinistro e del sottoalbero destro int contafoglie ( tree-item x) if vuoto? (x) then return 0 if foglia(x) then return 1 else return (contafoglie (sinistro(x)) + (contafoglie (destro(x)) Funzione ausiliaria boolean foglia ( tree-item x) if vuoto? (x) then return false if vuoto?(sinistro(x)) AND vuoto?(destro(x)) then return true

11 Es: conta foglie (in C) int conta-f ( tree t ) { if ( t == NULL ) /*se vuoto*/ return 0; if ( t->left == NULL && t->right == NULL); /*se foglia*/ return 1; return conta-f( t->right ) + conta-f(t->left); }

12 Profondità e altezza Profondità = il numero di livelli dell albero A ha profondità 0. B e C sono a livello 1. Altezza = massima profondità + 1 L albero ha altezza altezza 4

13 Alcune definizioni Albero binario pieno (Full binary tree) - ogni nodo è una foglia oppure un nodo interno con 2 figli non vuoti Albero binario completo (Complete binary tree) -se l altezza dell albero è d, allora tutti i nodi tranne eventualmente quelli al livello d sono full.

14 Full Binary Tree TEOREMA: il numero di foglie in un full binary tree non vuoto è il numero dei nodi interni +1 Dimostrazione (per induzione matematica): Caso base: un full binary tree con 1 nodo interno ha due foglie Ipotesi induttiva: assumiamo che un full binary tree T con n-1 nodi interni ha n foglie Passo induttivo: dato l albero full binary tree T con n nodi interni, considera il nodo interno I con due figli foglia. Toglii figlidi I e ottieni l albero T. Per ipotesi induttiva, T è un full binary tree con n foglie. Riaggiungi i figli di I. Il numero dei nodi interni ora aumenta di 1 e diventa n. Il numero di foglie pure esso aumenta di 1.

15 Rappresentazioni per alberi Anche per gli alberi come per le liste si possono avere 2 rappresentazioni: 1. mediante array 2. a puntatori Per rappresentare un albero binario di profondità n basta un array in cui riservare memoria per ogni nodo; nel caso di alberi sbilanciati i nodi mancanti avranno un valore di default (-1). 7 / \ 3 9 / \ \

16 Dimensionare l array 1D profondità = il numero di livelli dell albero, ovvero il numero di archi da attraversare per andare dalla radice alla foglia più lontana (nell esempio 2) 7 / \ 3 9 / \ \ Un albero binario pieno (full) di profondità n ha: 1 nodo radice + 2 nodi primo livello + 4 nodi di secondo livello +... Quindi il numero dei nodi è: n = n Σ 2 i i=0

17 Implementazione in array 2D posizione genitore Figlio sinistro Figlio destro Fratello sinistro Fratello destro

18 Rappresentazione a puntatori Vediamo l albero binario come una lista di scatole di tre elementi: l informazione, il puntatore al sottoalbero sinistro, il puntatore al sottoalbero destro. B typedef struct Nodo { Tipo data; struct Nodo *left; struct Nodo *right; } nodo; A C D typedef nodo * tree;

19 nota Le foglie sono implementate come i nodi interni, quindi si spreca spazio per i puntatori nulli.

20 Ricerca elemento Restituisce NULL se non trova nell albero t il dato d, altrimenti restituisce il puntatore al primo nodo che lo contiene visita t in preordine sinistro tree trova ( tree t, d) if null(t) then return NULL if ( t->dato = d ) then return t; /*trovato*/ return (trova( t->left, d) trova( t->right, d ))

21 ricerca con assegnamenti (in C) tree trova ( tree t, int d) { tree temp; if ( t == NULL) return NULL; if ( t->dato == d ) return t; temp = trova( t->left, d ); if ( temp == NULL ) return trova( t->right, d ); else return temp; }

22 Es: calcolo della altezza int height ( tree t ) { if (t == NULL) return 0; return max ( heigth( t->left), heigth( t- >right )) + 1; } intmax( inta, intb ) { if (a >b) return a; else return b; }

23 Es: conteggio dei nodi - in C int contanodi ( tree t ) { if ( t == NULL ) return 0; else return (contanodi(t->left) + contanodi(t->right) } + 1); /* c è anche il nodo corrente */

24 Es: conta i nodi non-foglia int interni ( tree t ) { if ( t == NULL ) return 0; if ( t->left == NULL && t->right == NULL)) return 0; return 1 + interni( t->right ) + interni(t->left); } oppure int interni2 ( tree t ) { return contanodi( t ) conta-f( t ); } Si noti che la seconda versione scandisce due volte l'intero albero, impiegando circa il doppio del tempo (e lo stesso spazio in memoria)

25 Es: numero di nodi su livelli pari Consideriamo che il livello della radice, cioè 0, sia pari. Un albero col solo nodo radice ha 1 livello. int evencount ( tree t ) { if ( t == NULL ) return 0; if ( t->left == NULL ) && (t->right==null) return 1; return evencount( t->left->left) + evencount( t->left->right ) + evencount( t->right->left ) + evencount( t->right->right ) + 1; }

26 oppure con assegnamenti int evencount ( tree t ) { int n = 1; /* Il nodo corrente è sempre su livello pari, per ipotesi induttiva*/ if ( t == NULL ) return 0; if ( t->left!= NULL ) /* ci sono nodi a sinistra*/ n += evencount( t->left->left ) + evencount( t->left- >right ); if ( t->right!= NULL ) */ ci sono nodi a destra*/ n += evencount( t->right->left ) + evencount( t->right- >right ); return n; }

27 Es: numero di nodi su livelli dispari int oddcount ( tree t, int level ) { int n; if ( t == NULL ) return 0; n = oddcount( t->left, level+1 ) + oddcount( t->right, level+1 ); if ( level%2 == 1 ) /* == 0 per evencount */ n++; return n; } oppure oddcount (t) = contanodi (t) evencount(t)

28 numero di nodi su livelli dispari Si può vedere come il calcolo del numero dei nodi di livello pari partendo dal livello 1 invece che 0 int oddcount ( tree t) { if ( t == NULL ) return 0; /* vuoto*/ return evencount ( t->left ) + evencount (t->right) }

29 Albero n-ario ogni nodo ha un numero arbitrario di figli Si usa ad esempio per rappresentare tassonomie e organizzazioni gerarchiche definito ricorsivamente: <albero> =ε nodo seguito da un numero finito di alberi

30 Conversione in albero binario Il figlio di sinistra diventa sottoalbero sinistro; il sottoalbero destro contiene il primo fratello verso destra

31 Implementazioni sequenziali ad hoc Lista semplice con i nodi nell ordine di visita (ad esempio pre-order) Risparmio di spazio ma solo accesso sequenziale Occorre conservare la struttura dell albero per poterlo ricostruire esempi: se l albero è full, marca i nodi come foglie o come interni A B /DC E G/F HI usa un simbolo per marcare i NULL AB/D//CEG///FH//I//

32 Rappresentare solo foglie e struttura le liste in LISP sono alberi con l informazione (i simboli atomici) memorizzata nelle foglie. la lista (a (b c) d (e f g)) corrisponde all albero seguente In LISP è memorizzato come albero binario

33 con diverso numero di puntatori Ingestibile

34 Rappresentazione con 2 puntatori A B C D E F G H Il nodo è una struttura con 3 campi: 1. informazione, 2. puntatore al primo figlio, 3. puntatore al fratello a destra I A null Sottoalbero B B Sottoalbero C C null

35 Realizzazione con 3 puntatori / / / / / / / / / / / / / / / / Padre Nodo Primo Figlio Fratello

36 Attraversamento di albero Un processo per visitare i nodi di un albero in un dato ordine è detto attraversamento (tree traversal) Ogni attraversamento è una enumerazione dei nodi dell albero

37 Algoritmi di visita degli alberi per visitare tutti i nodi di un albero In profondità (depth-first search, a scandaglio, DFS) Vengono visitati i rami, uno dopo l altro Tre varianti in, pre, post-ordine In ampiezza (breadth-first search, a ventaglio, BFS) A livelli, partendo dalla radice

38 Modi di visita albero binario Pre-ordine, o pre-visita, o anticipato: visita ogni nodo prima di visitare i suoi figli Post-ordine, o post-visita, o posticipato: visita ogni nodo dopo aver visitato i suoi figli In-ordine, o simmetrico: visita il sottoalbero di sinistra, quindi il nodo, poi il sottoalbero di destra Si estende per albero n-ario

39 Esempi visita df Previsita Postvisita Simmetrica

40 df - ordine anticipato - preorder T a b e c d f g a b c d e f g void preorder (tree rt) { if (rt == NULL) return; // Empty visit(rt); preorder(rt->left); preorder(rt->right); }

41 df - ordine posticipato - postorder a T b e c d f g c d b f g e a void postorder(tree rt) { if (rt == NULL) return; // Empty postorder(rt->left); postorder(rt->right); visit(rt); }

42 df - ordine simmetrico - inorder T a b e c d f g void inorder(tree rt) { if (rt == NULL) return; // Empty inorder(rt->left); visit(rt); inorder(rt->right); } c b d a f e g

43 in ampiezza b a T e c d f g Sequenza: a b e c d f g

44 Albero binario programma in C typedef struct Tree { int data; struct Tree *left; struct Tree *right; } TREE; void insertnum(int i); void orderedinsert(tree *, int); void deepfirstvisit(tree *t); void breadthfirstvisit(tree *t); int search(tree *t, int i) ; TREE *root;

45 void main() { int i; do { printf("inserire un intero (-1 = fine):"); scanf("%d",&i); if(i==-1) break; insertnum(i); } while(i!=-1); deepfirstvisit(root); printf("\n"); breadthfirstvisit(root); } printf("\ninserire il valore da cercare: "); scanf("%d",&i); if(search(root,i)) printf("trovato\n"); else printf("niente da fare!\n");

46 void insertnum(int i) { if(root==null) { root=(tree *) malloc(sizeof(tree)); root->data=i; root->left=null; root->right=null; } else orderedinsert(root,i); } int search(tree *t, int numero) { if(t==null) return 0; if(numero==t->data) return 1; if(numero > t->data) return search(t->right,numero); else return search(t->left,numero); }

47 void orderedinsert(tree *nodo, int numero) { TREE *nuovo; if(numero == nodo->data) return; if(numero > nodo->data) { if(nodo->right == NULL) { nuovo=(tree *) malloc(sizeof(tree)); nuovo->data=numero; nuovo->left=null; nuovo->right=null; nodo->right=nuovo; } else orderedinsert(nodo->right, numero); } else { if(nodo->left == NULL) { nuovo=(tree *) malloc(sizeof(tree)); nuovo->data=numero; nuovo->left=null; nuovo->right=null; nodo->left=nuovo; } else orderedinsert(nodo->left, numero); }}

48 void deepfirstvisit(tree *t) { if(t==null) return; deepfirstvisit(t->left); deepfirstvisit(t->right); printf("%d - ",t->data); } = postorder void breadthfirstvisit(tree *t) { if(t==null) return; printf("%d - ",t->data); breadthfirstvisit(t->left); breadthfirstvisit(t->right); } = preorder

49 Alberi adatti per applicazioni di data base, di dizionari, etc

50 Alberi binari per rappresentare un insieme ordinato I valori nel sottoalbero di sinistra sono minori di quello del padre I valori nel sottoalbero di destra sono maggiori di quello del padre

51 Esempi rappresentare con alberi binari diversi l insieme ordinato dei numeri dispari da 1 a / \ / \ / \ / \ \ / \ / / \ \ 11

52 Ricerca in albero binario ordinato Ricerca del valore 4 66 T La radice contiene 6 4 < 6 4 sta nel sottoalbero sinistro di di

53 Ricerca del valore 4 66 T 4 > 2 4 sta nel sottoalbero destro di di

54 Ricerca del valore 4 66 T 4 = 4 trovato!

55 Pseudocodice per ricerca boolean element-of?(item x, tree-item tree) if vuoto?(tree) then return false if x = radice(tree) then return true if x < radice(tree) then return element-of(x, sinistro(tree)) if x > radice(tree) then return element-of(x, destro(tree))

56 Ricerca in C come predicato typedef struct Nodo { Tipo data; struct Nodo *left; struct Nodo *right; } nodo; typedef nodo * tree; int searchitem ( Tipo item, tree node) { if ( node == NULL) return 0; If (item == node -> data ) return 1; if ( item < node -> data ) return searchitem ( item, node -> left ); else return searchitem ( item, node -> right ); }

57 Vantaggi alberi binari ordinati Per vedere se un elemento x è contenuto basta confrontare x con radice: se x è minore basta cercare nel sottoalbero sinistro, se maggiore nel destro. Quanto è vantaggioso? Se l'albero è bilanciato i sottoalberi conterranno la metà degli elementi, quindi ad ogni passo dimezziamo il numero dei nodi da esaminare. Il numero dei passi crescerà quindi come log 2 n.

58 Dizionari Dizionario Insieme dinamico che implementa le seguenti funzionalità Cerca un item Inserisci un item Cancella un item Come implementarlo? Array (ordinato) Lista (non ordinata) Albero binario di ricerca

59 Alberi binari di ricerca (ABR) Definizione Ogni nodo u contiene una chiave u.key associata ad un valore u.value Le chiavi appartengono ad un insieme totalmente ordinato Proprietà 1. Le chiavi dei nodi del sottoalbero sinistro di u sono minori di u.key 2. Le chiavi dei nodi del sottoalbero destro di u sono maggiori di u.key 3. Tutti nodi i del sottoalbero sinistro di u sono tali che per tutti nodi r del sottoalbero destro di u, l.key <= r.key

60 Alberi binari di ricerca (ABR) Proprietà di ricerca Le proprietà 1. e 2. permettono di realizzare un algoritmo di ricerca dicotomica Proprietà di ordine Come visitare l'albero per ottenere la lista ordinata dei valori? Depth first inorder implementazione Ogni nodo deve mantenere Figlio sinistro, destro Padre Chiave Valore Figlio sinistro Padre Key, Value Figlio destro

61 Ricerca - chiave tree ricerca (item x, tree-item tree) if vuoto?(tree) then return NULL if x= tree.key then return tree if x < tree.key then return ricerca (x, left(tree)) if x > tree.key then return ricerca (x, right (tree))

62 Ricerca del minimo e del massimo Sottoalbero con radice 2: - minimo 1 - massimo 4 66 T Sottoalbero con radice 8: - minimo 8 - massimo

63 Ricerca minimo e massimo L elemento minimo è quello più a sinistra item MINIMUM (tree-item x) if x.left = NULL then return x return MINIMUM (x.left) L elemento massimo quello più a destra item MAXIMUM (tree-item x) if x.right = NULL then return x return MAXIMUM (x.right)

64 in forma iterativa Montresor usa notazione con.

65 Ricerca successore/predecessore Definizione Il successore di un nodo u èil più piccolo nodo maggiore di u PRIMO CASO u ha un figlio destro Il successore u' è il minimo del sottoalbero destro di u u 2 6 T Esempio: successore di 2 è u'

66 Ricerca successore/predecessore SECONDO CASO u non ha un figlio destro Il successore è il primo avo u' tale per cui u sta nel sottoalbero sinistro di u' 22 u' 66 T 88 Esempio: successore di 4 è u

67 Ricerca successore/predecessore

68 Ricerca: costo computazionale Le operazioni di ricerca sono confinate ai nodi posizionati lungo un singolo percorso dalla radice ad una foglia Tempo di ricerca: dipende dall altezza caso pessimo? L'albero è una sequenza lineare n passi caso ottimo? albero è completo, o bilanciato. L'altezza dell'albero con n nodi è log n h = altezza dell albero

69 Inserimento e rimozione Quando si inserisce o si rimuove un elemento la struttura dell albero cambia. L albero modificato deve mantenere le proprietà di un albero binario di ricerca. L inserimento risulta essere un operazione immediata. La rimozione di un elemento è più complicata, proprio perché bisogna essere certi che l albero rimanga un albero binario di ricerca. Dopo un certo numero di operazioni un albero si può sbilanciare

70 Inserimento Inserimento chiave 5 Dovrà essere nel sottoalbero sinistro Si inserisce sempre come foglia T 88 5 < 6 5 > 2 5 >

71 Inserimento Inserire z con key = y z

72 Inserimento - esempio Inserire la sequenza <5, 4, 7, 2, 6, 8>

73 Inserimento - esempio Inserire la sequenza <5, 4, 7, 2, 6, 8>

74 Inserimento - esempio Inserire la sequenza <8, 7, 6, 4, 5, 2> La struttura dell albero risulta diversa a seconda della sequenza di inserimento! L inserimento può portare ad avere alberi sbilanciati 2 5

75 Inserimento in C void orderedinsert(tree *nodo, int numero) { TREE *nuovo; if(numero == nodo->data) return; if(numero > nodo->data) { if(nodo->right == NULL) { nuovo=(tree *) malloc(sizeof(tree)); nuovo->data=numero; nuovo->left=null; nuovo->right=null; nodo->right=nuovo; } else orderedinsert(nodo->right, numero); } else { if(nodo->left == NULL) { nuovo=(tree *) malloc(sizeof(tree)); nuovo->data=numero; nuovo->left=null; nuovo->right=null; nodo->left=nuovo; } else orderedinsert(nodo->left, numero); }}

76 inserimento in C tree orderedinsert(tree nodo, int numero) { tree *nuovo;/* ritorna il puntatore all albero*/ if(numero == nodo->data) return nodo; if(numero > nodo->data) { /* va inserito a destra if(nodo->right == NULL) {/* non c è figlio destro*/ nuovo=malloc(sizeof(tree)); nuovo->data =numero; nuovo->left =NULL; nuovo->right =NULL; nodo->right =nuovo; return nodo; } else return orderedinsert(nodo->right, numero); } else { /* va inserito a sinistra*/ if(nodo->left == NULL) { nuovo=malloc(sizeof(tree)); nuovo->data=numero; nuovo->left=null; nuovo->right=null; nodo->left=nuovo; return nodo; } else return orderedinsert(nodo->left, numero); }}

77 Inserimento (Cormen) con notazione funzionale scendere nell'albero fino a che non si raggiunge il posto in cui il nuovo elemento deve essere inserito, ed aggiungerlo come foglia TREE-INSERT(T, z) 1 y := NIL //padre 2 x := root(t) //figlio 3 while x NIL //cerca dove inserire 4 do y := x //memorizza il padre 5 if key (z)< key(x) 6 then x := left (x) //scende a sinistra 7 else x := right(x) //scende a destra secondo il confronto 8 z.p := y // inserisci z come figlio di y 9 if y = NIL 10 then root(t) := z //l'albero T e' vuoto e z diventa la radice 11 else if key(z) < key(y) 12 then left(y) := z 13 else right(y) := z

78 Complessità inserimento Per inserire z si usano due puntatori y e x. Il puntatore a x scende l albero, y punta al padre di x. Nel ciclo while i due puntatori (x e y) scendono l albero. x scende al figlio sinistro o destro a seconda dell esito del confronto di key[z] con key[x]. Ci si ferma quando x = NIL e x occupa la posizione in cui z verrà inserito. I passi necessari per l inserimento sono non più del cammino massimo tra la radice e una foglia (cioè l altezza). Nel caso ricorsivo, il numero delle chiamate ricorsive dipende da h.

79 cancellazione Cancellare z, che ha chiave 14 Caso 1: z senza figli (foglia) si rimuove z

80 cancellazione Caso 2: cancellare z (che ha chiave 16) con 1 figlio si riattacca il figlio al padre di z z

81 cancellazione Caso 3: cancellare z (che ha chiave 12) con 2 figli z y Successore di z: Viene rimosso e va al posto di z

82 cancellazione Caso 3: z con 2 figli y z 12

83 cancellazione tre casi: 1. Se z non ha figli, allora si modifica puntatore a z, che punta non più a z ma a NIL. 2. Se z ha un unico figlio, allora si taglia fuori z dall albero, facendo puntare il puntatore a z all unico figlio di z. 3. Se z ha due figli, allora si individua il successore, ossia il minimo del suo sottoalbero destro. 1.Il successore y ha nessun figlio o 1 figlio. Quindi y prende il posto di z, riconducendosi al caso 1 e 2. Alla fine i dati in y vengono copiati in z.

84 Passi necessari L operazione di rimozione può richiede che SUCCESSOR(z) venga eseguito. SUCCESSOR(z) richiede tempo che dipende da h anche TREE-INSERT() e TREE-DELETE() richiedono tempo che dipende dall altezza

85 Cancellazione pseudocodice TREE-DELETE(T, z) 1 if left (z)= NIL or right(z) = NIL 2 then y := z // z ha 0 o 1 figlio, copialo in y 3 else y := TREE-SUCCESSOR(z) // z ha 2 figli, trova succ(z) 4 if left (y) NIL // y nodo da eliminare 5 then x := left(y) // x figlio di y 6 else x := right (y)

86 Cancellazione -continua 7 if x NIL then // se y ha il figlio 8 then p(x) := p(y) // taglia fuori y e aggiorna il padre 9 if p (y)= NIL 10 then root (T):= x // se y è la radice, x diventa radice 11 else if y = left(p(y)) // collega x al padre di y 12 then left(p(y)) := x 13 else right(p(y)) := x 14 if y z then // se y è il successore 15 key (z):= key(y) // ricopia i dati di y in z 16 return y

87 Cancellazione correttezza Caso 1 - nessun figlio Eliminare foglie non cambia la proprietà di ordine dei nodi rimanenti Caso 2 - solo un figlio (destro o sinistro) Se u è il figlio destro (sinistro) di p, tutti i i valori nel sottoalbero destro sono maggiori (minori) di p Quindi f può essere attaccato come figlio destro (sinistro) di p al posto di u Caso 3 - due figli Il successore s è sicuramente maggiore di tutti i nodi del sottoalbero sinistro di u è sicuramente minore di tutti i nodi del sottoalbero destro di u Quindi può essere sostituito a u

88 Modifica: costo computazionale Le operazioni di modifica sono confinate ai nodi posizionati lungo un singolo percorso dalla radice ad una foglia In tempo di ricerca dipende dall altezza dell albero Caso pessimo: l'albero è organizzato come una sequenza lineare - n Caso ottimo: l'albero è completo, o bilanciato. In questo caso, l'altezza dell'albero è log n h = altezza dell albero

89 bilanciamento Fattore di bilanciamento Il fattore di bilanciamento β(v) di un nodo v è la massima differenza di altezza fra i sottoalberi di v Esempio: albero perfetto: β(v)=0 per ogni nodo v In generale: Sono necessarie tecniche per mantenere bilanciato l'albero Vedremo alberi rosso-neri

90 Per approfondire Stanford Encyclopedia of philosophy Temi generali (Recursion, computer science,..) Autori

91 Esercizio 1 Sia data la seguente struttura per la memorizzazione di alberi binari etichettati con numeri interi: typedef struct nodo { int info; struct nodo *left, *right; } NODO; typedef NODO *tree; scrivere due funzioni ricorsive 1. int sommanodi(tree t), che somma i valori delle etichette nell'albero 2. int cercamax(tree t), che cerca il valore dell'etichetta massima dell'albero.

92 Soluzione 1 int sommanodi(tree t) { if (t==null) return 0; return t->info+sommanodi(t->left)+sommanodi(t->right);} int max(int a,int b) { if(a>b) return a; else return b;} int max3(int a,int b,int c) { return max(a,max(b,c));} int cercamax(tree t) { if (t==null) return 0; if (t->left==null && t->right==null) return t->info; if(t->left==null) return max(t->info, cercamax(t->right)); if(t->right==null) return max(t->info, cercamax(t->left)); return max3(cercamax(t->right), cercamax(t->left), t->info); }

93 Esercizio 2 Un albero binario si dice isobato se tutti i cammini dalla radice alle foglie hanno la stessa lunghezza Data la seguente definizione di albero typedef struct EL { int dato; struct EL *left; struct EL *right; } Node; typedef Node *tree; codificare una funzione che riceve in input un albero e restituisce 1 se l albero è isobato, 0 altrimenti.

94 Soluzione 2 Uso funzione ausiliaria int contaprofonditaseuguale(tree t) { int s, d; if(t==null) return 0; s=contaprofonditaseuguale(t->left); d=contaprofonditaseuguale(t->right); } if(d==-1 s==-1) return -1 if(d==s) return d+1; if(d==0) return s+1; if(s==0) return d+1; return -1;//d!=s int isobato(tree t) { if(contaprofonditaseuguale(t)==-1) return 0; else return 1; }

95 Esercizio 3 Si consideri la seguente definizione di un albero binario typedef struct EL { int dato; struct EL * left, right; } node; typedef node * tree; Definiamo un albero come "artussiano" se è composto solo da nodi foglia nodi con un solo figlio nodi con due figli aventi lo stesso numero di discendenti Codificare una funzione che riceve in input un albero e restituisce 1 se l albero è "artussiano", 0 altrimenti. Nel risolvere il problema è consigliato servirsi di opportune funzioni ausiliarie.

96 Soluzione 3 int contanodi ( tree t ) { if ( t == NULL ) return 0; else return (contanodi(t->left) + contanodi(t->right) + 1); } int artussiano(tree t) { if(t==null) return 1; if(t->left==null && t->right==null) return 1; if(t->left==null) return artussiano(t->right) if(t->right==null) return artussiano(t->left) if(contanodi(t->left)==contanodi(t->right) && artussiano(t->left) && artussiano(t->right)) return 1; return 0; }

97 Esercizio 4 Si consideri un albero binario in cui il valore dei nodi è sempre positivo. Supponiamo che percorrendo un cammino dalla radice alle foglie si totalizzi un punteggio pari alla somma dei valori contenuti nei nodi percorsi. - Scrivere una funzione maxpunti che calcola il punteggio massimo che possiamo totalizzare percorrendo un cammino dalla radice alle foglie. -Vogliamo percorrere l albero dalla radice ad una foglia totalizzando esattamente un certo punteggio. Scrivere una funzione esistecammino che dati un albero ed un intero k, dice se esiste un cammino dalla radice ad una foglia che permette di totalizzare esattamente k punti.

98 Soluzione 4 int maxpunti ( tree t ) { int D, S; if (t == NULL) return 0; S = maxpunti( t->left ); D = maxpunti( t->right ); if ( S > D ) return S + t->dato; else return D + t->dato; } int esistecammino ( tree t, int k ) { int D, S; if (t == NULL && k==0) return 1; if (t == NULL) return 0; if (k t->dato <0) return 0; return (esistecammino(t->left, k - t->dato) esistecammino(t->right, k - t->dato)); }

99 Esercizio 5 Si consideri la seguente definizione di un albero binario typedef struct EL { int dato; struct EL * left, right; } node; typedef node * tree; Scrivere una funzione che riceve il puntatore alla radice di un albero e lo scandisce interamente costruendo una lista tale che abbia tanti nodi quante sono le foglie dell albero e che ogni nodo della lista punti ad una diversa foglia dell albero. La funzione deve restituire al chiamante il puntatore all inizio della lista creata. typedef struct ELLista { tree foglia; struct ELLista * next; } nodelista; typedef nodelista * Lista; Si noti che esistono diversi modi di visitare l albero che originano diverse liste come risultato.

100 Soluzione 5 void crealista(tree t, Lista *lis) { Lista temp; if(t==null) return; if(t->left==null && t->right==null) { temp=*lis; *lis=(lista)malloc(sizeof(nodolista)); *lis->foglia=t; *lis->next=temp; } if(t->left!=null) crealista(t->left, lis); if(t->right!=null) crealista(t->right, lis); }

101 Esercizio 6 Si definisca una struttura dati adatta a rappresentare un albero N- ario. Per semplicità si consideri il caso in cui i nodi contengono, come dati utili, dei semplici numeri interi. Ogni nodo contiene, invece di una coppia di puntatori a nodi, come nel caso degli alberi binari, una lista di puntatori a nodo. Tale lista è una lista concatenata semplice, realizzata tramite la struttura Ramo. typedef Nodo * Albero; typedef struct Branch { Albero child; struct Branch * next; } Ramo; typedef struct Knot { int dato; struct Branch * rami; } Nodo; Si progetti la funzione int conta( ) che conta il numero di nodi di un albero N-ario.

102 soluzione 6 int contanodi ( Albero t ) { if ( t == NULL ) return 0; else return 1 + contarami( t->rami ); } int contarami ( Ramo * b ) { if ( b == NULL ) return 0; else return contanodi( b->child ) + contarami( b->next ); }

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

L albero e un tipo astratto di dati usato per rappresentare relazioni gerarchiche. Lezioni di C L albero e un tipo astratto di dati usato per rappresentare relazioni gerarchiche. qstruttura del file system qalbero genealogico qorganigramma qalbero di decisione q... s=6*8+((2+42)*(5+12)+987*7*123+15*54)

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

Esercizio. Sia data la seguente struttura per la memorizzazione di alberi binari etichettati con numeri interi: typedef struct nodo {

Esercizio. Sia data la seguente struttura per la memorizzazione di alberi binari etichettati con numeri interi: typedef struct nodo { Esercizi alberi Esercizio Sia data la seguente struttura per la memorizzazione di alberi binari etichettati con numeri interi: typedef struct nodo { NODO; int info; struct nodo *left, *right; typedef NODO

Dettagli

Alberi binari e alberi binari di ricerca

Alberi binari e alberi binari di ricerca Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Alberi Un albero è una collezione non vuota di: nodi con nome e informazioni

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 Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica giovedì 9

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

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 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

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

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Strutture Elementari Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 29 ottobre 2008 Strutture Dati Astratte Il concetto di dato Il concetto

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 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

Alberi ed Alberi Binari di Ricerca

Alberi ed Alberi Binari di Ricerca Alberi ed Alberi Binari di Ricerca 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

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Maria Rita Di Berardini 2, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 2 Polo di Scienze Università di Camerino ad Ascoli Piceno Il concetto di dato Il concetto

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. Definizione, realizzazione e algoritmi elementari. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 7

Alberi. Definizione, realizzazione e algoritmi elementari. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 7 Alberi Definizione, realizzazione e algoritmi elementari Cosa sono gli alberi? Strutture gerarchiche di ogni tipo Generale Colonnello 1 Colonnello k Maggiore 1,1 Maggiore 1,m Capitano Maggiore k,1 Maggiore

Dettagli

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE PROGRAMMAZIONE II canale A-D 2007-2008 14 luglio 2008 TRACCIA DI SOLUZIONE 1. Si vogliono realizzare mediante puntatori delle liste circolari, cioè delle liste tali che l ultimo elemento della lista punta

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 I Un albero è un caso particolare di grafo I I I I È costituito da un insieme di nodi collegati tra di loro mediante archi Gli archi sono orientati (ogni arco esce da un nodo origine

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 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 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

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

Strutture dati Alberi binari

Strutture dati Alberi binari Strutture dati - 2 - Alberi binari Definizione L albero è un insieme di elementi (nodi), sui quali è definita una relazione di discendenza con due proprietà: esiste un solo nodo radice senza predecessori

Dettagli

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

d. Cancellazione del valore 5 e. Inserimento del valore 1 Esercizio1 Si consideri un albero binario non vuoto in cui a ciascun nodo v è associato un numero reale v.val. Scrivere un algoritmo che, dato in input l'albero T e un numero reale x, restituisce true

Dettagli

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

Alberi. CORDA Informatica. A. Ferrari. Testi da. Marco Bernardo Edoardo Bontà. Dispense del Corso di. Algoritmi e Strutture Dati Alberi CORDA Informatica A. Ferrari Testi da Marco Bernardo Edoardo Bontà Dispense del Corso di Algoritmi e Strutture Dati Albero - definizione Albero Figli, fratelli, nodi, foglie Grado, livello, altezza,

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

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

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Capitolo 3 Strutture dati elementari Gestione di collezioni di oggetti Tipo di dato: Specifica una collezione di oggetti e delle operazioni di interesse su tale collezione (es.

Dettagli

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

Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z Anno Accademico 2002-2003 9 luglio 2002-03 Domanda 1, punti 6 Si consideri la seguente classe Java, in cui,

Dettagli

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

Esempi. Albero di interi. Struttura che non è un albero! albero si dice "grafo diretto" un insieme di nodi legati "a due a due" da archi direzionati (puntatori) un albero è un grafo diretto in cui ogni nodo può avere un solo arco entrante ed un qualunque numero

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

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

Prova di Algoritmi e s.d. (1o anno) 17 Settembre TESTO e RISPOSTE Prova di Algoritmi e s.d. (1o anno) 17 Settembre 2002 TESTO e RISPOSTE Esercizio 1 (punti 7 in prima approssimazione) Consideriamo alberi binari con insieme dei nodi NODI = N (l'insieme dei naturali).

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. Capitolo 3 Strutture dati elementari

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari lgoritmi e Strutture Dati Capitolo 3 Strutture dati elementari Gestione di collezioni di oggetti Tipo di dato: Specifica una collezione di oggetti e delle operazioni di interesse su tale collezione (es.

Dettagli

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4 Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4 Bilanciamento negli alberi di ricerca @ G. Gini 2013 Dizionari Dizionario Insieme dinamico che implementa le seguenti funzionalità Cerca

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

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

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

Algoritmi e Strutture Dati Laboratorio 20/10/2008. Prof. Pier Luca Lanzi

Algoritmi e Strutture Dati Laboratorio 20/10/2008. Prof. Pier Luca Lanzi Algoritmi e Strutture Dati Laboratorio 20/10/2008 Primo Esercizio 2 Scrivere un programma per misurare il tempo necessario per ordinare un vettore di interi contenente 10-10 7 elementi utilizzando l insertion

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

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

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

algoritmi e strutture di dati

algoritmi e strutture di dati algoritmi e strutture di dati alberi radicati m.patrignani nota di copyright queste slides sono protette dalle leggi sul copyright il titolo ed il copyright relativi alle slides (inclusi, ma non limitatamente,

Dettagli

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

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 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 Alberi binari Giovanna Melideo melideo@di.univaq.it 1 Alberi

Dettagli

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

Indici multilivello dinamici (B-alberi e B + -alberi) Alberi di ricerca - 1. Un esempio. Alberi di ricerca - 3. Alberi di ricerca - 2 INDICI MULTILIVELLO DINAMICI Indici multilivello dinamici (B-alberi e B + -alberi) Gli indici multilivello dinamici (B-alberi e B + -alberi) sono casi speciali di strutture ad albero. Un albero è formato

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

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

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

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

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

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

In questa lezione. Alberi binari: [CLRS09] cap. 12 per la visita inorder. visite e esercizi su alberi binari. Prof. E. Fachini - Intr. Alg. In questa lezione Alberi binari: visite e esercizi su alberi binari [CLRS09] cap. 12 per la visita inorder!1 Visita inordine di un albero binario visita inordine(x) se l albero x non è nullo allora visita

Dettagli

Algoritmi e Strutture di Dati

Algoritmi e Strutture di Dati Algoritmi e Strutture di Dati Alberi radicati m.patrignani Nota di copyright queste slides sono protette dalle leggi sul copyright il titolo ed il copyright relativi alle slides (inclusi, ma non limitatamente,

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

Struttura dati Dizionario

Struttura dati Dizionario Struttura dati Dizionario Un dizionario è : un insieme di coppie (elemento, chiave) Sul campo chiave è definita una relazione d'ordine totale Su cui definiamo le seguenti operazioni: insert(elem e, chiave

Dettagli

Strutture Dati Dinamiche. Monday, January 10, 2011

Strutture Dati Dinamiche. Monday, January 10, 2011 Strutture Dati Dinamiche 1 Che cos è una struttura dati Per struttura dati si intende comunemente la rappresentazione dei dati e le operazioni consentite su tali dati In linguaggi più evoluti del C esistono

Dettagli

Alberi binari di ricerca

Alberi binari di ricerca Alberi binari di ricerca Definizione Un albero si dice albero binario di ricerca è un albero binario in cui: - Ogni nodo è caratterizzato un valore chiamato chiave - L insieme delle chiavi è totalmente

Dettagli

In questa lezione Alberi binari di ricerca

In questa lezione Alberi binari di ricerca In questa lezione Alberi binari di ricerca!1 Dizionari Un dizionario è una struttura dati costituita da un insieme con le operazioni di inserimento, cancellazione e verifica di appartenenza di un elemento.

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

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

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

algoritmi e strutture di dati

algoritmi e strutture di dati 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

Dettagli

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

Prova di Algoritmi e s.d. (1o anno) 7 Febbraio TESTO e RISPOSTE Prova di Algoritmi e s.d. (1o anno) 7 Febbraio 2003 TESTO e RISPOSTE Esercizio 1 (punti 5 in prima approssimazione) Consideriamo alberi binari con insieme dei nodi NODI = N (l'insieme dei naturali). Riportiamo

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

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

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

Esercizio. 2 i=i*2) j=j*2) Esercizio 1 Esercizio 2 i=i*2) j=j*2) Soluzione Il frammento è composto da due parti quasi identiche. L unica differenza è il modo in cui crescono i contatori. Nella prima parte la crescita è lineare mentre

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

Tutoraggio Informatica Generale Inserimento e cancellazione in un ABR Counting Sort

Tutoraggio Informatica Generale Inserimento e cancellazione in un ABR Counting Sort Tutoraggio Informatica Generale Inserimento e cancellazione in un ABR Counting Sort A.Festa festa@mat.uniroma1.it 20-5-2010 1 Inserimento e cancellazione in ABR Quando si inserisce o si rimuove un elemento

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

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

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

Dettagli

ALBERI BINARI DI RICERCA

ALBERI BINARI DI RICERCA ALBERI BINARI DI RICERCA ABR Abbiamo visto che la scelta del tipo di dato astratto da utilizzare dipende dal problema. Se la situazione è tale per cui la lista deve essere continuamente modificata in dimensione

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

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati 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

Dettagli

Algoritmi e Strutture Dati. Alberi

Algoritmi e Strutture Dati. Alberi Algoritmi e Strutture Dati Alberi Alberto Montresor Università di Trento 2017/10/19 This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. Sommario 1 Introduzione

Dettagli

Algoritmi e Strutture Dati. Lezione 3

Algoritmi e Strutture Dati. Lezione 3 Algoritmi e Strutture Dati Lezione 3 www.iet.unipi.it/a.virdis Antonio Virdis antonio.virdis@unipi.it 1 Sommario Alberi Binari di Ricerca Gestione Stringhe Progettazione Esercizi 2 3 4 Alberi Binari 10

Dettagli

In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi.

In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi. In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi. 1 strutture dati (astratte) Una struttura dati astratti consiste di uno o più insiemi con delle operazioni

Dettagli

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

Esercizi su ABR. Prof. E. Fachini - Intr. Alg.!1 Esercizi su ABR Confronto proprietà ABR e Max-Heap. Proprietà del cammino radice-foglia individuato da una ricerca. Fusione di due ABR. Il successivo calcolato dalla radice Costruzione di un ABR bilanciato

Dettagli

Esercitazione 4 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016

Esercitazione 4 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016 Esercitazione 4 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016 Tong Liu April 5, 2016 Alberi Esercizio 1 * [Libro 5.2] Dato un albero ordinato i cui nodi contengono valori interi, se ne vogliono

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

Multi-way search trees

Multi-way search trees Multi-way search trees GT. 10.4 1 Argomenti Multi-way search trees Multi-way searching 9 (2,4) Trees 2 5 7 10 14 2 1 Alberi Binari di Ricerca Bilanciati n numero di chiavi (entry(key,elem)) AVL tree log(

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

ALBERI. Un Albero. Un grafo aciclico che non è un albero: due archi entranti in uno stesso nodo

ALBERI. Un Albero. Un grafo aciclico che non è un albero: due archi entranti in uno stesso nodo ALBERI Un Albero è un grafo orientato connesso e aciclico, in cui inoltre esattamente un nodo (detto radice) non ha nessun arco entrante, e ogni altro nodo ha esattamente un arco entrante. Ogni nodo viene

Dettagli

Esercizi di riepilogo

Esercizi di riepilogo Esercizi di riepilogo Esercizio (tde 14-11-2008) Definiamo sequenza monotona crescente in un vettore una sequenza di elementi contigui in cui ogni elemento in posizione i+1 è più grande di quello in posizione

Dettagli

Informatica 3. LEZIONE 17: Alberi generici. Modulo 1: Definizione e ADT Modulo 2: Implementazione Modulo 3: Alberi e classi di equivalenza

Informatica 3. LEZIONE 17: Alberi generici. Modulo 1: Definizione e ADT Modulo 2: Implementazione Modulo 3: Alberi e classi di equivalenza Informatica 3 LEZIONE 17: Alberi generici Modulo 1: Definizione e ADT Modulo 2: Implementazione Modulo 3: Alberi e classi di equivalenza Informatica 3 Lezione 17 - Modulo 1 Definizione e ADT Introduzione

Dettagli

Introduzione Implementazione (1)

Introduzione Implementazione (1) Informatica 3 Informatica 3 LEZIONE 15: Implementazione di alberi binari - BST Modulo 1: Implementazione degli alberi binari Modulo 2: BST Lezione 15 - Modulo 1 Implementazione degli alberi binari Politecnico

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

Dati e Algoritmi 1: A. Pietracaprina. Alberi Binari

Dati e Algoritmi 1: A. Pietracaprina. Alberi Binari Dati e Algoritmi 1: A. Pietracaprina Alberi Binari 1 Definizione Un alberto binario T è un albero ordinato in cui Nota ogni nodo interno ha 2 figli ogni nodo non radice è etichettato come figlio sinistro

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. Alberi: Esempio di utilizzo

Alberi. Alberi: Esempio di utilizzo Sono strutture dati del tipo: Alberi SOTTOALBERO n1 RADICE DELL ALBERO () n2 n n4 Profondità o Livello 0 1 n n n n n n 2 NODI FOGLIA (LEAF NODES) 1 Alberi: Esempio di utilizzo Rappresentazione di un file

Dettagli

now is the for men all good come aid

now is the for men all good come aid Alberi binari Supponiamo di volere gestire il problema di contare le occorrenze di tutte le parole presenti in un particolare input. Poichè la lista delle parole non è nota a priori, non siamo in grado

Dettagli

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Algoritmo di ordinamento sul posto che ha tempo di esecuzione : QuickSort Algoritmo di ordinamento sul posto che ha tempo di esecuzione : O(n2 ) nel caso peggiore O(n log n) nel caso medio Nonostante le cattive prestazioni nel caso peggiore, rimane il miglior algoritmo

Dettagli

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

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

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

Lezione 6: 12 Novembre 2013

Lezione 6: 12 Novembre 2013 Tutorato di Algoritmi e Strutture Dati [CT0371] Tutor: Alberto Carraro Lezione 6: 12 Novembre 2013 Disclaimer: Queste note non sono state sottoposte al consueto controllo riservato alle pubblicazioni ufficiali.

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

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 di ricerca

Alberi binari di ricerca Alberi binari di ricerca Definizione Un albero si dice albero binario di ricerca è un albero binario in cui: - Ogni nodo è caratterizzato un valore chiamato chiave - L insieme delle chiavi è totalmente

Dettagli