Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
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
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.