Tipi di dato e Strutture dati elementari

Corso di INFORMATICA - Ingegneria Aerospaziale
Tipi di dato e Strutture dati elementari
Ing. Paolo Craca
Anno accademico 2007/2008
Tipi di dato e Strutture dati elementari
1 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Cosa vedremo in questo seminario
1
Introduzione
2
Pile
3
Code
4
Alberi
5
Bibliografia
Tipi di dato e Strutture dati elementari
2 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Introduzione
Algoritmi e Strutture dati
Programmi = Algoritmi + Strutture dati
Qual’è l’uovo e quale la gallina?
Tipi di dato e Strutture dati elementari
3 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Introduzione
Tipi di dato vs Strutture dati
Tipo di dato [astratto]
Individua un insieme di oggetti e specifica le operazioni di interesse su di
esso (ad esempio inserisci, cancella, cerca, . . . )
La specifica indica cosa un’operazione deve fare, non come può
essere realizzata e come gli oggetti dell’insieme debbano essere
organizzati.
Struttura dati
Organizzazione dei dati che permette di supportare le operazioni di un
tipo di dato in modo efficiente, usando meno risorse di calcolo possibile
in termini di spazio e tempo.
Tipi di dato e Strutture dati elementari
4 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Introduzione
Tecniche di rappresentazione
Rappresentazioni indicizzate
I dati sono contenuti in locazioni di memoria consecutive, accedibili
mediante indice (tipicamente, array).
Rappresentazioni collegate
I dati sono contenuti in locazioni di memoria non necessariamente
contigue, collegate tra loro mediante puntatori.
Tipi di dato e Strutture dati elementari
5 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Introduzione
Tecniche di rappresentazione: esempi
Tipi di dato e Strutture dati elementari
6 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Introduzione
Rappresentazioni indicizzate vs collegate
Pro
Contro
Rappresentazioni
indicizzate
Accesso diretto ai dati
mediante indici (tempo
costante)
Dimensione fissa
(riallocazione array
richiede tempo lineare)
Rappresentazioni
collegate
Dimensione variabile
(aggiunta e rimozione
record in tempo
costante)
Accesso lineare ai dati
(tempo lineare)
Tipi di dato e Strutture dati elementari
7 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Introduzione
Rappresentazioni indicizzate vs collegate: esempi
Tipi di dato e Strutture dati elementari
8 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Introduzione
Considerazioni
La scelta va fatta caso per caso a seconda dei requisiti di:
Variabilità dimensionale dei dati da trattare
Frequenza delle operazioni di lettura/scrittura sulla struttura dati
Vedremo solo rappresentazioni indicizzate!
Tipi di dato e Strutture dati elementari
9 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Pile
Il tipo di dato PILA
Definizione
Insieme finito di elementi tra i quali è definito un ordinamento totale
(lista) e, in particolare, le operazioni di inserimento ed estrazione si
compiono dallo stesso estremo.
I dati vengono gestiti secondo la logica LIFO - Last In First Out -:
l’ultimo ad essere stato inserito sarà il primo ad essere processato
Possibili utilizzi:
Stack di attivazione di programmi
Tipi di dato e Strutture dati elementari
10 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Pile
Tipo di dato astratto PILA
Dati
Una sequenza S di n elementi
Operazioni
isEmpty() → result
Restituisce VERO se S è vuota, FALSO altrimenti
push(elem e)
Aggiunge e come ultimo elemento (affiorante) di S
pop() → elem
Toglie da S l’ultimo elemento (affiorante) e lo restituisce
top() → elem
Restituisce l’ultimo elemento (affiorante) di S, senza toglierlo da S
Tipi di dato e Strutture dati elementari
11 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Pile
Struttura dati per il tipo PILA
Array di n elementi
Indice dell’elemento affiorante
Tipi di dato e Strutture dati elementari
12 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Pile
Esempio di PILA
Tipi di dato e Strutture dati elementari
13 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Pile
Operazioni su PILE: isEmpty()
Algoritmo
SE top < minimo indice array ALLORA VERO
ALTRIMENTI FALSO
Tipi di dato e Strutture dati elementari
14 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Pile
Operazioni su PILE: push(e)
Algoritmo
SE top < massimo indice array ALLORA
array(top+1) = e
top = top + 1
ALTRIMENTI ERRORE
Tipi di dato e Strutture dati elementari
15 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Pile
Operazioni su PILE: pop()
Algoritmo
SE top > minimo indice array ALLORA
Elem e = array(top)
top = top - 1
RETURN e
ALTRIMENTI ERRORE
Tipi di dato e Strutture dati elementari
16 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Pile
Operazioni su PILE: top()
Algoritmo
RETURN array(top)
Tipi di dato e Strutture dati elementari
17 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Pile
Esercizi
Esercizio 1
Quanti elementi sono “in pila”?
Esercizio 2
Tipi di dato e Strutture dati elementari
18 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Pile
Esercizi
Esercizio 1
Quanti elementi sono “in pila”?
top - minimo indice array + 1
Esercizio 2
Tipi di dato e Strutture dati elementari
18 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Pile
Esercizi
Esercizio 1
Esercizio 2
Data la seguente sequenza di operazioni su una pila vuota di 10
elementi, rappresentare lo stato finale della pila.
push(’O’)
push(’L’)
push(’O’)
pop()
push(’A’)
top()
push(’P’)
Tipi di dato e Strutture dati elementari
18 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Pile
Esercizi
Esercizio 1
Esercizio 2
Data la seguente sequenza di operazioni su una pila vuota di 10
elementi, rappresentare lo stato finale della pila.
push(’O’)
push(’L’)
push(’O’)
pop()
push(’A’)
top()
push(’P’)
Tipi di dato e Strutture dati elementari
18 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Code
Il tipo di dato CODA
Definizione
Insieme finito di elementi tra i quali è definito un ordinamento totale
(lista) e, in particolare, le operazioni di inserimento ed estrazione si
compiono dai due estremi opposti.
I dati vengono gestiti secondo la logica FIFO - First In First Out -: il
primo che è stato inserito sarà anche il primo ad essere processato
Possibili utilizzi:
Gestione accessi concorrenti ad una unica risorsa condivisa (priorità)
Buffer di memorizzazione dati
Tipi di dato e Strutture dati elementari
19 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Code
Tipo di dato astratto CODA
Dati
Una sequenza S di n elementi
Operazioni
isEmpty() → result
Restituisce VERO se S è vuota, FALSO altrimenti
enqueue(elem e)
Aggiunge e come ultimo elemento di S
dequeue() → elem
Toglie da S il primo elemento e lo restituisce
first() → elem
Restituisce il primo elemento di S, senza toglierlo da S
Tipi di dato e Strutture dati elementari
20 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Code
Struttura dati per il tipo CODA
Array di n elementi
Indice del primo elemento
Indice dell’ultimo elemento
Tipi di dato e Strutture dati elementari
21 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Code
Esempio di CODA
Tipi di dato e Strutture dati elementari
22 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Code
Operazioni su CODE: isEmpty()
Algoritmo
SE ((primo == ultimo) E (array(primo) = NULL)) ALLORA VERO
ALTRIMENTI FALSO
Tipi di dato e Strutture dati elementari
23 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Code
Operazioni su PILE: enqueue(e)
Algoritmo
SE ultimo < massimo indice array ALLORA
ultimo = ultimo + 1
array(ultimo) = e
ALTRIMENTI ERRORE
Tipi di dato e Strutture dati elementari
24 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Code
Operazioni su CODE: dequeue()
Algoritmo
SE primo ≥ minimo indice array ALLORA
Elem e = array(primo)
primo = primo + 1
RETURN e
ALTRIMENTI ERRORE
Tipi di dato e Strutture dati elementari
25 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Code
Operazioni su CODE: first()
Algoritmo
RETURN array(primo)
Tipi di dato e Strutture dati elementari
26 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Code
Esercizi
Esercizio 1
Quanti elementi sono “in coda”?
Esercizio 2
Tipi di dato e Strutture dati elementari
27 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Code
Esercizi
Esercizio 1
Quanti elementi sono “in coda”?
ultimo - primo + 1
Esercizio 2
Tipi di dato e Strutture dati elementari
27 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Code
Esercizi
Esercizio 1
Esercizio 2
Data la seguente sequenza di operazioni su una coda vuota di 10
elementi, rappresentare lo stato finale della coda.
enqueue(’P’)
enqueue(’A’)
dequeue()
first()
enqueue(’O’)
enqueue(’L’)
enqueue(’O’)
Tipi di dato e Strutture dati elementari
27 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Code
Esercizi
Esercizio 1
Esercizio 2
Data la seguente sequenza di operazioni su una coda vuota di 10
elementi, rappresentare lo stato finale della coda.
enqueue(’P’)
enqueue(’A’)
dequeue()
first()
enqueue(’O’)
enqueue(’L’)
enqueue(’O’)
Tipi di dato e Strutture dati elementari
27 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Il tipo di dato ALBERO
Definizione
Un albero è una coppia T = (N, A) costituita da:
un insieme N di elementi detti nodi,
un insieme A ⊆ N×N di coppie di nodi dette archi.
Un albero è un particolare tipo di grafo, connesso e senza cicli.
Possibili utilizzi:
Organizzazione gerarchica dei dati
Ricerche
Tipi di dato e Strutture dati elementari
28 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Il tipo di dato ALBERO
Ulteriori proprietà/definizioni:
ogni nodo (tranne la radice) ha un solo genitore (o padre),
raggiungibile attraverso un arco
un nodo può avere zero o più figli, raggiungibili attraverso
altrettanti archi orientati; il loro numero viene chiamato grado del
nodo
un nodo senza figli è chiamato foglia, mentre nodi che non sono nè
foglie nè radice sono chiamati nodi interni
la profondità (o livello) di un nodo è il numero di archi che è
necessario attraversare per raggiungerlo a partire dalla radice
Tipi di dato e Strutture dati elementari
29 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Esempio di ALBERO
Tipi di dato e Strutture dati elementari
30 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Tipo di dato astratto ALBERO
Dati
Un insieme di nodi (di tipo nodo) e un insieme di archi
Operazioni
numNodi() → intero
Restituisce il numero di nodi presenti nell’albero
grado(nodo v) → intero
Restituisce il numero di figli del nodo v
padre(nodo v) → nodo
Restituisce il padre del nodo v nell’albero, o null se v è la radice
figli(nodo v) → hnodo, nodo, nodo, ..., nodoi
Restituisce, uno dopo l’altro, i figli del nodo v
Tipi di dato e Strutture dati elementari
31 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Tipo di dato astratto ALBERO
Operazioni
aggiungiNodo(nodo u) → nodo
Inserisce un nuovo nodo v come figlio di u nell’albero e lo restituisce.
Se v è il primo nodo ad essere inserito nell’albero, esso diventa la
radice (e u viene ignorato)
aggiungiSottoalbero(Albero a, nodo u)
Inserisce nell’albero il sottoalbero a in modo che la radice di a
diventi figlia di u
rimuoviSottoalbero(nodo v) → Albero
Stacca e restituisce l’intero sottoalbero radicato in v
Tipi di dato e Strutture dati elementari
32 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Strutture dati per il tipo ALBERO
Molte strutture dati efficienti sono basate su alberi, in particolare su
alcune classi di alberi che presentano vincoli strutturali che facilitano la
rappresentazione o consentono di realizzare operazioni su collezioni di
elementi in modo efficiente.
I principali vincoli strutturali riguardano il grado dei nodi e la profondità:
un albero d-ario è un albero in cui tutti i nodi tranne le foglie hanno
grado massimo pari a d; per d=2 diremo che l’albero è binario
un albero d-ario in cui tutte le foglie sono sullo stesso livello è
completo.
Solo gli alberi d-ari completi possono essere rappresentati con le
strutture indicizzate che conosciamo (vettori/array)!
Tipi di dato e Strutture dati elementari
33 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Struttura dati per il tipo ALBERO
Ipotesi
Albero d-ario completo, con d≥2, con n nodi numerati da 1 ad n
Un vettore posizionale è un array P di dimensione n tale che:
P(v) contiene l’informazione associata al nodo v
P(d·v+i) contiene l’informazione associata all’i-esimo figlio di v, con
0≤i≤(d-1)
Esempio
Dato un nodo v di un albero binario (d=2) completo:
il figlio sinistro di v sarà in posizione 2v
il figlio destro di v sarà in posizione 2v+1
Tipi di dato e Strutture dati elementari
34 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Struttura dati per il tipo ALBERO
Array di n + 1 elementi
Per semplicità di indicizzazione la posizione 0 dell’array non è
utilizzata
Tipi di dato e Strutture dati elementari
35 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Struttura dati per il tipo ALBERO
Array di n + 1 elementi
Per semplicità di indicizzazione la posizione 0 dell’array non è
utilizzata
Tipi di dato e Strutture dati elementari
35 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Struttura dati per il tipo ALBERO
Array di n + 1 elementi
Per semplicità di indicizzazione la posizione 0 dell’array non è
utilizzata
Tipi di dato e Strutture dati elementari
35 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Struttura dati per il tipo ALBERO
Array di n + 1 elementi
Per semplicità di indicizzazione la posizione 0 dell’array non è
utilizzata
Tipi di dato e Strutture dati elementari
35 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Struttura dati per il tipo ALBERO
Array di n + 1 elementi
Per semplicità di indicizzazione la posizione 0 dell’array non è
utilizzata
Tipi di dato e Strutture dati elementari
35 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Struttura dati per il tipo ALBERO
Array di n + 1 elementi
Per semplicità di indicizzazione la posizione 0 dell’array non è
utilizzata
Tipi di dato e Strutture dati elementari
35 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Struttura dati per il tipo ALBERO
Array di n + 1 elementi
Per semplicità di indicizzazione la posizione 0 dell’array non è
utilizzata
Tipi di dato e Strutture dati elementari
35 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Struttura dati per il tipo ALBERO
Array di n + 1 elementi
Per semplicità di indicizzazione la posizione 0 dell’array non è
utilizzata
Tipi di dato e Strutture dati elementari
35 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Algoritmi di visita degli alberi
Visita in profondità
Parte dalla radice e procede visitando i nodi di figlio in figlio fino a
raggiungere una foglia. Retrocede poi al primo antenato che ha ancora
figli non visitati (se esiste) e ripete il procedimento a partire da uno di
quei figli.
Algoritmo: visitaDFS(nodo r)
Tipi di dato e Strutture dati elementari
36 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Algoritmi di visita degli alberi
Visita in profondità
Algoritmo: visitaDFS(nodo r)
Pila S
S.push(r)
CICLO
SE S.isEmpty() ALLORA EXIT
u ← S.pop()
SE (u 6= NULL) ALLORA
visita il nodo u
S.push(figlio destro di u)
S.push(figlio sinistro di u)
FINE CICLO
Tipi di dato e Strutture dati elementari
36 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Algoritmi di visita degli alberi
Visita in profondità
Algoritmo: visitaDFS(nodo r)
Pila S
S.push(r)
CICLO
SE S.isEmpty() ALLORA EXIT
u ← S.pop()
SE (u 6= NULL) ALLORA
visita il nodo u
S.push(figlio destro di u)
S.push(figlio sinistro di u)
FINE CICLO
Tipi di dato e Strutture dati elementari
36 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Algoritmi di visita degli alberi
Visita in profondità
Algoritmo: visitaDFS(nodo r)
Pila S
S.push(r)
CICLO
SE S.isEmpty() ALLORA EXIT
u ← S.pop()
SE (u 6= NULL) ALLORA
visita il nodo u
S.push(figlio destro di u)
S.push(figlio sinistro di u)
FINE CICLO
Tipi di dato e Strutture dati elementari
36 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Algoritmi di visita degli alberi
Visita in profondità
Algoritmo: visitaDFS(nodo r)
Pila S
S.push(r)
CICLO
SE S.isEmpty() ALLORA EXIT
u ← S.pop()
SE (u 6= NULL) ALLORA
visita il nodo u
S.push(figlio destro di u)
S.push(figlio sinistro di u)
FINE CICLO
Tipi di dato e Strutture dati elementari
36 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Algoritmi di visita degli alberi
Visita in profondità
Algoritmo: visitaDFS(nodo r)
Pila S
S.push(r)
CICLO
SE S.isEmpty() ALLORA EXIT
u ← S.pop()
SE (u 6= NULL) ALLORA
visita il nodo u
S.push(figlio destro di u)
S.push(figlio sinistro di u)
FINE CICLO
Tipi di dato e Strutture dati elementari
36 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Algoritmi di visita degli alberi
Visita in profondità
Algoritmo: visitaDFS(nodo r)
Pila S
S.push(r)
CICLO
SE S.isEmpty() ALLORA EXIT
u ← S.pop()
SE (u 6= NULL) ALLORA
visita il nodo u
S.push(figlio destro di u)
S.push(figlio sinistro di u)
FINE CICLO
Tipi di dato e Strutture dati elementari
36 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Algoritmi di visita degli alberi
Visita in profondità
Algoritmo: visitaDFS(nodo r)
Pila S
S.push(r)
CICLO
SE S.isEmpty() ALLORA EXIT
u ← S.pop()
SE (u 6= NULL) ALLORA
visita il nodo u
S.push(figlio destro di u)
S.push(figlio sinistro di u)
FINE CICLO
Tipi di dato e Strutture dati elementari
36 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Algoritmi di visita degli alberi
Visita in profondità
Algoritmo: visitaDFS(nodo r)
Pila S
S.push(r)
CICLO
SE S.isEmpty() ALLORA EXIT
u ← S.pop()
SE (u 6= NULL) ALLORA
visita il nodo u
S.push(figlio destro di u)
S.push(figlio sinistro di u)
FINE CICLO
Tipi di dato e Strutture dati elementari
36 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Algoritmi di visita degli alberi
Visita in profondità
Algoritmo: visitaDFS(nodo r)
Pila S
S.push(r)
CICLO
SE S.isEmpty() ALLORA EXIT
u ← S.pop()
SE (u 6= NULL) ALLORA
visita il nodo u
S.push(figlio destro di u)
S.push(figlio sinistro di u)
FINE CICLO
Tipi di dato e Strutture dati elementari
36 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Algoritmi di visita degli alberi
Visita in ampiezza
Parte dalla radice e procede visitando i nodi per livelli successivi. Un
nodo sul livello i può essere visitato solo se tutti i nodi sul livello i-1
sono stati visitati.
Algoritmo: visitaBFS(nodo r)
Tipi di dato e Strutture dati elementari
37 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Algoritmi di visita degli alberi
Visita in ampiezza
Algoritmo: visitaBFS(nodo r)
Coda C
C.enqueue(r)
CICLO
SE C.isEmpty() ALLORA
EXIT
u ← C.dequeue()
SE (u 6= NULL) ALLORA
visita il nodo u
C.enqueue(figlio sinistro di u)
C.enqueue(figlio destro di u)
FINE CICLO
Tipi di dato e Strutture dati elementari
37 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Algoritmi di visita degli alberi
Visita in ampiezza
Algoritmo: visitaBFS(nodo r)
Coda C
C.enqueue(r)
CICLO
SE C.isEmpty() ALLORA
EXIT
u ← C.dequeue()
SE (u 6= NULL) ALLORA
visita il nodo u
C.enqueue(figlio sinistro di u)
C.enqueue(figlio destro di u)
FINE CICLO
Tipi di dato e Strutture dati elementari
37 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Algoritmi di visita degli alberi
Visita in ampiezza
Algoritmo: visitaBFS(nodo r)
Coda C
C.enqueue(r)
CICLO
SE C.isEmpty() ALLORA
EXIT
u ← C.dequeue()
SE (u 6= NULL) ALLORA
visita il nodo u
C.enqueue(figlio sinistro di u)
C.enqueue(figlio destro di u)
FINE CICLO
Tipi di dato e Strutture dati elementari
37 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Algoritmi di visita degli alberi
Visita in ampiezza
Algoritmo: visitaBFS(nodo r)
Coda C
C.enqueue(r)
CICLO
SE C.isEmpty() ALLORA
EXIT
u ← C.dequeue()
SE (u 6= NULL) ALLORA
visita il nodo u
C.enqueue(figlio sinistro di u)
C.enqueue(figlio destro di u)
FINE CICLO
Tipi di dato e Strutture dati elementari
37 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Algoritmi di visita degli alberi
Visita in ampiezza
Algoritmo: visitaBFS(nodo r)
Coda C
C.enqueue(r)
CICLO
SE C.isEmpty() ALLORA
EXIT
u ← C.dequeue()
SE (u 6= NULL) ALLORA
visita il nodo u
C.enqueue(figlio sinistro di u)
C.enqueue(figlio destro di u)
FINE CICLO
Tipi di dato e Strutture dati elementari
37 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Algoritmi di visita degli alberi
Visita in ampiezza
Algoritmo: visitaBFS(nodo r)
Coda C
C.enqueue(r)
CICLO
SE C.isEmpty() ALLORA
EXIT
u ← C.dequeue()
SE (u 6= NULL) ALLORA
visita il nodo u
C.enqueue(figlio sinistro di u)
C.enqueue(figlio destro di u)
FINE CICLO
Tipi di dato e Strutture dati elementari
37 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Algoritmi di visita degli alberi
Visita in ampiezza
Algoritmo: visitaBFS(nodo r)
Coda C
C.enqueue(r)
CICLO
SE C.isEmpty() ALLORA
EXIT
u ← C.dequeue()
SE (u 6= NULL) ALLORA
visita il nodo u
C.enqueue(figlio sinistro di u)
C.enqueue(figlio destro di u)
FINE CICLO
Tipi di dato e Strutture dati elementari
37 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Algoritmi di visita degli alberi
Visita in ampiezza
Algoritmo: visitaBFS(nodo r)
Coda C
C.enqueue(r)
CICLO
SE C.isEmpty() ALLORA
EXIT
u ← C.dequeue()
SE (u 6= NULL) ALLORA
visita il nodo u
C.enqueue(figlio sinistro di u)
C.enqueue(figlio destro di u)
FINE CICLO
Tipi di dato e Strutture dati elementari
37 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Algoritmi di visita degli alberi
Visita in ampiezza
Algoritmo: visitaBFS(nodo r)
Coda C
C.enqueue(r)
CICLO
SE C.isEmpty() ALLORA
EXIT
u ← C.dequeue()
SE (u 6= NULL) ALLORA
visita il nodo u
C.enqueue(figlio sinistro di u)
C.enqueue(figlio destro di u)
FINE CICLO
Tipi di dato e Strutture dati elementari
37 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Alberi binari di ricerca
Definizione
Alberi binari che soddisfano le seguenti proprietà:
ogni nodo v contiene un elemento elem(v) cui è associata una chiave chiave(v) presa
da un dominio totalmente ordinato
le chiavi nel sottoalbero sinistro di v sono ≤ chiave(v)
le chiavi nel sottoalbero destro di v sono ≥ chiave(v)
Esempio
Tipi di dato e Strutture dati elementari
38 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Alberi binari di ricerca
Algoritmo: cerca(chiave k)→ elem
Esempio: cerca(12)
v ← radice di T
CICLO
SE v = NULL ALLORA EXIT
SE (k = chiave(v)) ALLORA
RETURN elem(v)
ALTRIMENTI SE (k < chiave(v)) ALLORA
v ← figlio sinistro di v
ALTRIMENTI v ← figlio destro di v
FINE CICLO
Tipi di dato e Strutture dati elementari
39 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Alberi binari di ricerca
Algoritmo: cerca(chiave k)→ elem
Esempio: cerca(12)
v ← radice di T
CICLO
SE v = NULL ALLORA EXIT
SE (k = chiave(v)) ALLORA
RETURN elem(v)
ALTRIMENTI SE (k < chiave(v)) ALLORA
v ← figlio sinistro di v
ALTRIMENTI v ← figlio destro di v
FINE CICLO
Tipi di dato e Strutture dati elementari
39 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Alberi binari di ricerca
Algoritmo: cerca(chiave k)→ elem
Esempio: cerca(12)
v ← radice di T
CICLO
SE v = NULL ALLORA EXIT
SE (k = chiave(v)) ALLORA
RETURN elem(v)
ALTRIMENTI SE (k < chiave(v)) ALLORA
v ← figlio sinistro di v
ALTRIMENTI v ← figlio destro di v
FINE CICLO
Tipi di dato e Strutture dati elementari
39 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Alberi
Alberi binari di ricerca
Algoritmo: cerca(chiave k)→ elem
Esempio: cerca(12)
v ← radice di T
CICLO
SE v = NULL ALLORA EXIT
SE (k = chiave(v)) ALLORA
RETURN elem(v)
ALTRIMENTI SE (k < chiave(v)) ALLORA
v ← figlio sinistro di v
ALTRIMENTI v ← figlio destro di v
FINE CICLO
Tipi di dato e Strutture dati elementari
39 / 40
Corso di INFORMATICA - Ingegneria Aerospaziale
Bibliografia
Bibliografia
Algoritmi e strutture dati
C. Demetrescu, I. Finocchi, G. Italiano - McGraw-Hill
Teoria e progetto di algoritmi fondamentali
G. Ausiello, A. Marchetti Spaccamela, M. Protasi - Franco Angeli
Tipi di dato e Strutture dati elementari
40 / 40