Prog2 a.a. 2001/021 50 30 85 20 10040 952515 Albero binario di ricerca Un albero binario di ricerca é un albero binario in cui ogni nodo ha un’etichetta.

Slides:



Advertisements
Presentazioni simili
Andrea Zandatutoraggio strutture dati STRUTTURE DATI e LABORATORIO II ESERCITAZIONE N°14 albero di ricerca binario.
Advertisements

Ordinamento ottimo Ricerca
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
RB-alberi (Red-Black trees)
Code a priorità (Heap) Definizione
Strutture dati elementari
Alberi binari di ricerca
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
STRUTTURE DATI e LABORATORIO II ESERCITAZIONE N°13 Heap massimo.
Esercizi su alberi binari
Tail recursion: esempio
Alberi binari Definizione della struttura dati: struct tree { };
Esercizi su alberi binari di ricerca
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Corso di Programmazione 1 a.a.2007/2008 Prof.ssa Chiara Petrioli Corso di Laurea.
Il problema del dizionario
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Interrogazioni su un albero binario di ricerca Search(S,k) – dato un insieme S ed un valore chiave k restituisce un puntatore x ad un elemento in S tale.
CORSO DI PROGRAMMAZIONE II Operazioni su alberi ordinati e non
Algoritmi e Strutture Dati Alberi Binari di Ricerca.
Algoritmi e Strutture Dati
Dizionari alberi bilanciati.
Algoritmi e Strutture Dati 20 aprile 2001
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Esercizi su alberi binari
Alberi di ricerca binari
Anche la RB-Delete ha due fasi: Nella prima viene tolto un nodo y avente uno dei sottoalberi vuoto sostituendolo con la radice dellaltro sottoalbero. Per.
1.Scrivere una funzione per cercare un numero x in una lista circolare di interi. La funzione deve restituire NULL se il numero non esiste. 2.Scrivere.
Ispezione lineare La funzione hash h(k,i) si ottiene da una funzione hash ordinaria h'(k) ponendo L’esplorazione inizia dalla cella h(k,0) = h'(k) e continua.
RB-insert(T, z) // z.left = z.right = T.nil Insert(T, z) z.color = RED // z è rosso. Lunica violazione // possibile delle proprietà degli alberi // rosso-neri.
Heap Ordinamento e code di priorità Ugo de Liguoro.
Esercizi Liste.
Tail recursion: esempio
Esercizi su alberi binari di ricerca
Alberi binari Definizione della struttura dati: struct tree { };
Corso di Informatica 2 a.a. 2003/04 Lezione 6
alberi completamente sbilanciati
1 Un esempio con iteratore: le liste ordinate di interi.
Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie.
Capitolo 6 Alberi di ricerca Algoritmi e Strutture Dati.
Alberi Alberi radicati : alberi liberi in cui un vertice è stato scelto come radice. Alberi liberi : grafi non orientati connessi e senza cicli. Alberi.
Algoritmi e Strutture Dati Strutture Dati Elementari.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Alberi.
MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche
Capitolo 8 Code con priorità Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
1 Un esempio: le liste ordinate di interi. 2 Liste ordinate  OrderedIntList 4 lista ordinata di interi –modificabile.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Soluzione esercizio.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Soluzione esercizio.
1 Un esempio con iteratore: le liste ordinate di interi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Progettare algoritmi.
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Esercizi su Alberi.
Capitolo 6 Alberi di ricerca Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo Fosco Dora Drogo Dudo.
Esercitazioni di Prog. II (esercizi su alberi ennari)
Esercitazioni di Prog. II (esercizi _aggiuntivi_su alberi binari)
Alberi n-ary Lezioni di C.
APPUNTI SUL LINGUAGGIO C Alberi Binari – primi esercizi
Verifica bilanciamento nel numero dei nodi: definizioni.
Transcript della presentazione:

Prog2 a.a. 2001/ Albero binario di ricerca 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 o uguale a quella dei nodi nel sottoalbero radicato nel figlio sinistro Nell’esempio abbiamo usato gli interi, ma si può utilizzare per le etichette un qualsiasi insieme totalmente ordinato (per esempio caratteri o stringhe).

Prog2 a.a. 2001/ Il più piccolo elemento 90 Il più grande elemento 33 Per semplicità eliminiamo le ripetizioni nell'albero.

Prog2 a.a. 2001/ Il più piccolo elemento nel sottoalbero destro 90 Il più grande elemento nel sottoalbero sinistro 33

Prog2 a.a. 2001/ La ricerca di >50 100>85 45 La ricerca di un elemento in una albero binario di ricerca

Prog2 a.a. 2001/ La ricerca di 35 35<50 35>30 35<40 La ricerca di un elemento in una albero binario di ricerca

Prog2 a.a. 2001/ La ricerca di 31 31<50 31>30 31<40 31<35 ? La ricerca di un elemento in una albero binario di ricerca

Prog2 a.a. 2001/027 Struttura dati struct node { int elem; struct node *left; struct node *right; }; typedef struct node Node; typedef Node *TabP; leftright elem leftright elem leftright elem Implementazione ricerca in un albero binario di ricerca Node TabP

Prog2 a.a. 2001/028 TabP cerca(TabP t, int key) /*postc: restituisce un puntatore a key in t *se presente, NULL altrimenti (anche quando la *collezione è vuota) */ {if (t) {if (key == t->elem ) return t; else if (key elem) /* Più piccolo, cerca a sinistra */ return cerca(t->left, key); else /* Più grande, cerca a destra */ return cerca(t->right, key); } else return NULL; } Implementazione ricerca in un albero binario di ricerca

Prog2 a.a. 2001/ Inserimento di 45 45<50 45>30 45>40 45 L’inserimento di un elemento in una albero binario di ricerca

Prog2 a.a. 2001/ Inserimento di >50 105> >100 L’inserimento di un elemento in una albero binario di ricerca

Prog2 a.a. 2001/0211 TabP addElem( TabP t, TabP new ) /* "versione funzionale". Aggiunge new alla collezione t, se non gia' presente *postc: restituisce t con l'aggiunta di el, se non gia' presente, la collezione immutata altrimenti */ { if (!t) return new; /* Se l’albero è vuoto il nuovo nodo e' la radice */ if(new->elem elem) /* Più piccolo, inserimento a sinistra */ t->left = addElem(t->left,new); else if(new->elem > t->elem ) /* Più grande, inserimento a destra */ t->right = addElem( t->right, new); else return t; return t; } Implementazione inserimento in un albero binario di ricerca

Prog2 a.a. 2001/0212 Cancellazione di <50 35>30 35< Implementazione cancellazione in un albero binario di ricerca

Prog2 a.a. 2001/0213 Cancellazione di > Implementazione cancellazione in un albero binario di ricerca

Prog2 a.a. 2001/ Cancellazione di 30 30< Implementazione cancellazione in un albero binario di ricerca

Prog2 a.a. 2001/ Cancellazione di Implementazione cancellazione in un albero binario di ricerca

Prog2 a.a. 2001/0216 int delMin( TabP *t ) /* cancella il nodo minimo in t e ne restituisce il valore *prec (t != NULL && *t != NULL ) postc: restituisce il minimo valore e cancella quel nodo da *t */ {int app; TabP temp; assert(t); assert(*t); if ((*t) -> left == NULL) /* ho trovato il minimo */ {app = (*t) ->elem; temp = *t; *t = (*t) -> right; free(temp); return app;} else return delMin( &((*t) ->left) ); } Implementazione cancellazione in un albero binario di ricerca

Prog2 a.a. 2001/0217 int remEl( TabP *t,int val) /* cancella la prima occorrenza di val in t *prec: (t != NULL) && (*t != NULL) postc: restituisce 1 se ha trovato e cancellato l'elemento, 0 altrimenti */ {TabP temp; assert(t!=NULL); assert(*t!=NULL); if (val==(*t) ->elem) {if ((*t)-> left == NULL) /* non ha il figlio sin*/ {temp = *t; (*t) = (*t) ->right; free(temp);} else if ((*t) -> right == NULL) /* non ha il figlio des*/ {temp = *t;(*t)= (*t) ->left;free(temp);} else /* ha due figli */ (*t)-> elem = delMin(&((*t) ->right)); return 1;} if (val elem) /* cerco a sinistra */ if ((*t) -> left != NULL) return remEl(&(*t) -> left,val); else return 0; /* (*t) -> left == NULL*/ else if((*t) -> right!= NULL) return remEl(&(*t) -> right,val); else return 0; /* (*t) -> left == NULL*/ }