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

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

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

Introduzione Implementazione (1)

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

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

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

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

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 12: Liste. Modulo 1: ADT lista e implementazione basata su array Modulo 2: Lista concatenata

Algoritmi e Strutture Dati. Alberi

Alberi. Alberi: Esempio di utilizzo

Algoritmi e Strutture Dati. Lezione 3

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

lezione 9 min-heap binario Heap e Alberi posizionali generali

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

Esercizi su programmazione ricorsiva 3

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

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

Algoritmi e Strutture Dati. Alberi

Algoritmi e Strutture Dati. Lezione 5

Strutture dati Alberi binari

Informatica 3. Informatica 3. LEZIONE 13: Liste doppie, pile e code. Lezione 13 - Modulo 1. Free list (2) Free list. Free list

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

Alberto Montresor Università di Trento

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

Alberi ed Alberi Binari

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

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

Alberi Binari Alberi Binari

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati. Alberi

Alberi binari di ricerca

Implementazione ADT: Alberi

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

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

Espressioni aritmetiche

Alberi binari e alberi binari di ricerca

Informatica 3. LEZIONE 13: Liste doppie, pile e code. Modulo 1: Free list Modulo 2: Lista doppia Modulo 3: Pila Modulo 4: Coda

Alberi binari e alberi binari di ricerca

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

Visite di alberi binari. Laboratorio di Algoritmi e Strutture Dati

Alberi binari e alberi binari di ricerca

Problemi di ordinamento

ALGORITMI E STRUTTURE DATI

ALBERI BINARI DI RICERCA

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

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Lezione 7 Alberi binari: visite e alberi di ricerca

INFORMATICA 3 Prof.ssa Sara Comai

Visite di alberi binari. Laboratorio di Algoritmi e Strutture Dati

Algoritmi e strutture dati

Esercitazione 6. Alberi binari di ricerca

Prima prova in itinere di Informatica 3 IOL Prof.ssa Sara Comai A.A dicembre 2004

Alberi binari di ricerca

Lezione 6: 12 Novembre 2013

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

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

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

Il TDA BinaryTree. Albero Binario. Albero sintattico. Applicazioni. Albero delle decisioni binario. Albero binario di ricerca

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

Liste concatenate. Violetta Lonati

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

Heap e Code di Priorità

Laboratorio di Algoritmi e Strutture Dati. Alberi Binari

Esercitazione 8. Corso di Tecniche di programmazione. Laurea in Ingegneria Informatica

Informatica 3. Informatica 3. LEZIONE 22: Politiche di risoluzione delle collisioni. Lezione 23 - Modulo 1. Politiche di risoluzione delle collisioni

algoritmi e strutture di dati

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

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

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

Fondamenti teorici e programmazione

Dati e Algoritmi 1: A. Pietracaprina. Alberi Binari

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

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

Memorizzazione di una relazione

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

Ripasso di programmazione ricorsiva

Alberi Binari di Ricerca

Strutture dati dinamiche in C (II)

Laboratorio di Python

Spesso sono definite anche le seguenti operazioni:

Alberi. Cosa sono gli alberi? Strutture gerarchiche di ogni tipo. Definizione, realizzazione e algoritmi elementari. Generale.

Esercitazione 5 Alberi Binari di Ricerca

Algoritmi e strutture dati 16 Dicembre 2004 Canali A L e M Z Cognome Nome Matricola

Lezione 12 Tabelle Hash

RICERCA BINARIA...1 ALBERO BINARIO DI RICERCA (ABR)...3 RICORSIONE...4 ESEMPI DI RICORSIONE IN VISUAL BASIC...5 ESEMPI DI RICORSIONE IN C / C++...

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità

Laboratorio di Informatica. Lezione 8: Liste e alberi

Heap e code di priorità

Algoritmi e Strutture Dati. Capitolo 6 Il problema del dizionario

ricerca di un elemento, verifica dell appartenenza di un elemento

Algoritmi e Strutture di Dati

heap heap heap? max- e min-heap concetti ed applicazioni heap = catasta condizione di heap non è una struttura ordinata

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE

Transcript:

Informatica 3 Informatica 3 LEZIONE 17: lberi generici Lezione 17 - Modulo 1 Modulo 1: Definizione e DT Modulo 2: Implementazione Modulo 3: lberi e classi di equivalenza Definizione e DT Politecnico di Milano - Prof. Sara Comai 1 Politecnico di Milano - Prof. Sara Comai 2 Introduzione lbero generico Definizione di albero T: insieme finito di uno o più nodi tali che esiste un nodo R detto radice di T i rimanenti nodi sono partizionati in n>=0 sottoinsiemi disgiunti T 1, T 2,..., T n ognuno dei quali è un albero e le cui radici R 1, R 2,... R n sono figli di R T 1, T 2,..., T n sono sotto-alberi di T i T i sono ordinati: T i viene prima di T j se i<j DT dell albero generico // General tree node DT template <class Elem> class GTNode { public: GTNode(const Elem&); // Constructor ~GTNode(); // Destructor Elem value(); // Return value bool isleaf(); // TRUE if is a leaf GTNode* parent(); // Return parent GTNode* leftmost_child(); // First child GTNode* right_sibling(); // Right sibling void setvalue(elem&); // Set value void insert_first(gtnode<elem>* n); void insert_next(gtnode<elem>* n); void remove_first(); // Remove first child void remove_next(); // Remove sibling ; Grado di uscita di un nodo (out degree): numero di figli del nodo Foresta: collezione di uno o più alberi Politecnico di Milano - Prof. Sara Comai 3 Politecnico di Milano - Prof. Sara Comai 4

DT dell albero generico (2) template <class Elem> class GenTree { private: void printhelp(gtnode*); // Print helper function public: GenTree(); // Constructor ~GenTree(); // Destructor void clear(); // Send nodes to free store GTNode* root(); // Return the root // Combine two subtrees void newroot(elem&, GTNode<Elem>*, GTNode<Elem>*); void print(); // Print a tree ; Politecnico di Milano - Prof. Sara Comai 5 ttraversamento di un albero generico ttraversamenti preordine si visita la radice e poi ogni sotto-albero da sinistra verso destra (VLR) postordine si visitano prima i sotto-alberi da sinistra verso destra e poi la radice (LRV) in ordine non definito template <class Elem> void GenTree<Elem>:: preorder(gtnode<elem>* subroot) { if (subroot->isleaf()) cout << "Leaf: "; else cout << "Internal: "; cout << subroot->value() << "\n"; for (GTNode<Elem>* temp = subroot->leftmost_child(); temp!= NULL; temp = temp->right_sibling()) preorder(temp); RCDEBF Politecnico di Milano - Prof. Sara Comai 6 Informatica 3 Lezione 17 - Modulo 2 Implementazione con lista dei figli Implementazione con lista dei figli ogni nodo viene rappresentato in un array e contiene i dati, il puntatore al padre ed un puntatore alla lista dei figli, memorizzati da sinistra verso destra indice dato padre Implementazione Politecnico di Milano - Prof. Sara Comai 7 immediato: trovare figlio di sinistra non immediato: trovare fratello di destra combinare alberi se sono memorizzati in array differenti Politecnico di Milano - Prof. Sara Comai 8

Implementazione con figlio di sinistra e fratello di destra (1) Implementazione con figlio di sinistra e fratello di destra ogni nodo viene rappresentato in un array e contiene i dati, il puntatore al padre, al primo figlio di sinistra e al fratello di destra Implementazione con figlio di sinistra e fratello di destra (2) combinazione di due alberi sx dato padre dx sx dato padre dx risolve i problemi dell implementazione tramite lista ai figli richiede meno spazio per ogni nodo è necessaria una quantità costante di spazio Politecnico di Milano - Prof. Sara Comai 9 Politecnico di Milano - Prof. Sara Comai 10 Implementazione con nodi dinamici (1) Implementazione con nodi dinamici ogni nodo viene rappresentato in un array e contiene i dati, il numero dei figli e i puntatori ai figli array di puntatori ai figli come parte del nodo il numero di figli deve essere noto quando si crea il nodo e funziona bene se non cambia dinamicamente implementare un garbage collector oppure un gestore della memoria dato #figli Implementazione con nodi dinamici (2) lista concatenata dei puntatori ai figli più flessibile ma richiede più spazio Politecnico di Milano - Prof. Sara Comai 11 Politecnico di Milano - Prof. Sara Comai 12

Implementazione dinamica con figlio di sinistra e fratello di destra Si noti che l implementazione con figlio di sinistra e fratello di destra è un albero binario da un albero generico è possibile passare ad un albero binario in cui il figlio di sinistra rappresenta il primo nodo figlio dell albero generico e il nodo di destra rappresenta il fratello di destra dell albero generico lo si può applicare anche a foreste di nodi in cui le radici sono considerate come fratelli radice lberi N-ari lbero N-ario: albero i cui nodi hanno tutti N figli 2 figli: albero binario 4 figli: PR quadtree Si implementano in modo simile agli alberi binari all aumentare di N il numero di puntatori NULL rischia di aumentare preferire un implementazione in cui i nodi interni e le foglie vengono tenute distinte Politecnico di Milano - Prof. Sara Comai 13 Politecnico di Milano - Prof. Sara Comai 14 Implementazione sequenziale (1) Scopo: memorizzare i valori di una serie di nodi con l informazione minima per ricostruire la struttura dell albero implementazione sequenziale vantaggio: risparmia spazio perchè non memorizza i puntatori svantaggio: l accesso ad un nodo richiede l accesso ai nodi che lo precedono nella sequenza - non è più Θ(log n) Serializzazione di una struttura ad albero: oggetto memorizzato come sequenza di byte Implementazione sequenziale (2) Implementazione: i valori dei nodi vengono memorizzati come enumerazione di un attraversamento in preordine si memorizzano informazioni sulla struttura lbero binario: si elenca ogni valore del nodo i nodi non vuoti vengono trattati come nodi interni con due figli (che possono essere vuoti) solo i valori NULL vengono trattati come foglie B/D//CEG///FH//I// Politecnico di Milano - Prof. Sara Comai 15 Politecnico di Milano - Prof. Sara Comai 16

Implementazione sequenziale (3) lberi binari pieni si marcano i nodi come interni ( ) o foglia Se un nodo è interno allora ha due figli Se è foglia allora il nodo successivo è il figlio di destra di un antenato B /DC E G/F HI Implementazione sequenziale (4) lberi generici occorre tener traccia del numero di figli in alternativa: indicare quando termina la lista dei figli ) indica che è una foglia un ulteriore ) che è anche l ultimo figlio del padre RC)D)E))BF))) foglia ultimo figlio di B ultimo figlio di R Politecnico di Milano - Prof. Sara Comai 17 Politecnico di Milano - Prof. Sara Comai 18 Informatica 3 Lezione 17 - Modulo 3 Implementazione Implementazione con puntatore al padre per ogni nodo si memorizza solamente il puntatore al padre dati due nodi, appartengono allo stesso albero? --> FIND merging di due alberi --> UNION dato un nodo qual è il figlio più a sinistra? ed il fratello? KO lberi e classi di equivalenza indice del padre dato indice del nodo Politecnico di Milano - Prof. Sara Comai 19 Politecnico di Milano - Prof. Sara Comai 20

Implementazione (2) // Return TRUE if nodes in different trees bool Gentree::differ(int a, int b) { int root1 = FIND(a); // Find root for a int root2 = FIND(b); // Find root for b return root1!= root2; // Compare roots // Return the root node int Gentree::FIND(int curr) const { while (array[curr]!=root) curr = array[curr]; return curr; // t root void Gentree::UNION(int a, int b) { int root1 = FIND(a); // Find root for a int root2 = FIND(b); // Find root for b if (root1!= root2) array[root2] = root1; Problema delle classi di equivalenza Problema: assegnare gli elementi di un insieme a delle classi equivalenza rappresentate da insiemi disgiunti B D C H E I J Politecnico di Milano - Prof. Sara Comai 21 Politecnico di Milano - Prof. Sara Comai 22 Problema delle classi di equivalenza Problema: assegnare gli elementi di un insieme a delle classi equivalenza rappresentate da insiemi disgiunti I lgoritmo Input: insieme di elementi da assegnare alle classi di equivalenza insieme di coppie di equivalenza B D C H E J Esempio elementi = {, B, C, D, E, F, G, H, I, J, coppie di equivalenza = { (,B), (C,H), (G,F), (D,E), (I.F), (,H), (E,G), (H,E) classi di equivalenza Politecnico di Milano - Prof. Sara Comai 23 Politecnico di Milano - Prof. Sara Comai 24

lgoritmo (2) Regola della union pesata Per avere un algoritmo efficiente: mantenere bassa l altezza dell albero Regola della union pesata: fare l unione di due alberi inserendo l albero con il minor numero di nodi come figlio dell albero con più nodi Profondità: Θ(log n) deriva dal fato che: profondità dell albero più piccolo si incrementa di 1 profondità dell albero più grande = profondità del nodo più profondo dei due alberi (+ 1 se il nodo più profondo si trova nell albero più piccolo) totale nodi >= 2 * numero dei nodi dell albero più piccolo Politecnico di Milano - Prof. Sara Comai 25 Politecnico di Milano - Prof. Sara Comai 26 Compressione del percorso int Gentree::FIND(int curr) const { if (array[curr] == ROOT) return curr; return array[curr] = FIND(array[curr]); Politecnico di Milano - Prof. Sara Comai 27