Algoritmi e Strutture Dati
Capitolo 6
Il problema del dizionario
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Il tipo dato Dizionario
Suppongo sempre che mi venga
dato un riferimento diretto
all’elemento da cancellare
Applicazioni: gestione archivi di dati
2
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Implementazioni elementari
Search
Insert
Delete
O(n)
O(1)
O(1)
Array
ordinato
O(log n)
O(n)
O(n)
Lista non
ordinata
O(n)
O(1)
O(1)
Lista
ordinata
O(n)
O(n)
O(1)
Array non
ord.

3
Ognuno dei 4 metodi banali costa O(n). Voglio fare meglio…
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Lower bound (log n) per la ricerca
•
Consideriamo l’albero di decisione di un qualsiasi
algoritmo che risolve il problema della ricerca in un
insieme di n elementi tramite confronti
• L’albero deve contenere almeno n+1 foglie
• Un albero binario con k foglie in cui ogni nodo
interno ha esattamente due figli, ha altezza
h(k)  log k (vedi lezione n. 6)
 L’altezza h dell’albero di decisione è (log n).
 Il metodo di ricerca per dimezzamenti successivi è
ottimale!
4
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Alberi binari di ricerca
(BST = binary search tree)
5
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Definizione
Albero binario che soddisfa le seguenti proprietà:
– ogni nodo v contiene un elemento elem(v) cui è
associata una chiave chiave(v) presa da un dominio
totalmente ordinato, nonché un puntatore al padre, un
puntatore al figlio sinistro e un puntatore al figlio destro
– le chiavi nel sottoalbero sinistro di v sono < chiave(v)
– le chiavi nel sottoalbero destro di v sono > chiave(v)
6
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esempi
!
Albero binario
di ricerca
7
Albero binario
non di ricerca
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Visita simmetrica di un BST
• Visita in ordine simmetrico – dato un nodo x, elenco prima il
sotto-albero sinistro di x (in ordine simmetrico), poi il nodo x, poi
il sotto-albero destro di x (in ordine simmetrico)
Inorder-tree-walk(node x)
If (x  NULL)
then Inorder-tree-walk(left[x])
stampa key[x]
Inorder-tree-walk(right[x])
• Inorder-tree-walk(radice del BST) visita tutti i nodi del BST
• Analisi complessità: la complessità della procedura considerata
è T(n) = (n). Infatti:
T(n) = T(n') + T(n'') + O(1)
8
con n'+n''=n-1
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Proprietà della visita simmetrica di un BST
Inorder-tree-walk(radice del BST) visita i nodi del BST in ordine
crescente rispetto alla chiave!
Verifica: Indichiamo con h l’altezza dell’albero. Per induzione sull’altezza dell’ABR:
Base (h=0): banale (il BST consiste di un unico nodo);
Passo induttivo (h generico): ipotizzo che la procedura sia corretta per h-1
r
Albero di altezza < h-1.
Tutti i suoi elementi sono
minori della radice
9
Albero di altezza < h-1.
Tutti i suoi elementi sono
maggiori della radice
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esempio
15
6
3
18
7
17
20
massimo
2
13
4
minimo
9
10
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
search(chiave k) -> elem
Traccia un cammino nell’albero partendo dalla
radice: su ogni nodo, usa la proprietà di ricerca
per decidere se proseguire nel sottoalbero
sinistro o destro
11
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
search(7)
15
6
3
2
12
20
8
4
7
17
13
16
27
19
22
30
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Confronto con la ricerca binaria
• La complessità della procedura di ricerca considerata è
T(n) = O(h), ove h è l’altezza del BST.
• Nell’esempio precedente, il BST era completo, e quindi
h=Θ(log n)
• Per le proprietà del BST, quando esso è completo, per
ogni nodo v la chiave associata è l’elemento mediano
nell’insieme ordinato delle chiavi associate all’insieme di
nodi costituiti dal sottoalbero sinistro di v, da v, e dal
sottoalbero destro di v
Ad ogni discesa di livello, dimezzo lo spazio di ricerca, in
modo analogo a quanto avveniva per l’array ordinato!!
… ma un BST non sempre è completo…
13
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
30
…anche questo è un BST!!
22
27
20
19
17
16
15
...
2
14
Notare: T(n) = O(h) in entrambi i casi, però:
BST completo  h = (log(n))
BST “linearizzato”  h = (n)
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
insert(elem e, chiave k)
1. Crea un nuovo nodo u con elem=e e chiave=k
2. Cerca la chiave k nell’albero, identificando così
il nodo v che diventerà padre di u
3. Appendi u come figlio sinistro/destro di v in
modo che sia mantenuta la proprietà di
ordinamento totale
 La complessità della procedura considerata è
T(n) = O(h), ove h è l’altezza del BST
15
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
insert(e,8)
15
6
18
3
2
9
4
17
7
20
13
8
10
Se seguo questo schema l’elemento e viene posizionato nella
posizione giusta. Infatti, per costruzione, ogni antenato di e si ritrova e
nel giusto sottoalbero.
16
Copyright © 2004 - The McGraw - Hill Companies, srl