Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

24
Prof. Pier Luca Lanzi Alberi Algoritmi e Calcolo Parallelo

description

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

Transcript of Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Page 1: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

AlberiAlgoritmi e Calcolo Parallelo

Page 2: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

Riferimenti

• 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

2

Page 3: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

Alberi Radicati

• Albero (definizione informale): insieme dinamico i cui elementi hanno relazioni di tipo gerarchico

• Albero (definizione ricorsiva) Insieme vuotoUna radice T e 0 o più sottoalberi, con la radice

di ogni sottoalbero collegata a T da un arco (orientato)

3

Page 4: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

Alberi Radicati

• Albero radicatoUn insieme vuoto di nodi Un nodo radice R collegato a 0 o più alberi

(sottoalberi)

4

Page 5: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

Alberi Radicati 5

Page 6: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

6Alberi Radicati Binari

Page 7: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

Alberi Radicati Binari

• 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

7

Page 8: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

Alberi? 8

DAG Radice

Foresta

Page 9: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

Alberi Radicati

• 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

9

Page 10: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

10Alberi Binari: Pieni e Completi

• 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

Page 11: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

Rappresentazione degli Alberi Binari

11

Page 12: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

Realizzazione con Vettore dei Figli 12

/ /

/

/ / / /

//

/ /

/ ///////// / /

// / /

// / /

// / /

/ / /

Page 13: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

Realizzazione con Puntatori Padre, Primo-figlio, Fratello

13

Page 14: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

Altre Rappresentazioni:Con puntatore al parente

14

Page 15: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

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

15

Page 16: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

Realizzazione con Vettore dei Padri

• L'albero è rappresentato da un vettore i cui elementi contengono l'indice del padre

16

a

b e

c d f g

T0 a

1 b

1 e

2 c

2 d

3 f

3 g

Page 17: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

Possible Interfaccia 17

Page 18: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

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): DFSVengono visitati i rami, uno dopo l’altroTre varianti: pre-ordine, post-ordine, in-ordine

• In ampiezza (breadth-first search, a ventaglio): BFSA livelli, partendo dalla radice

18

Page 19: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

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());}

19

Page 20: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

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

20

Page 21: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

Esercizi

• Stampare il risultato dellaVisita in pre-ordineVisita in-ordineVisita in post-ordineVisita in ampiezza

• Scrivere un algoritmo perCalcolare l’altezza di un albero binario TCalcolare il numero di nodi di un albero binario TStampare tutti i nodi di profondità h di un albero

binario T

21

Page 22: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

Alberi Binari: Specifica 22

Page 23: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

Alberi Binari: Realizzazione 23

Page 24: Algoritmi e Calcolo Parallelo 2012/2013 - Alberi

Prof. Pier Luca Lanzi

Esercizi

• 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

24