Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

605 views

Published on

Slide del corso di Algoritmi e Calcolo Parallelo per il corso di laurea magistrale in Ingegneria Matematica 2012/2013 - Politecnico di Milano

Published in: Education
  • Be the first to comment

  • Be the first to like this

Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

  1. 1. Alberi Algoritmi e Calcolo Parallelo Prof. Pier Luca Lanzi
  2. 2. Riferimenti • • 2 Bertossi Alan A., Montresor Alberto. “Algoritmi e strutture di dati” (seconda edizione), CittàStudi 2010 Stanley B. Lippman, Barbara E. Moo, Josee Lajoie “C++ Primer”, 5th Edition Addison-Wesley Prof. Pier Luca Lanzi
  3. 3. Alberi Radicati • • 3 Albero (definizione informale): insieme dinamico i cui elementi hanno relazioni di tipo gerarchico Albero (definizione ricorsiva) Insieme vuoto Una radice T e 0 o più sottoalberi, con la radice di ogni sottoalbero collegata a T da un arco (orientato)   Prof. Pier Luca Lanzi
  4. 4. Alberi Radicati • 4 Albero radicato Un insieme vuoto di nodi Un nodo radice R collegato a 0 o più alberi (sottoalberi)   Prof. Pier Luca Lanzi
  5. 5. Alberi Radicati 5 Prof. Pier Luca Lanzi
  6. 6. Alberi Radicati Binari Prof. Pier Luca Lanzi 6
  7. 7. Alberi Radicati Binari • • 7 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 Prof. Pier Luca Lanzi
  8. 8. Alberi? 8 DAG Foresta Prof. Pier Luca Lanzi Radice
  9. 9. Alberi Radicati • • • • 9 Profondità di un nodo: la lunghezza del percorso dalla radice al nodo (numero archi attraversati) Livello: l'insieme dei nodi alla stessa profondità Altezza dell'albero: massima profondità+1 Grado di un nodo: numero dei figli Prof. Pier Luca Lanzi
  10. 10. Alberi Binari: Pieni e Completi • • 10 Alberi binari pieni: Ogni nodo è una foglia oppure è un nodo interno con esattamente due figli non vuoti Alberi binari completi: se l’altezza dell’albero è d, allora tutte le foglie eccetto possibilmente il libello d sono completamente piene. L’ultimo livello ha tutti i nodi sul lato sinistro Prof. Pier Luca Lanzi
  11. 11. Rappresentazione degli Alberi Binari Prof. Pier Luca Lanzi 11
  12. 12. Realizzazione con Vettore dei Figli 12 / / / / / / / / / / / / / / / / / / / / / / / / Prof. Pier Luca Lanzi / / / / / / / / // / / / /
  13. 13. Realizzazione con Puntatori Padre, Primo-figlio, Fratello Prof. Pier Luca Lanzi 13
  14. 14. Altre Rappresentazioni: Con puntatore al parente Prof. Pier Luca Lanzi 14
  15. 15. Altre Rappresentazioni: Array Left Key Right Par 0 1 A 3 -1 1 -1 B 2 0 2 -1 D -1 1 3 4 C 6 0 4 5 E -1 3 5 -1 G -1 4 6 7 F 8 3 7 -1 H -1 6 8 -1 I -1 6 Prof. Pier Luca Lanzi 15
  16. 16. Realizzazione con Vettore dei Padri • 16 L'albero è rappresentato da un vettore i cui elementi contengono l'indice del padre 0 a T 1 b a 1 e b 2 c 2 d c 3 f 3 g Prof. Pier Luca Lanzi e d f g
  17. 17. Possible Interfaccia Prof. Pier Luca Lanzi 17
  18. 18. Algoritmi di Visita degli Alberi • • • 18 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: pre-ordine, post-ordine, in-ordine   In ampiezza (breadth-first search, a ventaglio): BFS A livelli, partendo dalla radice  Prof. Pier Luca Lanzi
  19. 19. Visita in Profondità: Implementazioni VisitaPreOrdine(T) VisitaRadice(T); VisitaPreOrdine(T->left()); VisitaPreOrdine(T->right()); } VisitaPostOrdine(T) VisitaPostOrdine(T->left()); VisitaPostOrdine(T->right()); VisitaRadice(T); } VisitaInOrdine(T) VisitaInOrdine(T->left()); VisitaRadice(T); VisitaInOrdine(T->right()); } Prof. Pier Luca Lanzi 19
  20. 20. Visita in Ampiezza VisitaAmpiezza(T) q = new Queue() q.insert(T) while not q.empty() do p := q.dequeue() visita p q.enqueue(p.left()) q.enqueue(p.right()) Prof. Pier Luca Lanzi 20
  21. 21. Esercizi • • 21 Stampare il risultato della Visita in pre-ordine Visita in-ordine Visita in post-ordine Visita in ampiezza     Scrivere un algoritmo per Calcolare l’altezza di un albero binario T Calcolare il numero di nodi di un albero binario T Stampare tutti i nodi di profondità h di un albero binario T    Prof. Pier Luca Lanzi
  22. 22. Alberi Binari: Specifica Prof. Pier Luca Lanzi 22
  23. 23. Alberi Binari: Realizzazione Prof. Pier Luca Lanzi 23
  24. 24. Esercizi • • • 24 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 Prof. Pier Luca Lanzi

×