Fibonacci Heaps e il loro utilizzo nell - PowerPoint PPT Presentation

About This Presentation
Title:

Fibonacci Heaps e il loro utilizzo nell

Description:

Fibonacci Heaps e il loro utilizzo nell algoritmo di Prim Paolo Larcheri 52SI Cosa vedremo Cos uno heap Cenni sull analisi ammortizzata Cosa sono gli Heap di ... – PowerPoint PPT presentation

Number of Views:101
Avg rating:3.0/5.0
Slides: 31
Provided by: stude2362
Category:

less

Transcript and Presenter's Notes

Title: Fibonacci Heaps e il loro utilizzo nell


1
Fibonacci Heaps e il loroutilizzo
nellalgoritmo di Prim
  • Paolo Larcheri 52SI

2
Cosa vedremo
  • Cosè uno heap
  • Cenni sullanalisi ammortizzata
  • Cosa sono gli Heap di Fibonacci
  • Gli algoritmi di Minimum Spanning Tree
  • Lutilizzo degli Heap di Fibonacci nellalgoritmo
    di Prim
  • Complessità dellalgoritmo di Prim
  • Esempio di funzionamento dellalgoritmo di Prim

3
Gli heap
  • Lo heap, in generale, è una struttura dati
  • atta a contenere un insieme di dati
    ordinabili
  • A prescindere dallimplementazione gli heap
  • devono fornire le seguenti operazioni
  • INSERISCI inserimento di un nuovo elemento
  • TROVA-MIN ricerca dell elemento con chiave
    minima
  • ESTRAI-MIN estrazione dellelemento con chiave
    minima
  • UNIONE fusione di due heap
  • DECREMENTA-CHIAVE dato un elemento dello heap
    e un
  • nuovo e minore valore per la chiave dello
    stesso, aggiorna
  • la chiave al nuovo valore
  • CANCELLA cancellazione di uno specifico
    elemento

4
Gli Heap di Fibonacci (1)
  • Introdotti da Fredman e Tarjan nel 1987
  • Possono essere considerati unottima
    implementazione di Heap!!
  • Sono stati progettati ispirandosi allanalisi
    ammortizzata al fine di ottenere ben precisi
    costi.

5
Cosè lanalisi ammortizzata
  • Lanalisi ammortizzata mira ad esprimere il tempo
    di esecuzione di unintera sequenza di operazioni
    attribuendo un costo nominale ad ogni tipologia
    di operazione (inserimento, cancellazione, ).
  • Anche se una singola operazione può forare il suo
    costo nominale, limportante e che il costo
    complessivo dellintera sequenza resti entro la
    somma dei costi nominali per le singole
    operazioni che la compongono.
  • Ovviamente vogliamo dichiarare dei costi nominali
    il piu bassi possibili!

6
Gli Heap di Fibonacci (2)
  • Le complessità delle operazioni

Operazione costo reale costo amm.
INSERISCI O(1) O(1)
TROVA-MIN O(1) O(1)
ESTRAI-MIN O(lg(n) t(H)) O(lg(n))
UNIONE O(1) O(1)
DECR-CHIAVE O(lg(n)) O(1)
CANCELLA O(lg(n) t(H)) O(lg(n))
t(H) numero di radici dello Heap di Fibonacci
7
Gli Heap di Fibonacci (3)
  • Gli Heap di Fibonacci sono costituiti da una
    lista di alberi caratterizzati ciascuno dall
    ordinamento parziale dello heap la chiave di
    ogni nodo è minore o uguale alla chiave dei
    figli in questo modo è garantito che il nodo con
    chiave minima è una delle radici
  • Ogni elemento dello Heap di Fibonacci punta al
    nodo-padre
  • Ogni nodo punta alla lista dei figli

8
Gli Heap di Fibonacci (4)
  • Ogni istanza di Heap di Fibonacci è costituita
    dai seguenti attributi
  • puntatore alla lista delle radici
  • puntatore al nodo con chiave minima
  • numero complessivo di alberi contenuti nello Heap
  • numero totale di nodi presenti nello Heap

9
Gli Heap di Fibonacci (5)
  • Ogni elemento dello Heap di Fibonacci è collegato
    direttamente al nodo-padre
  • Inoltre i suoi figli sono collocati in una lista
  • Gli attributi di ogni nodo sono
  • puntatore al nodo-padre
  • puntatore alla lista dei figli
  • 2 puntatori uno al suo fratello destro e uno al
    suo fratello sinistro
  • il grado (intero) numero dei suoi figli
  • chiave il valore del nodo

10
Gli Heap di Fibonacci (6)
  • Rappresentazione logica di uno Heap di
    Fibonacci allinterno di un calcolatore

11
Minimum Spanning Treenozioni fondamentali
  • Dato un grafo G(N, E) connesso, pesato e non
    orientato è sempre possibile trovare il suo MST,
    cioè quellalbero T(N, E2) (E2Í E) per cui la
    somma di tutti i pesi degli archi appartenenti a
    E2 è minima
  • Chiaramente se il grafo G è un albero, il suo MST
    sarà G stesso
  • Se G possiede archi con peso uguale è possibile
    che esistano più MST per G

12
Minimum Spanning Treealgoritmi
  • Gli algoritmi più noti sono
  • Algoritmo di Prim
  • Algoritmo di Kruskal

13
Algoritmo di Kruskal
  • Lalgoritmo di Kruskal è di tipo Greedy.
    Consiste nellordinare tutti gli archi del grafo
    secondo il loro peso. Inizialmente T è composto
    da i soli nodi di G. Vanno aggiunti (seguendo
    lordine di peso) uno a uno tutti gli archi che
    non generano cicli in T.
  • Loperazione più costosa è ordinare gli archi
    utilizzando un buon algoritmo di ordinamento,
    lalgoritmo di Kruskal costa O(mlog n)

14
Algoritmo di Prim
  • Grafo G(N, E1) -gt grafo
  • Albero T(N, E2) -gt MST NB E2 Í E1
  • Albero Prim(Grafo)
  • considera T formato da un nodo e da nessun
    arco
  • while(esistono nodi in T adiacenti a un nodo
    non in T)
  • seleziona larco di peso minimo che collega
    un
  • nodo in T con un nodo non in T
  • aggiungi a T sia larco selezionato che il
    nuovo
  • nodo
  • return T

15
Algoritmo di Prim
  • Nellalgoritmo di Prim è indispensabile
    utilizzare una struttura dati che contenga ad
    ogni passo della computazione tutti gli archi
    candidati allinserimento in T, ossia gli archi
    che connettono un nodo in T con uno non in T
  • Bisogna quindi ad ogni iterazione effettuare
    degli inserimenti e o delle sostituzioni

16
Algoritmo di Primle sostituzioni
  • Ad ogni iterazione, per ogni nodo v non ancora in
    T, basta tenere traccia del miglior arco e(v) che
    lo connetta ad un nodo già in T.
  • Di fatto, per ogni nodo v non in T, terremo
    traccia dellestremo in T di e(v), (NULL se
    nessun arco incidente in v ha laltro estremo in
    T).

archi presenti nella SD
arco con chiave minima
a
a
q
p
p
q
T
T
b
min
q lt p
17
Algoritmo di Primutilizzo degli Heap di
Fibonacci
  • Gli Heap di Fibonacci si prestano particolarmente
    bene a svolgere questa funzione mediante
    loperazione DECR-CHIAVE
  • Come visto prima questa operazione ha costo
    (ammortizzato) costante

18
Algoritmo di Primutilizzo degli Heap di
Fibonacci
  • Albero Prim(Grafo G)
  • considera T formato da un nodo scelto a caso
  • FH.inserisci(tutti gli archi del nodo scelto)
  • while(anew FH.estraiMin())
  • nnew nodo dellarco appena estratto che
  • non appartiene a T
  • T.inserisci(nnew, anew)
  • for each(x congiunto a nnew da un arco y)
  • if(x non appartiene a T)
  • if(FH contiene arco z che congiunge x a T)
  • FH.decrChiave(z, y)
  • else
  • FH.inserisci(y)
  • return T

n-1
2m
19
Algoritmo di Primcomplessità ammortizzata
  • WHILE a ogni iterazione viene effettuata una
    ESTRAI-MIN che come abbiamo visto ha costo
    ammortizzato pari a O(lg n)
  • FOR EACH a ogni iterazione viene eseguita una
    DECR-CHIAVE o una INSERISCI aventi entrambe costo
    ammortizzato costante
  • TOTALE il costo totale ammortizzato è quindi O(m
    n(lg n))

20
Algoritmo di Primosservazioni finali (1)
  • Il costo dellalgoritmo di Prim con gli Heap di
    Fibonacci dipende anche dal numero di archi
  • Quindi
  • Per grafi densi la complessità risulta essere
    O(n²)
  • Per grafi sparsi la complessità risulta essere
    O(n(lg n))

21
Algoritmo di Primosservazioni finali (2)
  • ATTENZIONE per grafi densi risulta essere più
    efficiente lutilizzo di strutture dati semplici
    (es liste) in quanto la complessità della
    struttura degli Heap di Fibonacci comporta
    unespansione della costante moltiplicativa non
    rilevabile a causa della notazione asintotica
  • Per capirci
  • liste ? O(an²)
  • Heap di Fibonacci ? O(bn²)
  • a b

22
Algoritmo di Primesempio (1)
2
18
6
6
1
8
13
4
10
17
8
12
15
1
14
7
4
3
3
20
5
23
Algoritmo di Primesempio (2)
2
18
6
6
1
8
13
4
10
17
8
12
15
1
14
7
4
3
3
20
5
24
Algoritmo di Primesempio (3)
2
18
6
6
1
8
13
4
10
17
8
12
15
1
14
7
4
3
3
20
5
25
Algoritmo di Primesempio (4)
2
18
6
6
1
8
13
4
10
17
8
12
15
1
14
7
4
3
3
20
5
26
Algoritmo di Primesempio (5)
2
18
6
6
1
8
13
4
10
17
8
12
15
1
14
7
4
3
3
20
5
27
Algoritmo di Primesempio (6)
2
18
6
6
1
8
13
4
10
17
8
12
15
1
14
7
4
3
3
20
5
28
Algoritmo di Primesempio (7)
2
18
6
6
1
8
13
4
10
17
8
12
15
1
14
7
4
3
3
20
5
29
Algoritmo di Primesempio (8)
2
18
6
6
1
8
13
4
10
17
8
12
15
1
14
7
4
3
3
20
5
30
Algoritmo di Primesempio (8)
2
18
6
6
1
8
13
4
10
17
8
12
15
1
14
7
4
3
3
20
5
Write a Comment
User Comments (0)
About PowerShow.com