1 © alberto montresor algoritmi e strutture dati capitolo 5 - alberi alberto montresor università...

25
1 © Alberto Montresor 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 http://creativecommons.org/licenses/by-nc-sa/2.5/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Upload: tiziana-giordani

Post on 01-May-2015

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

1© Alberto Montresor

Algoritmi e Strutture DatiCapitolo 5 - Alberi

Alberto MontresorUniversità di Trento

This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.5/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Page 2: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

2© Alberto Montresor

Alberi radicatiAlberi 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)

T1 T2 Tn

T

es.: radice T con n sottoalberi

Page 3: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

3© Alberto Montresor

Alberi ordinatiAlberi ordinati

T

j k

a

Radice (root)

Sottoalbero

Figlio (child) di T

Figlio di T

Radice del proprio

sottoalbero

Foglie (leaf)

Nodi fratelli

(figli di a)

Nodi interni =

Nodi - Foglie

...

Padre (parent)

dei nodi j e k

Page 4: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

4© Alberto Montresor

Alberi: definizioniAlberi: 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

Altezza albero: 3

p=1

p=2

p=3

Livello 3

Page 5: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

5© Alberto Montresor

Alberi?Alberi?

DAG Radice

Foresta

Page 6: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

6© Alberto Montresor

Alberi: una possibile specifica

Page 7: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

7© Alberto Montresor

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

Page 8: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

8© Alberto Montresor

Visita alberi: in profondità in ordine anticipato (previsita)Visita alberi: in profondità in ordine anticipato (previsita)

a

b e

c d f g

Sequenza: a b c d e f g

T

Page 9: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

9© Alberto Montresor

Visita alberi: in profondità in ordine posticipato (postvisita)Visita alberi: in profondità in ordine posticipato (postvisita)

a

b e

c d f g

T

Sequenza: c d b f g e a

Page 10: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

10

© Alberto Montresor

Visita alberi: in profondità in ordine simmetrico (invisita)Visita alberi: in profondità in ordine simmetrico (invisita)

a

b e

c d f g

T

Sequenza (i=1): c b d a f e g

Page 11: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

11

© Alberto Montresor

Visita alberi: in ampiezzaVisita alberi: in ampiezza

a

b e

c d f g

T

Sequenza: a b e c d f g

Page 12: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

12

© Alberto Montresor

Realizzazione con vettore dei figliRealizzazione con vettore dei figli

/ /

/

/ / / /

/

Nodo

Padre

Array di Figli

/

/ /

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

// / /

// / /

// / / // / /

/ / /

Rischio di sprecare memoria se molti nodi hanno grado minore del grado massimo k.

Page 13: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

13

© Alberto Montresor

Realizzazione con puntatori padre/primo-figlio/fratelloRealizzazione con puntatori padre/primo-figlio/fratello

/ /

/

/ /

/

/ / / /

/ / / /

//

NodoPrimoFiglio

Padre

Fratello

Soluzione: usare una lista di figli (fratelli).

Page 14: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

14

© Alberto Montresor

Realizzazione con puntatori padre/primo-figlio/fratello

Page 15: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

15

© Alberto Montresor

Realizzazione con puntatori padre/primo-figlio/fratello

Page 16: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

16

© Alberto Montresor

Realizzazione con vettore dei padriRealizzazione con vettore dei padri

a

b e

c d f g

T

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

✦Esempio: 0 a

1 b

1 e

2 c

2 d

3 f

3 g

Page 17: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

17

© Alberto Montresor

Realizzazione con vettore dei padri

Page 18: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

18

© Alberto Montresor

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

Page 19: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

19

© Alberto Montresor

Alberi binari Alberi binari

j k

a

Radice

Sottoalbero

destro

Sottoalbero

sinistro

Figlio sinistro

Radice del

sottoalbero sinistro

Figlio destro

Radice del

sottoalbero destro

j.parent()

Padre del

nodo j (e k)

a.left() a.right()

Page 20: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

20

© Alberto Montresor

Alberi binari: specifica

Page 21: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

21

© Alberto Montresor

Alberi binari: realizzazioneAlberi binari: realizzazione

/ / / / /

/ /

/

/ /

NodoFiglio

Sinistro

Padre

FiglioDestro

Page 22: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

22

© Alberto Montresor

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.

Page 23: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

23

© Alberto Montresor

Alberi binari: visite in profondità

Page 24: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

24

© Alberto Montresor

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 qualunquealgoritmo di ordinamentorichiede Ω(n log n) confronti

Page 25: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons

25

© Alberto Montresor

Semplici esercizi basati su visite

✦Es. 5.1 - 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

www.xkcd.com