Algoritmi e Strutture Dati
Capitolo 8
Code con priorità
Camil Demetrescu, Irene Finocchi,
Giuseppe F. Italiano
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Coda con priorità
Una coda con priorità è un tipo di dato che
permette di mantenere il minimo (o il
massimo) in un insieme di chiavi su cui è
definita una relazione d’ordine totale.
2
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Heap
128
72
64
8
1
7
6
12
30
3
A={ 128, 64, 72, 8,
1 2 3 4
7, 12, 30, 1,
5 6 7 8
6,
9
3 }
10
A(6) = 12
3
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Memorizzazione di un heap in un
vettore
128
72
64
8
1
4
7
6
12
30
3
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Struttura dati heap
Rappresentazione ad albero e con vettore posizionale
sin(i) = 2i
des(i) = 2i+1
37
22
31
13
7
15
12
3
25
14
9
vettore posizionale
0
5
37 22 31 13 15 25 14
7
3 12
1
8
9
2
3
4
5
6
7
9
10 11
Se le foglie
nell’ultimo livello
sono compattate a
sinistra, il vettore
posizionale ha
esattamente
dimensione n
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Memorizzazione di un heap in un
vettore
• Radice
posizione 1
• Per ogni nodo in posizione i:
left-child(i)
posizione 2i
right-child(i)
posizione 2i+1
• Parent(i) = i/2
6
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Proprietà salienti degli heap
1) Il massimo è contenuto nella radice
2) L’albero ha altezza O(log n)
3) Gli heap con struttura rafforzata possono essere
rappresentati in un array di dimensione pari a n
7
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
La procedura fixHeap
Se tutti i nodi di H tranne v soddisfano la proprietà di
ordinamento a heap, possiamo ripristinarla come segue:
fixHeap(nodo v, heap H)
if (v è una foglia) then return
else
sia u il figlio di v con chiave massima
if ( chiave(v) < chiave(u) ) then
scambia chiave(v) e chiave(u)
fixHeap(u,H)
Tempo di esecuzione: O(log n)
8
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Estrazione del massimo
• Copia nella radice la chiave contenuta nella
la foglia più a destra dell’ultimo livello
• Rimuovi la foglia
• Ripristina la proprietà di ordinamento a
heap richiamando fixHeap sulla radice
Tempo di esecuzione: O(log n)
9
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Costruzione dell’heap
Algoritmo ricorsivo basato sul divide et impera
heapify(heap H)
if (H è vuoto) then return
else
heapify(sottoalbero sinistro di H)
heapify(sottoalbero destro di H)
fixHeap(radice di H,H)
Tempo di esecuzione: T(n)= 2T(n/2)+O(log n)
T(n) = O(n)
10
dal Teorema Master
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
PQ implementate con Heap
1. Extract-max(A)
2.
if heap-size(A)<1 then "error"
3.
max=A[1]
4.
A[1]=A[heapsize(A)]
5.
heapsize(A)=heapsize(A)-1
6.
HeapFix(1,A)
7.
return max
O(log(n))
11
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
PQ implementate con Heap
max = ??
max =
max =
Heapify(
12
)
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
PQ implementate con Heap
1. Insert(A,x)
2.
heap-size(A)=heap-size(A)+1
3.
i=heap-size(A)
4.
while i>1 and A[padre(i)]<x
5.
do A[i]=A[padre(i)]
6.
i=parent(i)
7.
A[i]=x
O(log(n))
13
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Tipo di dato CodaPriorità (1/2)
14
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Tipo di dato CodaPriorità (2/2)
15
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Tre implementazioni
d-heap: generalizzazione degli heap
binari visti per l’ordinamento
heap binomiali
heap di Fibonacci
16
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
d-heap
17
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Definizione
Un d-heap è un albero radicato d-ario con le seguenti
proprietà:
1. Struttura: è completo almeno fino al penultimo
livello
2. Contenuto informativo: ogni nodo v contiene un
elemento elem(v) ed una chiave chiave(v) presa da
un dominio totalmente ordinato
3. Ordinamento a heap: chiave(v) ≥ chiave(parent(v))
per ogni nodo v diverso dalla radice
18
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esempio
Heap d-ario con 18 nodi e d=3
19
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Proprietà
1. Un d-heap con n nodi ha altezza O(logd n)
2. La radice contiene l’elemento con chiave minima
(per via della proprietà di ordinamento a heap)
3. Può essere rappresentato implicitamente tramite
vettore posizionale grazie alla proprietà di struttura
20
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Procedure ausiliarie
Utili per ripristinare la proprietà di ordinamento a heap
su un nodo v che non la soddisfi
T(n)=O(logd n)
T(n)=O(d logd n)
21
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
findMin
T(n)=O(1)
22
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
insert(elem e, chiave k)
T(n)=O(logd n) per l’esecuzione di muoviAlto
23
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
delete(elem e) e deleteMin
T(n)=O(d logd n) per l’esecuzione di muoviBasso
Può essere usata anche per implementare la
cancellazione del minimo
24
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
decreaseKey(elem e, chiave d)
T(n)=O(logd n) per l’esecuzione di muoviAlto
25
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
increaseKey(elem e, chiave d)
T(n)=O(d logd n) per l’esecuzione di muoviBasso
26
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Heap binomiali
27
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Alberi binomiali
Un albero binomiale Bh è definito ricorsivamente come segue:
1. B0 consiste di un unico nodo
2. Per i≥0, Bi+1 è ottenuto fondendo due alberi binomiali Bi
con la radice dell’uno come figlia della radice dell’altro
28
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Proprietà strutturali
29
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Definizione di heap binomiale
Un heap binomiale è una foresta di alberi binomiali
con le seguenti proprietà:
1. Struttura: ogni albero Bi nella foresta è un albero
binomiale
2. Unicità: per ogni i, esiste al più un Bi nella foresta
3. Contenuto informativo: ogni nodo v contiene un
elemento elem(v) ed una chiave chiave(v) presa da
un dominio totalmente ordinato
4. Ordinamento a heap: chiave(v) ≥ chiave(parent(v))
per ogni nodo v diverso da una delle radici
30
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Proprietà
In un heap binomiale con n nodi, vi sono al
più log2 n alberi binomiali, ciascuno con
grado ed altezza O(log n)
31
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Procedura ausiliaria
Utile per ripristinare la proprietà di unicità in un heap
binomiale
T(n) è proporzionale al numero di alberi binomiali in input
32
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Realizzazione (1/3)
33
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Realizzazione (2/3)
34
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Realizzazione (3/3)
Tutte le operazioni richiedono tempo T(n) = O(log n)
Durante l’esecuzione della procedura ristruttura esistono
infatti al più tre Bi, per ogni i ≥ 0
35
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Heap di Fibonacci
36
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Heap di Fibonacci
Heap binomiale rilassato: si ottiene da un heap
binomiale rilassando la proprietà di unicità dei Bi
ed utilizzando un atteggimento più “pigro” durante
l’operazione insert (perché ristrutturare subito la
foresta quando potremmo farlo dopo?)
Heap di Fibonacci: si ottiene da un heap binomiale
rilassato rilassando la proprietà di struttura dei Bi
che non sono più necessariamente alberi binomiali
Analisi sofisticata: i tempi di esecuzione sono
ammortizzati su sequenze di operazioni
37
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Conclusioni: tabella riassuntiva
L’analisi di dHeap e HeapBinomiale è nel caso peggiore,
mentre quella per HeapBinomialeRilassato e
HeapFibonacci è ammortizzata
38
Copyright © 2004 - The McGraw - Hill Companies, srl