ADT ALBERO BINARIO (tree)! n Rappresentazione collegata (puntatori a strutture)

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "ADT ALBERO BINARIO (tree)! n Rappresentazione collegata (puntatori a strutture)"

Transcript

1 ADT ALBERO BINARIO (tree)! n Rappresentazione collegata (puntatori a strutture) 1

2 ADT ALBERO BINARIO OPERAZIONI PRIMITIVE DA REALIZZARE Operazione! cons_tree: D x tree x tree -> tree! root: tree -> D! Descrizione! Costruisce un nuovo albero, che ha l elemento fornito come radice con figli i due sottoalberi dati! Restituisce l elemento radice dell albero! left: tree -> tree! Restituisce il sottoalbero sinistro! right: tree -> tree! emptytree: -> tree! empty: tree-> boolean!! Restituisce il sottoalbero destro! Restituisce (costruisce) l albero vuoto! Restituisce vero se l albero dato è vuoto, falso altrimenti! 2

3 ADT ALBERO BINARIO OPERAZIONI DERIVATE (etc etc) Operazione! preorder: tree! inorder: tree! postorder: tree! member: D x tree ->! boolean! height: tree -> int! Descrizione! Visita in preordine (ordine anticipato)! Visita in ordine ( simmetrico)! Visita in postordine ( ritardato)!! Ricerca di un elemento nell albero! Calcola l altezza di un albero! nodi: tree -> int! Conta il numero dei nodi! 3

4 Esercizio ! n Un file binario ad accesso diretto (PERSONE.DAT) contiene un elenco di informazioni su persone (cognome, nome, data di nascita, città di residenza). Il cognome di ciascuna persona costituisce la chiave unica di tale elenco. Per effettuare ricerche su questo elenco, si costruisca un albero binario di ricerca mantenendo, per ciascun cognome il numero di record corrispondente. Si definisca un programma C che: a) costruisca la struttura dati in memoria principale a partire dal file PERSONE.DAT e stampi l elenco ordinato dei cognomi; b) calcoli l'altezza dell albero così ottenuto e il numero dei suoi nodi; c) letto un cognome a terminale, verifichi se esiste un elemento con quella chiave nell albero e, trovatolo, acceda al file e legga il record corrispondente, visualizzando i campi nome, datan e città; d) letto un cognome a terminale, stampi ordinatamente a video i cognomi minori o uguali di quello letto. 4

5 $ Esercizio ! Si modifichino i file main.c e tree.c già disponibili, implementando le operazioni richieste in funzione di quelle esportate dall ADT degli elementi Il main da realizzare deve: a) leggere il contenuto del file ricordando il numero del blocco letto e inserendo chiave, posizione come elemento in un albero binario di ricerca, e stampare l elenco ordinato dei cognomi; b) calcolarne altezza e numero di nodi; c) letto un cognome e accedendo all albero recuperare le informazioni complete di quel cognome dal file; d) stampare i cognomi minori di quello letto.

6 COMPONENTI! el.h el.c tree.h tree.c main.c

7 ADT ELEMENT: el.h! /* ELEMENT TYPE - file el.h*/ typedef struct { char nome[15]; char cognome[15]; char datan[7]; char citta[15]; } record_type; typedef struct { char cognome[15]; int pos;} el_type; typedef enum {false,true} boolean; /* operatori esportabili */ boolean isequal(el_type, el_type); boolean isless(el_type, el_type); void showel (el_type);

8 ADT ELEMENT: el.c! /* ELEMENT TYPE - file el.c*/ #include <stdio.h> #include <string.h> #include "el.h" boolean isequal(el_type e1, el_type e2) /* due elementi uguali se stesso cognome */ { if (strcmp(e1.cognome,e2.cognome)==0) return true; else return false; } boolean isless(el_type e1, el_type e2) { if (strcmp(e1.cognome,e2.cognome) <0) return true; else return false; } void showel (el_type e) { printf("%s\t%d\n",e.cognome,e.pos); }

9 ADT TREE: tree.h! /* TREE INTERFACE - file trees.h*/ #include "el.h typedef struct nodo { el_type value; struct nodo *left, *right; } NODO; typedef NODO * tree; /* operatori esportabili */ boolean empty(tree t); tree emptytree(void); el_type root(tree t); tree left(tree t); tree right(tree t); tree cons_tree(el_type e, tree l, tree r); tree ord_ins(el_type e, tree t); void inorder(tree t); int height (tree t); int nodi (tree t); int member_ord(el_type e, tree t); /*NOTA TIPO RESTITUITO */ void stampa_minori(tree t, el_type e); int max_int(int, int);

10 $ TO DO! Si modifichino i file main.c e tree.c già disponibili, implementando le operazioni richieste in funzione di quelle esportate dall ADT degli elementi Mumble mumble Il main da realizzare deve: a) leggere il contenuto del file ricordando il numero del blocco letto e inserendo chiave, posizione come elemento in un albero binario di ricerca, e stampare l elenco ordinato dei cognomi; b) calcolarne numero di nodi e altezza; c) letto un cognome e accedendo all albero recuperare le informazioni complete di quel cognome dal file; d) stampare i cognomi minori di quello letto.

11 main.c (1 - stub) #include <stdio.h> #include <string.h> #include <stdlib.h> #include "tree.h" main() { tree indice=emptytree(); int pos; FILE *f; record_type REC; el_type EL; char COGNOME[15]; f = fopen("persone.dat", "rb"); if(f==null){ printf("errore apertura file\n"); exit(-1); } pos=0; /* CICLO DI SCANSIONE DEL FILE */ while(fread(&rec,sizeof(record_type),1,f)>0){ // definizione campi dell elemento EL // inserimento EL nell albero indice // da implementare }

12 main.c (2 - stub) fclose(f); printf("chiusura del file\n"); printf("stampa dell albero\n"); inorder(indice); /* CALCOLO ALTEZZA E NUM.NODI DELL ALBERO */ printf("altezza dell'albero: %d\n", height(indice)); printf("num. Nodi dell'albero: %d\n", nodi(indice));

13 $ TO DO passo 1! Si modifichino i file main.c e tree.c già disponibili, implementando le operazioni richieste in funzione di quelle esportate dall ADT degli elementi Mumble mumble Il main da realizzare deve: a) leggere il contenuto del file ricordando il numero del blocco letto e inserendo chiave, posizione come elemento in un albero binario di ricerca, e stampare l elenco ordinato dei cognomi; b) calcolarne numero di nodi e altezza; c) letto un cognome e accedendo all albero recuperare le informazioni complete di quel cognome dal file; d) stampare i cognomi minori di quello letto.

14 tree.c (1) #include <stdlib.h> #include "tree.h boolean empty(tree t) /* test di albero vuoto */ { return (t==null); } tree emptytree(void) /* inizializza un albero vuoto */ { return NULL; } 14

15 tree.c (2) el_type root (tree t) /* restituisce la radice dell'albero t */ { if (empty(t)) abort(); else return(t->value); } tree left (tree t) /* restituisce il sottoalbero sinistro */ { if (empty(t)) return(null); else return(t->left); } tree right (tree t) /* restituisce il sottoalbero destro */ { if (empty(t)) return(null); else return(t->right); } 15

16 tree.c (3) tree cons_tree(el_type e, tree l, tree r) /* costruisce un albero che ha nella radice e; per sottoalberi sinistro e destro l ed r rispettivamente */ { tree t; t = (NODO *) malloc(sizeof(nodo)); t-> value = e; t-> left = l; t-> right = r; return (t); } 16

17 tree.c (4) void inorder(tree t) { if (! empty(t)) } { inorder(left(t)); showel( root(t) ); inorder(right(t)); } 17

18 tree.c (5 ord_ins) tree ord_ins(el_type e, tree t) /* albero binario di ricerca senza duplicazioni */ { if (empty(t)) /* inserimento */ } else return cons_tree(e,emptytree(),emptytree()); { if (isless(e,root(t))) } t->left = ord_ins(e,left(t)); else t->right = ord_ins(e,right(t)); return t; 18

19 BST Inserimento iterativo! n L algoritmo di inserimento è simile a quello di ricerca Cerca, nell albero, la posizione corretta di inserimento, ovvero il nodo che diventerà il padre di quello da inserire Una volta trovato il nodo, appende il nuovo nodo come figlio sinistro/destro in modo da mantenere la proprietà di ordinamento dell albero Inserimento di

20 $ Inserimento iterativo tree ord_ins_it(el_type e,tree root) {tree p, t=root; if (root==null) return cons_tree(e,null,null); else { while (t!=null) if (isless(e,t->value)) else {p=t; t=t->left;} {p=t; t=t->right;} } //p punta al padre if (isless(e,p->value)) else return root; } p->left = cons_tree(e,null,null); p->right = cons_tree(e,null,null); 20

21 main.c (soluzione) #include <stdio.h> #include <string.h> #include <stdlib.h> #include "trees.h" main() { tree indice=emptytree(); int pos; FILE *f; record_type REC; el_type EL; char COGNOME[15]; f = fopen("persone.dat", "rb"); if(f==null){ printf("errore apertura file\n"); exit(-1); } pos=0; /* CICLO DI SCANSIONE DEL FILE */ while(fread(&rec,sizeof(record_type),1,f)>0) { strcpy(el.cognome,rec.cognome); EL.pos=pos; /* INSERIMENTO NELL'ALBERO */ printf("inserimento nell albero di %s con posizione %d\n", EL.cognome, pos); indice = ord_ins(el,indice); pos++; }

22 main.c (2 - soluzione) fclose(f); printf("chiusura del file\n"); printf("stampa dell albero\n"); inorder(indice); /* CALCOLO ALTEZZA E NUM.NODI DELL ALBERO */ printf("altezza dell'albero: %d\n", height(indice)); printf("num. Nodi dell'albero: %d\n", nodi(indice));

23 $ TO DO passo 2! Si modifichino i file main.c e tree.c già disponibili, implementando le operazioni richieste in funzione di quelle esportate dall ADT degli elementi Il main da realizzare deve: a) leggere il contenuto del file ricordando il numero del blocco letto e inserendo chiave, posizione come elemento in un albero binario di ricerca, e stampare l elenco ordinato dei cognomi; b) calcolarne numero di nodi e altezza; c) letto un cognome e accedendo all albero recuperare le informazioni complete di quel cognome dal file; d) stampare i cognomi minori di quello letto.

24 CONTARE I NODI (Albero binario) Algoritmo (per un albero binario) n se l'albero è vuoto, i nodi sono 0 n altrimenti, i nodi sono 1 (la radice) + quelli del figlio sinistro + quelli del figlio destro 1 nodo (radice) Numero di nodi: nl sottoalbero sinistro sottoalbero destro Numero di nodi: nr Totale nodi: 1 + nl + nr

25 tree.c (7) Int nodi(tree t) { if (empty(t)) return 0; } else return (1+nodi(left(t))+nodi(right(t))); n E tail ricorsiva? 25

26 ALTEZZA DI UN ALBERO

27 ALTEZZA DI UN ALBERO (Albero binario) Algoritmo (per un albero binario) n se l'albero è vuoto, l altezza è nulla (0) n altrimenti, è il massimo tra l altezza_aux del figlio sinistro e l altezza_aux del figlio destro 1 arco (lo conto in altezza_aux, solo se figlio non vuoto) Altezza_aux L Altezza_aux R sottoalbero sinistro sottoalbero destro Altezza: 1+ max(height_aux(l),height_aux(r))

28 n $ To Do: altezza di un albero Altezza di un albero, lunghezza del cammino più lungo dalla radice a una delle foglie Algoritmo: n se l'albero è vuoto, o ha solo un nodo (radice) la sua altezza è 0 n altrimenti, è 1 + max( altezza del figlio sinistro, altezza del figlio destro )

29 tree.c (8 - height) int height (tree t) { if (empty(t)) return 0; else return max_int( height_aux(left(t)), } height_aux(right(t))) ; int height_aux(tree t) { if (empty(t)) return 0; } else return (1 + max_int( height_aux(left(t)), n E tail ricorsiva? height_aux(right(t)) )); 29

30 $ To Do: altezza di un albero

31 $ TO DO passo 3! Si modifichino i file main.c e tree.c già disponibili, implementando le operazioni richieste in funzione di quelle esportate dall ADT degli elementi Il main da realizzare deve: a) leggere il contenuto del file ricordando il numero del blocco letto e inserendo chiave, posizione come elemento in un albero binario di ricerca, e stampare l elenco ordinato dei cognomi; b) calcolarne numero di nodi e altezza; c) letto un cognome e accedendo all albero recuperare le informazioni complete di quel cognome dal file; d) stampare i cognomi minori di quello letto.

32 main.c (3 - stub) /* VISUALIZZAZIONE RECORD */ printf("inserisci un cognome: "); scanf("%s", COGNOME); f = fopen("persone.dat", "rb"); if(f==null){ printf("errore apertura file\n"); exit(-1); } // invocare opportunamente member_ord, // trovare il record sul file con fseek // e stampare risultato } // invocare opportunamente stampa_minori

33 /* VISUALIZZAZIONE RECORD */ printf("inserisci un cognome: "); scanf("%s", COGNOME); f = fopen("persone.dat", "rb"); if(f==null){ printf("errore apertura file\n"); exit(-1); } strcpy(el.cognome, COGNOME); pos = member_ord(el, indice); } if (pos>=0){ fseek(f, pos*sizeof(record_type), SEEK_SET); if(fread(&rec,sizeof(record_type),1,f)>0){ printf("posizione %d: Cognome:%s\tNome:%s\tDatan: %s\tcitta:%s\n", pos,rec.cognome, REC.nome, REC.datan, REC.citta); } stampa_minori(indice, EL); }

34 Ricerca binaria - iterativa! 1. Sia t un puntatore ad albero binario (tree) e gli sia inizialmente assegnata la radice dell albero 2. Finché t non è nullo e la sua radice non contiene il valore cercato, confrontare il valore contenuto nella radice di t con il valore cercato a. Se è uguale, restituire il valore trovato b. Se è minore, assegnare a t il figlio destro e procedere con 2 c. Se è maggiore, assegnare a t il figlio sinistro e procedere con 2 34

35 Ricerca (iterativa) in BST! n E possibile decidere, per ogni nodo, se proseguire la ricerca a sinistra o a destra (ricerca binaria), aggiornando il puntatore t 8 Ricerca di

36 $ TO DO Passo 3! Si modifichino i file main.c e tree.c già disponibili, implementando le operazioni richieste in funzione di quelle esportate dall ADT degli elementi Il main da realizzare deve: a) leggere il contenuto del file ricordando il numero del blocco letto e inserendo chiave, posizione come elemento in un albero binario di ricerca, e stampare l elenco ordinato dei cognomi; b) calcolarne numero di nodi e altezza; c) letto un cognome e accedendo all albero recuperare le informazioni complete di quel cognome dal file; d) stampare i cognomi minori di quello letto.

37 /* VISUALIZZAZIONE RECORD */ printf("inserisci un cognome: "); scanf("%s", COGNOME); f = fopen("persone.dat", "rb"); if(f==null){ printf("errore apertura file\n"); exit(-1); } strcpy(el.cognome, COGNOME); pos = member_ord(el, indice); } if (pos>=0){ fseek(f, pos*sizeof(record_type), SEEK_SET); if(fread(&rec,sizeof(record_type),1,f)>0){ printf("posizione %d: Cognome:%s\tNome:%s\tDatan: %s\tcitta:%s\n", pos,rec.cognome, REC.nome, REC.datan, REC.citta); } // stampa_minori(indice, EL); }

38 tree.c (7) int member_ord(el_type e,tree t) { if (empty(t)) return -1; } else if (isequal(e,root(t)) else return (t->value).pos; if (isless(e,root(t)) return member_ord(e,left(t)); else return member_ord(e,right(t)) ; n E tail ricorsiva? 39

39 tree.c (6 member_ord) int member_ord(el_type e, tree t) { while (t!=null){ if (isless(e,root(t))) t=t->left; else } return -1; if (isequal(e,root(t))) return (t->value).pos; else t=t->right; } 40

40 $ Esercizio ! Si modifichino i file main.c e tree.c già disponibili, implementando le operazioni richieste in funzione di quelle esportate dall ADT degli elementi Il main da realizzare deve: a) leggere il contenuto del file ricordando il numero del blocco letto e inserendo chiave, posizione come elemento in un albero binario di ricerca, e stampare l elenco ordinato dei cognomi; b) calcolarne numero di nodi e altezza; c) letto un cognome e accedendo all albero recuperare le informazioni complete di quel cognome dal file; d) stampare i cognomi minori di quello letto.

41 STAMPA MINORI Stampa_minori Montale Montale Hesse Pennac Alberoni Marquez Ziliotto sottoalbero sinistro sottoalbero destro

42 STAMPA MINORI Stampa_minori Montale Montale Hesse Pennac Alberoni Marquez Ziliotto sottoalbero sinistro sottoalbero destro n Modifica della visita inorder; stampo il contenuto del nodo solo se il cognome precede quello dato n Non efficientissima (visito tutti i nodi così, anche quelli con cognome sicuramente maggiore)

43 tree.c void stampa_minori(tree t, el_type e) /* ricorsiva visita in ordine simmetrico */ { if (!empty(t)) } } { stampa_minori(left(t),e); if (isless(root(t),e)) showel(root(t)); stampa_minori(right(t),e);

44 UN PO DI CONSIDERAZIONI! n Quanto è bilanciato l albero binario di ricerca ottenuto? n Quanti nodi? à 10 Quale altezza? à 6 n Ci sono molti algoritmi per bilanciare alberi non bilanciati non bilanciato bilanciato

45 Alberi bilanciati! n Il problema di BST è che normalmente NON sono bilanciati: Inserimenti e cancellazioni sbilanciano l albero Se l albero non è correttamente bilanciato le operazioni (tutte) costano parecchio n Soluzione: alberi che si autobilanciano AVL (Adel'son-Vel'skii-Landis) Red-Black 52

46 Alberi AVL! n Un albero AVL è un Albero Binario di Ricerca bilanciato n Un nodo si dice bilanciato quando l altezza del sotto-albero sinistro differisce dall altezza del sotto-albero destro di al più una unità n Un albero si dice bilanciato quando tutti i nodi sono bilanciati n Le operazioni sono le stesse che si possono eseguire su un albero binario di ricerca 53

47 Rotazioni! n Si supponga di disporre di un albero sbilanciato è possibile bilanciarlo tramite opportune rotazioni 8 12 Ruotare il nodo 12 verso sinistra in modo che diventi la radice dell albero à il padre di 12 (8) diventa il suo sotto-albero sinistro

48 Rotazioni! n Rotazione 1: il nodo 12 diventa la radice Ruotare il nodo 15 verso sinistra in modo che diventi la radice dell albero à il padre di 15 (12) diventa il suo sotto-albero sinistro, il sotto-albero sinistro di 15 (13) diventa il sotto-albero destro di 12 55

49 Rotazioni! n Rotazione 2: il nodo 15 diventa la radice e l albero risulta bilanciato

50 Alberi AVL! n Si supponga di partire con un albero bilanciato, secondo la definizione data in precedenza n Una serie di inserimenti/cancellazioni può sbilanciare l albero n Opportune rotazioni sono in grado di ribilanciare l albero n Naturalmente i costi di inserimento/cancellazione crescono di molto ma la ricerca rimane sempre molto efficiente! (O(log2 N) se N nodi) 57

51 Per giocare un po! n Applet java per giocare con alberi di ricerca di vario tipo, con possibilità di inserire, cancellare, ruotare e vedere come si comportano i vari tipi di alberi supportati n Realizzazione modulare in C delle operazioni su AVL tree (insert, delete da fare) n ma anche RedBlack tree 58

52 59

53 Esercizi molto consigliati! Scrivere la ricerca in albero binario di ricerca in modo iterativo Calcolare l altezza di un albero Calcolare il bilanciamento di un nodo (differenza fra le altezze dei sotto-alberi sinistro e destro) 60

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

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

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

Esercizio: indice come BST

Esercizio: indice come BST Esercizio: indice come BST Un file binario ad accesso diretto (PERSONE.DAT) contiene un elenco di informazioni su persone (cognome, nome, data di nascita, città di residenza). Il cognome di ciascuna persona

Dettagli

GRAFI E ALBERI. Sono strutture dati per rappresentare relazioni binarie su un insieme di elementi. Relazione tra insiemi A, B: R A B

GRAFI E ALBERI. Sono strutture dati per rappresentare relazioni binarie su un insieme di elementi. Relazione tra insiemi A, B: R A B GRAFI E ALBERI a1 R a3 Sono strutture dati per rappresentare relazioni binarie su un insieme di elementi. Relazione tra insiemi A, B: R A B a1 a2 R Una relazione su A={a1,a2 e B={b1,b2,b3 definisce un

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

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

ADT LISTA: altre operazioni non primitive ADT LISTA COSTRUZIONE ADT LISTA COSTRUZIONE ADT LISTA (2)

ADT LISTA: altre operazioni non primitive ADT LISTA COSTRUZIONE ADT LISTA COSTRUZIONE ADT LISTA (2) ADT LISTA Pochi Linguaggi forniscono tipo lista fra predefiniti (LISP, Prolog); per gli altri, ADT lista si costruisce a partire da altre strutture dati (in C tipicamente vettori o puntatori) OPERAZIONI

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

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

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

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

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

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

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

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

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

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

Laboratorio di Informatica. Lezione 8: Liste e alberi

Laboratorio di Informatica. Lezione 8: Liste e alberi Laboratorio di rmatica Lezione 8: Liste e alberi Il programma della lezione 7 (parte 1) #include #include typedef struct node char key[20]; int volte; struct node *psnnext; NODE, *PNODE;

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

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

Binary Search Trees (BST) Algoritmi sui BST. Algoritmi - Ricerca. Fondamenti di Informatica T2 Modulo 2. Università di Bologna A.A.

Binary Search Trees (BST) Algoritmi sui BST. Algoritmi - Ricerca. Fondamenti di Informatica T2 Modulo 2. Università di Bologna A.A. Università degli Studi di Bologna Facoltà di Ingegneria Fondamenti di Informatica T Modulo Corso di Laurea in Ingegneria Informatica Anno accademico 00/009 Binary Search Trees (BST) Also Known As Alberi

Dettagli

Binary Search Trees (BST)

Binary Search Trees (BST) Università degli Studi di Bologna Facoltà di Ingegneria Fondamenti di Informatica T2 Modulo 2 Corso di Laurea in Ingegneria Informatica Anno accademico 200/2009 Binary Search Trees (BST) Also Known As

Dettagli

ARGOMENTO: Liste ESERCIZIO n 1

ARGOMENTO: Liste ESERCIZIO n 1 ARGOMENTO: Liste ESERCIZIO n 1 Un file binario (CABALA.DAT) contiene informazioni (numero e parola associata di al massimo 50 caratteri) su alcuni numeri interi positivi. Lo stesso numero può comparire

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

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

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 di ricerca. Alberi binari di ricerca. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)

Alberi di ricerca. Alberi binari di ricerca. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill) Alberi di ricerca Alberi binari di ricerca Un esempio: l ADT Dizionario (mutabile) Gli alberi di ricerca sono usati per realizzare in modo efficiente il tipo di dato astratto dizionario Alberi binari 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

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

Laboratorio di algoritmi e strutture dati

Laboratorio di algoritmi e strutture dati Laboratorio di algoritmi e strutture dati Docente: Violetta Lonati mercoledì 15 novemb017 L esercitazione di oggi prevede di utilizzare gli alberi binari e in particolare gli alberi binari di ricerca.

Dettagli

Algoritmi e strutture dati

Algoritmi e strutture dati Algoritmi e Strutture Dati Alberi di ricerca Dizionari Gli alberi di ricerca sono usati per realizzare in modo efficiente il tipo di dato dizionario 2 Alberi binari di ricerca (BST = binary search tree)

Dettagli

Esercizi di preparazione alla prova scritta

Esercizi di preparazione alla prova scritta Esercizi di preparazione alla prova scritta ARGOMENTI: Istruzione dominante, complessità ESERCIZIO n 1 Si analizzi il seguente frammento di codice C: #define N 10 int V[N]={1,2,3,4,5,6,7,8,9,10;... main()

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

Complessità algoritmi su strutture dati (riassunto)

Complessità algoritmi su strutture dati (riassunto) Complessità algoritmi su strutture dati (riassunto) Struttura di dato Algoritmo di ricerca Complessità (caso peggiore) applicabile Tavola come array non Ricerca sequenziale O(N) ordinato (N elementi) Tavola

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

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

Un esempio: l ADT Dizionario (mutabile) Definizione. Alberi binari di ricerca (BST = binary search tree) search(chiave k) -> elem Un esempio: l ADT Dizionario (mutabile) Algoritmi e Laboratorio a.a. 2006-07 Lezioni Gli alberi di ricerca sono usati per realizzare in modo efficiente il tipo di dato astratto dizionario Parte 19-D Alberi

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

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

Esercizi parte 3. La classe ArrayBinTree dovra implementare, tra le altre, l operazione seguente: padre: dato un nodo, restituire l indice del padre. Esercizi parte 3 RAPPRESENTAZIONE DI ALBERI BINARI 1. Definire una classe LinkedBinTree che implementa alberi binari in modo collegato, con nodi implementati come oggetti di classe BinNode. La classe dovra

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

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

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

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

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

Alberi di ricerca. Dizionari. Definizione. Alberi binari di ricerca (BST = binary search tree) Algoritmi e Strutture Dati Algoritmi e Strutture Dati Dizionari Gli alberi di ricerca sono usati per realizzare in modo efficiente il tipo di dato dizionario Alberi di ricerca Basato su materiale di C. Demetrescu, I. Finocchi, G.F.

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

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

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

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

Dizionari. Realizzazione con alberi binari di ricerca. Alberi rosso-neri. Ugo de' Liguoro - Algoritmi e Seprimentazioni 03/04 Lez. Dizionari Realizzazione con alberi binari di ricerca. Alberi rosso-neri. Dizionari con gli alberi Astro, Dado, Lana, Mela, Tasto,Vela, Zappa Mela Astro Tasto Zappa Alberi binari di ricerca Gli alberi binari

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

Esercizi BST - AVL. E. Fachini

Esercizi BST - AVL. E. Fachini Esercizi BST - AVL. Verifica che un ABR è un AVL 2. verifica bilanciamento in altezza di un ABR 3. Costruzione alberi di Fibonacci 4. Calcolo altezza albero AVL in O(lg n) 5. split di una ABR intorno a

Dettagli

STRUTTURE DATI: OLTRE LE LISTE

STRUTTURE DATI: OLTRE LE LISTE STRUTTURE DATI: OLTRE LE LISTE Le liste risolvono un ampio ventaglio di problemi, ma sono strutture dati sequenziali e come tali inadatte a gestire grandi quantità di dati quando le operazioni più frequenti

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

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

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

Laboratorio di algoritmi e strutture dati

Laboratorio di algoritmi e strutture dati Laboratorio di algoritmi e strutture dati Docente: Violetta Lonati mercoledì 25 novemb009 L esercitazione di oggi prevede di utilizzare gli alberi binari e in particolare gli alberi binari di ricerca.

Dettagli

Moltiplicazione veloce di interi

Moltiplicazione veloce di interi Moltiplicazione veloce di interi Ogni numero intero w di n cifre può essere scritto come 10 n/2 w s + w d w s indica il numero formato dalle n/2 cifre più significative di w w d denota il numero formato

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

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

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 Appello del 24 Gennaio 2007 Esercizio 1 (ASD) 1. Sia T (n) = T (n/6) + T (n/3) + Θ(n). Considerare ciascuna delle seguenti affermazioni

Dettagli

Liste semplici - ADT!

Liste semplici - ADT! Liste semplici - ADT Obiettivi: Discutere la realizzazione collegata (puntatori a strutture) di liste semplici Introdurre l ADT lista semplice e le operazioni tipiche su essa 1 ADT LISTA (1) In generale,

Dettagli

7. Settima esercitazione autoguidata: alberi binari

7. Settima esercitazione autoguidata: alberi binari 7. Settima esercitazione autoguidata: alberi binari 31 7.1. Costruzione di un albero (ALBERI1.C) Scrivere un programma che - riceve il nome di un file contenente la rappresentazione parentetica di un albero

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

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

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

Ripasso di programmazione ricorsiva

Ripasso di programmazione ricorsiva Ripasso di programmazione ricorsiva Ripasso di programmazione ricorsiva Algoritmo ricorsivo: algoritmo espresso in termini di se stesso. Programmazione iterativa e programmazione ricorsiva sono equivalenti.

Dettagli

Complessità algoritmi su strutture dati (riassunto)

Complessità algoritmi su strutture dati (riassunto) Complessità algoritmi su strutture dati (riassunto) Struttura di dato Ricerca Complessità (caso peggiore) Tavola come array non Ricerca sequenziale O(N) ordinato (N elementi) Tavola come array ordinato

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

Appunti Senza Pretese di Programmazione II: Costruzione di un Albero Bilanciato

Appunti Senza Pretese di Programmazione II: Costruzione di un Albero Bilanciato Appunti Senza Pretese di Programmazione II: Costruzione di un Albero Bilanciato Alessandro Panconesi DSI, La Sapienza via Salaria 113, 00198, Roma Consideriamo un problema che ci consentirá di vedere un

Dettagli

Fondamenti di Informatica L-A

Fondamenti di Informatica L-A Fondamenti di Informatica L-A Esercitazione del 23/11/07 Ing. Giorgio Villani Ripasso Teoria Funzioni ricorsive 2 fatt(2) 1 2*fatt(1) fatt(1) 1 2*1 1*fatt(0) fatt(0) 1*1 caso base fatt(0)=1 Esercizio 1

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

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

QuickSort Università degli Studi di Milano

QuickSort Università degli Studi di Milano QuickSort Algoritmo di ordinamento sul posto che ha tempo di esecuzione : - O(n 2 ) nel caso peggiore - O(n log n) nel caso medio Nonostante le cattive prestazioni nel caso peggiore, rimane il miglior

Dettagli

alberi completamente sbilanciati

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

Dettagli

Esercizio 1 File: ordinamento di un archivio di studenti (file binario)

Esercizio 1 File: ordinamento di un archivio di studenti (file binario) Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 9 Esercitazione: 19 gennaio 2005 Esercizi sui file e sulle liste. Scaletta Esercizio 1 File: ordinamento di un archivio

Dettagli

Indici con gli alberi

Indici con gli alberi Indici con gli alberi Alberi perfettamente bilanciati per indici su memorie di massa: B-alberi Indici su memorie secondarie Spesso i dati da ordinare sono in quantità tale da richiedere dispositivi di

Dettagli

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

Dizionari. Dizionari con gli alberi. Alberi binari di ricerca. Realizzazione con alberi binari di ricerca. Alberi rosso-neri. Dizionari Realizzazione con alberi binari di ricerca. Alberi rosso-neri. Dizionari con gli alberi Astro, Dado, Lana, Mela, Tasto,Vela, Zappa Astro Mela Tasto Zappa Alberi binari di ricerca Gli alberi binari

Dettagli

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

Un albero completamente bilanciato o pieno (full) alberi completamente sbilanciati. Un albero binario completo alberi completamente sbilanciati Un albero completamente bilanciato o pieno (full) Definizione: Un albero è pieno se tutte le foglie sono sullo stesso livello e ogni nodo non foglia ha due figli. Il numero

Dettagli

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length); Fondamenti di Informatica L-A (A.A. 004/005) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista I Prova Intermedia del 11/11/004 - durata h - COMPITO B Esercizio 1 (punti 1) Una associazione di

Dettagli

Esercizio 1. Liste di interi

Esercizio 1. Liste di interi Esercizio 1. Liste di interi Si legga una sequenza di numeri interi da tastiera, dopo ogni inserimento chiedere all'utente se vuole continuare, quindi: Creare due liste L1 e L2 con inserimento ordinato;

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

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

Complessità algoritmi su strutture dati

Complessità algoritmi su strutture dati Complessità algoritmi su strutture dati Struttura di dato Ricerca Complessità (caso peggiore) Tavola non ordinata (N Ricerca O(N) elementi) sequenziale Tavola ordinata (N Ricerca binaria O(log2N) elementi)

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

#include <stdio.h> #include <stdlib.h> //necessaria per la malloc #include <string.h> // costante #define MAX_L 30

#include <stdio.h> #include <stdlib.h> //necessaria per la malloc #include <string.h> // costante #define MAX_L 30 /* Dopo aver definito una lista in grado di contenere i dati di alcune persone (nome, genere e altezza in metri), scrivere un programma che consenta di verificare che inizialmente la lista sia vuota e

Dettagli

Algoritmi e Strutture Dati. Capitolo 6 Il problema del dizionario

Algoritmi e Strutture Dati. Capitolo 6 Il problema del dizionario Algoritmi e Strutture Dati Capitolo 6 Il problema del dizionario Il tipo dato Dizionario Suppongo sempre che mi venga dato un riferimento diretto all elemento da cancellare Applicazioni: gestione archivi

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