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à

Code di Priorità Utili per ripristinare la proprietà di ordinamento a heap su un nodo v che non la soddisfi

Dettagli

La Sezione Aurea in Informatica

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...

Dettagli

Heap

Heap 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...

Dettagli