Gli Heap di Fibonacci
Transcript
Gli Heap di Fibonacci
Gli Heap di Fibonacci
1
Introduzione
Possiamo dire che gli heap di Fibonacci sono
basati sugli heap binomiali;
un heap di Fibonacci è un insieme di alberi;
impiega O(1) per eseguire le stesse
operazioni degli heap binomiali, ad eccezione
delle operazioni di eliminazione di un nodo;
mentre gli heap binomiali impiegano O(lgn).
2
Struttura (I)
¾ È un insieme di alberi con l’ordinamento parziale
dello heap;
¾ tali alberi non devono essere necessariamente
binomiali;
¾ hanno una radice, ma non sono ordinati (a diff.dei
binomiali);
¾ ogni nodo x contiene un puntatore al padre p[x] e a
uno dei suoi figli (child[x]);
3
Struttura (II)
¾i figli di un nodo x sono collegati da una lista circolare a
doppio collegamento;
¾ ogni figlio y ha due puntatori al fratello sinistro e destro
(left[y] e right[y]). Se y non ha fratelli y=left[y]=right[y];
¾ l’ordine in cui compaiono i fratelli in una lista è arbitrario;
¾ un nodo x contiene un campo degree[x] che contiene il
numero di figli di x;
¾Il campo mark[x] ci dice se x ha perso almeno un figlio,
dall’ultima volta in cui è diventato a sua volta figlio di un
altro nodo (mark è un boolean).
4
Funzione potenziale (I)
9min[H] è il puntatore al nodo con chiave minima (che è sempre
una radice).
9n[H] è il numero dei nodi contenuti attualmente in H.
9t(H) è il numero degli alberi contenuti nello heap di Fibonacci.
9m(H) è il numero dei nodi marcati in H.
9Funzione potenziale P(H): serve per analizzare le prestazioni
delle operazioni sugli heap di Fibonacci
P(H) = t(H) + 2 m(H)
5
Funzione potenziale (II)
9il potenziale di un insieme di heap di Fibonacci è dato dalla
somma dei potenziali degli heap che lo costituiscono
P(H)=P(H1)+P(H2)+…+P(Hn), dove H=H1+H2+…+Hn
9 Si assume che un’applicazione che fa uso di uno heap di
Fibonacci inizia con un heap vuoto; dunque il potenziale è 0.
9 Il potenziale non è mai negativo.
9 GRADO MASSIMO: si assume che esiste un limite superiore
D(n) al numero dei figli di ogni nodo di un heap di Fibonacci con n
nodi.
9 D(n) = lgn
6
Esempio I
min[H]
23
7
3
18
52
39
18 : nodo marcato
Potenziale = 5+2*3=11
17
38
41
30
24
26
46
35
7
Esempio II
min[H]
23
7
3
18
52
39
17
38
41
30
24
26
46
35
8
Operazioni
Se devono essere fornite solo le operazioni MAKE-HEAP,
INSERT, MINIMUM, EXTRACT-MIN e UNION, allora uno heap
di Fibonacci non è altro che un insieme di alberi binomiali “non
ordinati”.
Creazione di uno heap di Fibonacci
MAKE-FIB-HEAP(){
n[H]=0;
min[H]=NULL;
}
t(H)=m(H)=0, quindi P(H)=0.
Costo di MAKE-FIB-HEAP:
O(1)
9
Inserimento di un nodo
FIB-HEAP-INSERT(H, x){
Il nodo x è già stato allocato e
degree(x)=0;
key(x) è già impostato.
p(x)=NULL;
child(x)=NULL;
left(x)=right(x)=x;
mark(x)=FALSE;
Tempo
concatena la lista delle radici contenente x con
O(1)
la lista delle radici di H
if (min(H)=NULL || key(x)<key(min(H)))
min(H)=x;
n(H)++;
}
P(H) =t(H) + 2*m(H)
P(H’)=(t(H)+1) + 2*m(H)
P(H)-P(H’)= 1
Aumento del
potenziale=1
Dunque costo ammortizzato= costo reale +1 = O(1)+1 = O(1)
10
Inserimento del nodo 21
min[H]
23
7
21
3
18
39
52
17
38
41
30
24
26
46
35
11
Unione di due heap di Fibonacci
FIB-HEAP-UNION(H1, H2){
H=MAKE-FIB-HEAP()
min(H)=min(H1);
concatena la lista delle radici di H2 con la lista
delle radici di H
if ((min(H1)=NULL) || (min(H2)!=NULL && min(H2)<min(H1)))
min(H)=min(H2);
n(H)=n(H1)+n(H2);
rilascia gli oggetti H1 eH2
return H;
}
Variazione del potenziale: P(H) - ( P(H1)+P(H2) ) =
= (t(H)+2*m(H)) – ( (t(H1)+2*m(H1)) - (t(H2)+2*m(H2)) )
Siccome P(H)=P(H1)+P(H2),
costo ammortizzato= costo reale +0 = O(1)
12
Documenti analoghi
Code di Priorità
Utili per ripristinare la proprietà di ordinamento a
heap su un nodo v che non la soddisfi
La Sezione Aurea in Informatica
gerarchia padre-figlio, un nodo padre può avere al massimo due figli e tutti i nodi ad
esclusione della radice possiedono un padre.
I principali tipi di Heap sono:
1) Heap binario
2) Heap binomiale...
altrimenti, nella variabile MAX metterà lʹindice del suo figlio sinistro (LEFT (i)).
Successivamente confronta la variabile MAX con il figlio destro. Se MAX è minore di
RI...