La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Algoritmi e Strutture Dati

Presentazioni simili


Presentazione sul tema: "Algoritmi e Strutture Dati"— Transcript della presentazione:

1 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 license, visit or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA. © Alberto Montresor

2 Albero: definizione informale
Alberi radicati Albero: definizione informale E' un insieme dinamico i cui elementi hanno relazioni di tipo gerarchico Albero: definizione ricorsiva Insieme vuoto di nodi, oppure Una radice T e 0 o più sottoalberi, con la radice di ogni sottoalbero collegata a T da un arco (orientato) T es.: radice T con n sottoalberi T1 T2 Tn © Alberto Montresor

3 Nodi interni = Nodi - Foglie Padre (parent) dei nodi j e k Sottoalbero
Alberi ordinati Figlio di T Radice del proprio sottoalbero Radice (root) T Figlio (child) di T Nodi interni = Nodi - Foglie Padre (parent) dei nodi j e k Sottoalbero a j k ... Nodi fratelli (figli di a) Foglie (leaf) © Alberto Montresor

4 Livello: l'insieme dei nodi alla stessa profondità
Alberi: definizioni In un albero Profondità di un nodo: la lunghezza del percorso dalla radice al nodo (i.e., numero archi attraversati) Livello: l'insieme dei nodi alla stessa profondità Altezza dell'albero: massimo livello delle sue foglie p=0 p=1 p=2 p=3 Livello 3 Altezza albero: 3 © Alberto Montresor

5 Alberi? DAG Radice Foresta © Alberto Montresor

6 Alberi: una possibile specifica
© Alberto Montresor

7 Algoritmi di visita degli alberi
Visita (o attraversamento) di un albero: Algoritmo 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 ampiezza (breadth-first search, a ventaglio): BFS A livelli, partendo dalla radice © Alberto Montresor

8 Visita alberi: in profondità in ordine anticipato (previsita)
g Sequenza: a b c d e f g © Alberto Montresor

9 Visita alberi: in profondità in ordine posticipato (postvisita)
g Sequenza: c d b f g e a © Alberto Montresor

10 Visita alberi: in profondità in ordine simmetrico (invisita)
g Sequenza (i=1): c b d a f e g © Alberto Montresor

11 Visita alberi: in ampiezza
c d f g Sequenza: a b e c d f g © Alberto Montresor

12 Realizzazione con vettore dei figli
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / Padre Array di Figli Rischio di sprecare memoria se molti nodi hanno grado minore del grado massimo k. Nodo © Alberto Montresor

13 Realizzazione con puntatori padre/primo-figlio/fratello
Nodo Soluzione: usare una lista di figli (fratelli). © Alberto Montresor

14 Realizzazione con puntatori padre/primo-figlio/fratello
© Alberto Montresor

15 Realizzazione con puntatori padre/primo-figlio/fratello
© Alberto Montresor

16 Realizzazione con vettore dei padri
L'albero è rappresentato da un vettore i cui elementi contengono l'indice del padre Esempio: 0 a T 1 b 1 e a 2 c b e 2 d c d f g 3 f 3 g © Alberto Montresor

17 Realizzazione con vettore dei padri
© Alberto Montresor

18 Alberi binari Definizione
Un albero binario è un albero ordinato in cui ogni nodo ha al più due figli e si fa distinzione tra il figlio sinistro ed il figlio destro di un nodo. Nota: due alberi T e U aventi gli stessi nodi, gli stessi figli per ogni nodo e la stessa radice, sono distinti qualora un nodo u sia designato come figlio sinistro di un nodo v in T e come figlio destro del medesimo nodo in U © Alberto Montresor

19 Alberi binari Figlio destro Radice del sottoalbero destro
Figlio sinistro Radice del sottoalbero sinistro Radice j.parent() Padre del nodo j (e k) Sottoalbero sinistro Sottoalbero destro a j k a.left() a.right() © Alberto Montresor

20 Alberi binari: specifica
© Alberto Montresor

21 Alberi binari: realizzazione
/ / / / / / / / / / Padre Figlio Sinistro Figlio Destro Nodo © Alberto Montresor

22 Alberi binari: realizzazione
Per motivi di spazio, le operazioni parent(), left(), right(), read() e write() non sono mostrate; semplicemente, restituiscono il valore della variabile corrispondente. © Alberto Montresor

23 Alberi binari: visite in profondità
© Alberto Montresor

24 Limite inferiore complessità ordinamento
Albero delle scelte in algoritmi di ordinamento Sequenze di confronti (a due alternative) rappresentabile come albero binario Nodi interni → confronti, foglie → soluzioni del problema Percorso radice-foglia: insieme di confronti per individuare una soluzione Limite inferiore ordinamento Sia n la dimensione del vettore Numero di possibili soluzioni: n! Altezza minima albero: log2 n! Da cui deriva che qualunque algoritmo di ordinamento richiede Ω(n log n) confronti © Alberto Montresor

25 Semplici esercizi basati su visite
Es Dato un albero radicato T, calcolare la sua altezza Dato un albero radicato T, calcolare il numero totale di nodi Dato un albero radicato T, stampare tutti i nodi a profondità h © Alberto Montresor


Scaricare ppt "Algoritmi e Strutture Dati"

Presentazioni simili


Annunci Google