Top Banner
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.
25

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

May 01, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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