SlideShare a Scribd company logo
1 of 34
Download to read offline
www.democraziadigitale.eu
Studio comparativo tra gli algoritmi
di Dijkstra e Bellman-Ford
ANNO ACCADEMICO 2014/2015
Francesco Ciclosi
Camerino, febbraio 2015
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Il problema dei cammini minimi
 un problema di cammino minimo prevede
l’individuazione della via più breve per andare da un
punto di partenza (p), a un punto di arrivo (a)
 Nella teoria dei grafi, il cammino minimo indica il
percorso che collega due vertici dati, minimizzando
la somma dei costi associati all’attraversamento di
ogni arco
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Un problema molte varianti
 cammini minimi a sorgente singola, per la
determinazione dei cammini minimi a partire da un
nodo prefissato;
 cammini minimi tra tutte le coppie, per la
determinazione dei cammini minimi tra ogni nodo.
 La maggior parte dei problemi è riconducibile al 1°
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Archi con cicli di pesi negativi
 Dati due vertici s e v, v è raggiungibile da s se
esiste almeno un cammino da s a v
 La raggiungibilità
non è sufficiente a
garantire l’esistenza
di un cammino
minimo tra due
nodi
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Il sottografo dei predecessori
 Sia 𝐺 = (𝑉, 𝐸) un grafo orientato e pesato senza
cicli di peso negativo raggiungibili da 𝑠 ∈ 𝑉;
 Il sottografo dei predecessori 𝐺 𝜋 = 𝑉𝜋, 𝐸 𝜋 è:
• 𝑉𝜋 = 𝑣 ∈ 𝑉: 𝜋 𝑣 ≠ 𝑁𝐼𝐿 ∪ 𝑠 , ovvero l’insieme
dei vertici 𝑉𝜋 è l’insieme composto dai vertici di 𝐺
aventi predecessore diverso da NIL, più la sorgente 𝑠
• 𝐸 𝜋 = 𝜋 𝑣 , 𝑣 ∈ 𝐸: 𝑣 ∈ 𝑉𝜋 − 𝑠 , ovvero l’insieme
degli archi orientati 𝐸 𝜋 è l’insieme di archi indotto dai
valori di 𝜋 per i vertici in 𝑉𝜋.
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
La tecnica del rilassamento
 per ogni nodo 𝑢 del grafo, si memorizza un
attributo 𝑑 𝑢 (stima del cammino minimo)
 𝑑 𝑢 è un limite superiore al peso di un cammino
minimo dalla sorgente 𝑠 a un nodo 𝑣 ∈ 𝑉
 rilassare un arco (𝑢, 𝑣) vuol dire
• verificare se passando per 𝑢, si può migliorare il
cammino minimo per 𝑣 attualmente noto
• aggiornare conseguentemente i valori di 𝑑[𝑣] e 𝜋[𝑣]
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Rappresentazione dell’output
 L’output del problema dei cammini minimi a
sorgente singola è l’albero dei cammini minimi
 La rappresentazione utilizza un array 𝜋, di
dimensione pari al numero dei nodi e tale che 𝜋 𝑢
contenga:
• il nodo padre di u
• -1 se u è la radice dell’albero (ovvero il nodo sorgente)
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
L’algoritmo di Dijkstra
 Risolve il problema di cammini minimi con
sorgente singola
• su di un grafo orientato e pesato 𝐺 = (𝑉, 𝐸)
• nel caso in cui tutti gli archi hanno peso non negativo,
quindi 𝑤(𝑢, 𝑣) ≥ 0 per ogni arco (𝑢, 𝑣) ∈ 𝐸
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Funzionamento – elementi utilizzati
• un insieme 𝑆 con i vertici aventi il peso di cammino
minimo dalla sorgente 𝑠 già determinato;
• una coda a priorità 𝑄 con i vertici aventi il peso di
cammino minimo dalla sorgente 𝑠 non già determinato;
• un array 𝑑 per memorizzare di volta in volta il peso del
cammino migliore temporaneo per ciascun nodo;
• un array 𝜋 in cui viene memorizzato l’albero dei
cammini
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Algoritmo di Dijkstra: pseudocodice (1)
 Utilizza le due seguenti procedure:
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Algoritmo di Dijkstra: pseudocodice (2)
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
L’algoritmo di Bellman-Ford
 Risolve il problema di cammini minimi con
sorgente singola
• su di un grafo orientato e pesato 𝐺 = (𝑉, 𝐸)
• anche nel caso più generale in cui i pesi degli archi
possono essere negativi
• identifica l’eventuale esistenza nel grafo di cicli di peso
negativo, che siano raggiungibili dalla sorgente
• produce l’albero dei cammini minimi con i relativi pesi,
se nel grafo non esistono i cicli di cui sopra
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Algoritmo di Bellman-Ford: pseudocodice
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Analisi comparativa
 Analisi dell’algoritmo di Dijkstra
• descrizione, analisi asintotica, analisi della struttura
dati implementata per la coda di priorità
 Analisi dell’algoritmo di Bellman-Ford
• descrizione, analisi asintotica
 Comparazione riassuntiva tra i due algoritmi
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Dijkstra: analisi (1)
 L’efficienza dell’algoritmo dipende dalla struttura
dati usata per implementare la coda di priorità Q
 La scelta dell’implementazione di Q non cambia
il comportamento dell’algoritmo
 La scelta dell’implementazione di Q cambia la
complessità e l’efficienza dell’algoritmo
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Dijkstra: analisi (2)
 L’algoritmo si basa su tre operazioni principali
che sono la base per l’analisi della complessità
asintotica
• Inserimento (istruzione Q ← V)
• Estrazione del minimo (funzione Extract_Min())
• Decremento di una chiave (implicito nella funzione
Relax(u,v,w))
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Coda di priorità su lista non ordinata
 È la più semplice implementazione della coda
 È realizzabile con un vettore di puntatori
 Il tempo totale di esecuzione dell’algoritmo è
quindi Ο 𝐸 + 𝑉2
= Ο(𝑉2
)
× |V| operazioni
× |E| operazioni
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Coda di priorità su heap binario (1)
 Realizza Q organizzando gli elementi in un
albero binario secondo la struttura min-heap
 Mantiene 3 proprietà:
• Ogni elemento della coda corrisponde a un nodo
dell’albero binario
• Ogni nodo dell’albero binario diverso dalla radice ha
priorità ≥ a quella del nodo padre
• L’albero è completo fino al penultimo livello (h-1)
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Coda di priorità su heap binario (2)
 Dato un albero di n nodi, dalle tre proprietà
derivano le seguenti:
1. L’heap conterrà esattamente n nodi
2. Tutti i nodi dell’albero avranno priorità ≥ a
quella della radice
3. L’altezza è proporzionale a 𝑙𝑜𝑔2 𝑛 che diviene un
limite superiore per ogni operazione sull’albero
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Coda su heap binario: analisi asintotica
 Il tempo totale di esecuzione dell’algoritmo è pari a
Ο 𝐸𝑙𝑜𝑔𝑉 + 𝑉𝑙𝑜𝑔𝑉 = Ο( 𝐸 + 𝑉 𝑙𝑜𝑔𝑉)
× |V| operazioni
× |E| operazioni
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Coda di priorità su heap di Fibonacci
 È la più efficiente coda con priorità utilizzabile
per l’algoritmo di Dijkstra
 Ha le stesse prestazioni teoriche di un heap
tradizionale ma…
 …permette inserimento e decremento di una
chiave in un tempo constante e non logaritmico
 Fa uso dell’analisi in tempo ammortizzato
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Struttura dati heap di Fibonacci (1)
 Sono composti da una lista di alberi che soddisfano
l’ordinamento parziale min-heap (≤)
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Struttura dati heap di Fibonacci (2)
 Ogni nodo 𝑥 ha un puntatore 𝑝 𝑥 al padre e un puntatore 𝑐ℎ𝑖𝑙𝑑 𝑥
a uno dei suoi figli.
 I figli di 𝑥 sono collegati da una lista circolare a doppio collegamento
 Ogni figlio 𝑦 ha dei puntatori 𝑙𝑒𝑓𝑡 𝑦 e 𝑟𝑖𝑔ℎ𝑡 𝑦
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
L’analisi ammortizzata
 Il tempo di esecuzione di una sequenza di
operazioni di una struttura dati è la media dei
tempi di esecuzione della sequenza
 Sia n la dimensione di una struttura dati e k una
catena di operazioni su di essa
 => La complessità in tempo è la somma dei
tempi di caso pessimo divisa per k
 => Ottengo l’efficienza media nel caso pessimo
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Il metodo del potenziale
 È una tecnica usata nell’analisi ammortizzata
 Si associa alla struttura dati D un potenziale 𝜙(𝐷),
definito in modo tale che:
• le operazioni meno costose lo incrementano
• le operazioni più costose lo diminuiscono
 Il costo ammortizzato è quindi dato dalla somma
algebrica di costo effettivo e variazione di potenziale
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Funzione potenziale per l’heap di Fibonacci
 Sia H un heap di Fibonacci
• 𝑡(𝐻) il numero di alberi nella lista delle radici di 𝐻
• 𝑚(𝐻) il numero dei nodi marcati in 𝐻
 La funzione potenziale è così definita:
 𝜙 𝐻 = 𝑡 𝐻 + 2𝑚 𝐻
• Assumiamo che un’applicazione che fa uso di un heap
di Fibonacci inizi con un heap vuoto
• => Il potenziale iniziale è dunque pari a 0 e rimarrà
positivo anche successivamente.
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Coda su heap di Fibonacci: analisi asintotica
 Il tempo totale di esecuzione dell’algoritmo è pari a
Ο(𝑉𝑙𝑜𝑔𝑉 + 𝐸)
× |V| operazioni
× |E| operazioni
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Altre possibili implementazioni di Dijkstra
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Bellman-Ford: analisi
 L’algoritmo si basa su tre operazioni principali
basilari per l’analisi della complessità asintotica:
• Inizializzazione (funzione Initialize_Single_Source()) –
riga 1
• Rilassamento (funzione Relax(u,v,w))) – ciclo for delle
righe 2-4
• Diminuzione della stima del peso di cammino minimo
– ciclo for delle righe 5-7
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Coda su heap di Fibonacci: analisi asintotica
 Il tempo totale di esecuzione dell’algoritmo è Ο(𝑉𝐸)
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Conclusioni (1)
 Caso grafo con archi aventi pesi negativi
• Non supportato da Dijkstra
• Supportato da Bellman-Ford (rileva anche la presenza
di cicli negativi)
 Tipologia:
• Dijkstra esempio di algoritmo Greedy
• Bellman-Ford esempio di programmazione dinamica
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Conclusioni (2)
 Rilassamento
• Entrambi utilizzano tale tecnica
• Dijkstra rilassa ogni arco una sola volta
• Bellman-Ford rilassa ogni arco del grafo |V|-1 volte
 Complessità (caso migliore):
• Dijkstra Ο(𝑉𝑙𝑜𝑔𝑉 + 𝐸) con heap di Fibonacci
• Bellman-Ford Ο(VE) – risulta meno efficiente
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
Conclusioni (3)
 La complessità di Dijkstra è strettamente connessa
alla complessità della sua coda di priorità
 Θ(𝑉 + 𝑉 × 𝑇𝐸𝑥𝑡𝑟𝑎𝑐𝑡_𝑀𝑖𝑛() + 𝐸 × 𝑇𝑅𝑒𝑙𝑎𝑥 𝑢,𝑣,𝑤 )
Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford
© Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati.
www.democraziadigitale.eu
I miei contatti
linkedin
http://it.linkedin.com/pub/francesco-ciclosi/62/680/a06/
facebook
https://www.facebook.com/francesco.ciclosi
twitter
@francyciclosi
www
http://www.francescociclosi.it

More Related Content

What's hot

Conception d-un-equipement
Conception d-un-equipementConception d-un-equipement
Conception d-un-equipementbenzid dziri
 
Renaissance powerpoint
Renaissance powerpointRenaissance powerpoint
Renaissance powerpointleuboss
 
Armature urbaine 01
Armature urbaine 01Armature urbaine 01
Armature urbaine 01Sami Sahli
 
Cours algorithme
Cours algorithmeCours algorithme
Cours algorithmebadr zaimi
 
CIRRHOSE DECOMPENSEE Recommandations de l'EASL pour la prise en charge des co...
CIRRHOSE DECOMPENSEE Recommandations de l'EASL pour la prise en charge des co...CIRRHOSE DECOMPENSEE Recommandations de l'EASL pour la prise en charge des co...
CIRRHOSE DECOMPENSEE Recommandations de l'EASL pour la prise en charge des co...Claude EUGENE
 
Sistemul-Digestiv_Peritoneul_updated_2020_web (1).pptx
Sistemul-Digestiv_Peritoneul_updated_2020_web (1).pptxSistemul-Digestiv_Peritoneul_updated_2020_web (1).pptx
Sistemul-Digestiv_Peritoneul_updated_2020_web (1).pptxNicoleBunicelu1
 
Chapitre iv algorithmes de tri
Chapitre iv algorithmes de triChapitre iv algorithmes de tri
Chapitre iv algorithmes de triSana Aroussi
 

What's hot (10)

Conception d-un-equipement
Conception d-un-equipementConception d-un-equipement
Conception d-un-equipement
 
Renaissance powerpoint
Renaissance powerpointRenaissance powerpoint
Renaissance powerpoint
 
Armature urbaine 01
Armature urbaine 01Armature urbaine 01
Armature urbaine 01
 
Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 
Cours algorithme
Cours algorithmeCours algorithme
Cours algorithme
 
Cirrhose 2017
Cirrhose 2017Cirrhose 2017
Cirrhose 2017
 
Dépression
DépressionDépression
Dépression
 
CIRRHOSE DECOMPENSEE Recommandations de l'EASL pour la prise en charge des co...
CIRRHOSE DECOMPENSEE Recommandations de l'EASL pour la prise en charge des co...CIRRHOSE DECOMPENSEE Recommandations de l'EASL pour la prise en charge des co...
CIRRHOSE DECOMPENSEE Recommandations de l'EASL pour la prise en charge des co...
 
Sistemul-Digestiv_Peritoneul_updated_2020_web (1).pptx
Sistemul-Digestiv_Peritoneul_updated_2020_web (1).pptxSistemul-Digestiv_Peritoneul_updated_2020_web (1).pptx
Sistemul-Digestiv_Peritoneul_updated_2020_web (1).pptx
 
Chapitre iv algorithmes de tri
Chapitre iv algorithmes de triChapitre iv algorithmes de tri
Chapitre iv algorithmes de tri
 

Viewers also liked

Viewers also liked (15)

Asd 01 Algoritmi E Strutture Dati
Asd 01 Algoritmi E Strutture DatiAsd 01 Algoritmi E Strutture Dati
Asd 01 Algoritmi E Strutture Dati
 
Programmazione a blocchi
Programmazione a blocchiProgrammazione a blocchi
Programmazione a blocchi
 
Cosa sono gli algoritmi?
Cosa sono gli algoritmi?Cosa sono gli algoritmi?
Cosa sono gli algoritmi?
 
Flow Chart - Diagramma a blocchi
Flow Chart - Diagramma a blocchiFlow Chart - Diagramma a blocchi
Flow Chart - Diagramma a blocchi
 
Presentazione corretta algoritmi
Presentazione corretta algoritmiPresentazione corretta algoritmi
Presentazione corretta algoritmi
 
Insegnare gli algoritmi giocando: progetto sviluppo e sperimentazione di un p...
Insegnare gli algoritmi giocando: progetto sviluppo e sperimentazione di un p...Insegnare gli algoritmi giocando: progetto sviluppo e sperimentazione di un p...
Insegnare gli algoritmi giocando: progetto sviluppo e sperimentazione di un p...
 
Algoritmi
Algoritmi Algoritmi
Algoritmi
 
Esercizio Sugli Algoritmi
Esercizio Sugli AlgoritmiEsercizio Sugli Algoritmi
Esercizio Sugli Algoritmi
 
15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi
 
Routing dinamico
Routing dinamicoRouting dinamico
Routing dinamico
 
come costruire un algoritmo
come costruire un algoritmocome costruire un algoritmo
come costruire un algoritmo
 
Flow chart
Flow chartFlow chart
Flow chart
 
Coding: dai diagrammi di flusso al pipecoding
Coding: dai diagrammi di flusso al pipecodingCoding: dai diagrammi di flusso al pipecoding
Coding: dai diagrammi di flusso al pipecoding
 
Pixel art
Pixel artPixel art
Pixel art
 
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordCaminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
 

More from Francesco Ciclosi

La biometria come nuovo paradigma di autenticazione e identificazione
La biometria come nuovo paradigma di autenticazione e identificazioneLa biometria come nuovo paradigma di autenticazione e identificazione
La biometria come nuovo paradigma di autenticazione e identificazioneFrancesco Ciclosi
 
The network attached devices inventory as required by the Italian requirement...
The network attached devices inventory as required by the Italian requirement...The network attached devices inventory as required by the Italian requirement...
The network attached devices inventory as required by the Italian requirement...Francesco Ciclosi
 
The risk analysis as a unified approach to satisfy GDPR, NIS Directive and IS...
The risk analysis as a unified approach to satisfy GDPR, NIS Directive and IS...The risk analysis as a unified approach to satisfy GDPR, NIS Directive and IS...
The risk analysis as a unified approach to satisfy GDPR, NIS Directive and IS...Francesco Ciclosi
 
MODULO E02 –> Scelte di consumo intertemporale
MODULO E02 –> Scelte di consumo intertemporaleMODULO E02 –> Scelte di consumo intertemporale
MODULO E02 –> Scelte di consumo intertemporaleFrancesco Ciclosi
 
La rappresentazione delle informazioni
La rappresentazione delle informazioniLa rappresentazione delle informazioni
La rappresentazione delle informazioniFrancesco Ciclosi
 
MODULO IB04 –> La memoria di massa
MODULO IB04 –> La memoria di massaMODULO IB04 –> La memoria di massa
MODULO IB04 –> La memoria di massaFrancesco Ciclosi
 
MODULO E01 –> Scelte d’investimento per un’impresa
MODULO E01 –> Scelte d’investimento per un’impresaMODULO E01 –> Scelte d’investimento per un’impresa
MODULO E01 –> Scelte d’investimento per un’impresaFrancesco Ciclosi
 
MODULO IB03 –> La memoria principale
MODULO IB03 –> La memoria principaleMODULO IB03 –> La memoria principale
MODULO IB03 –> La memoria principaleFrancesco Ciclosi
 
MODULO IB02 –> I bit e la loro memorizzazione
MODULO IB02 –> I bit e la loro memorizzazioneMODULO IB02 –> I bit e la loro memorizzazione
MODULO IB02 –> I bit e la loro memorizzazioneFrancesco Ciclosi
 
MODULO IB01 –> Elementi di base
MODULO IB01 –> Elementi di baseMODULO IB01 –> Elementi di base
MODULO IB01 –> Elementi di baseFrancesco Ciclosi
 
MODULO 00 –> Presentazione del corso
MODULO 00 –> Presentazione del corsoMODULO 00 –> Presentazione del corso
MODULO 00 –> Presentazione del corsoFrancesco Ciclosi
 
MODULO 28 –> La Business Continuity Management
MODULO 28 –> La Business Continuity ManagementMODULO 28 –> La Business Continuity Management
MODULO 28 –> La Business Continuity ManagementFrancesco Ciclosi
 
MODULO 27 –> Dai virus al malware
MODULO 27 –> Dai virus al malwareMODULO 27 –> Dai virus al malware
MODULO 27 –> Dai virus al malwareFrancesco Ciclosi
 
MODULO 26 –> Il controllo degli accessi
MODULO 26 –> Il controllo degli accessiMODULO 26 –> Il controllo degli accessi
MODULO 26 –> Il controllo degli accessiFrancesco Ciclosi
 
MODULO 25 –> Fondamenti delle tecnologie per il web
MODULO 25 –> Fondamenti delle tecnologie per il webMODULO 25 –> Fondamenti delle tecnologie per il web
MODULO 25 –> Fondamenti delle tecnologie per il webFrancesco Ciclosi
 
MODULO 24 –> I servizi di rete
MODULO 24 –> I servizi di reteMODULO 24 –> I servizi di rete
MODULO 24 –> I servizi di reteFrancesco Ciclosi
 
MODULO 23 –> Le reti geografiche
MODULO 23 –> Le reti geograficheMODULO 23 –> Le reti geografiche
MODULO 23 –> Le reti geograficheFrancesco Ciclosi
 
MODULO 22 –> Lo spazio degli indirizzi IP
MODULO 22 –> Lo spazio degli indirizzi IPMODULO 22 –> Lo spazio degli indirizzi IP
MODULO 22 –> Lo spazio degli indirizzi IPFrancesco Ciclosi
 
MODULO 21 –> Le reti locali
MODULO 21 –> Le reti localiMODULO 21 –> Le reti locali
MODULO 21 –> Le reti localiFrancesco Ciclosi
 
MODULO 20 –> Introduzione al TCP/IP
MODULO 20 –> Introduzione al TCP/IPMODULO 20 –> Introduzione al TCP/IP
MODULO 20 –> Introduzione al TCP/IPFrancesco Ciclosi
 

More from Francesco Ciclosi (20)

La biometria come nuovo paradigma di autenticazione e identificazione
La biometria come nuovo paradigma di autenticazione e identificazioneLa biometria come nuovo paradigma di autenticazione e identificazione
La biometria come nuovo paradigma di autenticazione e identificazione
 
The network attached devices inventory as required by the Italian requirement...
The network attached devices inventory as required by the Italian requirement...The network attached devices inventory as required by the Italian requirement...
The network attached devices inventory as required by the Italian requirement...
 
The risk analysis as a unified approach to satisfy GDPR, NIS Directive and IS...
The risk analysis as a unified approach to satisfy GDPR, NIS Directive and IS...The risk analysis as a unified approach to satisfy GDPR, NIS Directive and IS...
The risk analysis as a unified approach to satisfy GDPR, NIS Directive and IS...
 
MODULO E02 –> Scelte di consumo intertemporale
MODULO E02 –> Scelte di consumo intertemporaleMODULO E02 –> Scelte di consumo intertemporale
MODULO E02 –> Scelte di consumo intertemporale
 
La rappresentazione delle informazioni
La rappresentazione delle informazioniLa rappresentazione delle informazioni
La rappresentazione delle informazioni
 
MODULO IB04 –> La memoria di massa
MODULO IB04 –> La memoria di massaMODULO IB04 –> La memoria di massa
MODULO IB04 –> La memoria di massa
 
MODULO E01 –> Scelte d’investimento per un’impresa
MODULO E01 –> Scelte d’investimento per un’impresaMODULO E01 –> Scelte d’investimento per un’impresa
MODULO E01 –> Scelte d’investimento per un’impresa
 
MODULO IB03 –> La memoria principale
MODULO IB03 –> La memoria principaleMODULO IB03 –> La memoria principale
MODULO IB03 –> La memoria principale
 
MODULO IB02 –> I bit e la loro memorizzazione
MODULO IB02 –> I bit e la loro memorizzazioneMODULO IB02 –> I bit e la loro memorizzazione
MODULO IB02 –> I bit e la loro memorizzazione
 
MODULO IB01 –> Elementi di base
MODULO IB01 –> Elementi di baseMODULO IB01 –> Elementi di base
MODULO IB01 –> Elementi di base
 
MODULO 00 –> Presentazione del corso
MODULO 00 –> Presentazione del corsoMODULO 00 –> Presentazione del corso
MODULO 00 –> Presentazione del corso
 
MODULO 28 –> La Business Continuity Management
MODULO 28 –> La Business Continuity ManagementMODULO 28 –> La Business Continuity Management
MODULO 28 –> La Business Continuity Management
 
MODULO 27 –> Dai virus al malware
MODULO 27 –> Dai virus al malwareMODULO 27 –> Dai virus al malware
MODULO 27 –> Dai virus al malware
 
MODULO 26 –> Il controllo degli accessi
MODULO 26 –> Il controllo degli accessiMODULO 26 –> Il controllo degli accessi
MODULO 26 –> Il controllo degli accessi
 
MODULO 25 –> Fondamenti delle tecnologie per il web
MODULO 25 –> Fondamenti delle tecnologie per il webMODULO 25 –> Fondamenti delle tecnologie per il web
MODULO 25 –> Fondamenti delle tecnologie per il web
 
MODULO 24 –> I servizi di rete
MODULO 24 –> I servizi di reteMODULO 24 –> I servizi di rete
MODULO 24 –> I servizi di rete
 
MODULO 23 –> Le reti geografiche
MODULO 23 –> Le reti geograficheMODULO 23 –> Le reti geografiche
MODULO 23 –> Le reti geografiche
 
MODULO 22 –> Lo spazio degli indirizzi IP
MODULO 22 –> Lo spazio degli indirizzi IPMODULO 22 –> Lo spazio degli indirizzi IP
MODULO 22 –> Lo spazio degli indirizzi IP
 
MODULO 21 –> Le reti locali
MODULO 21 –> Le reti localiMODULO 21 –> Le reti locali
MODULO 21 –> Le reti locali
 
MODULO 20 –> Introduzione al TCP/IP
MODULO 20 –> Introduzione al TCP/IPMODULO 20 –> Introduzione al TCP/IP
MODULO 20 –> Introduzione al TCP/IP
 

Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford

  • 1. www.democraziadigitale.eu Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford ANNO ACCADEMICO 2014/2015 Francesco Ciclosi Camerino, febbraio 2015
  • 2. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Il problema dei cammini minimi  un problema di cammino minimo prevede l’individuazione della via più breve per andare da un punto di partenza (p), a un punto di arrivo (a)  Nella teoria dei grafi, il cammino minimo indica il percorso che collega due vertici dati, minimizzando la somma dei costi associati all’attraversamento di ogni arco
  • 3. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Un problema molte varianti  cammini minimi a sorgente singola, per la determinazione dei cammini minimi a partire da un nodo prefissato;  cammini minimi tra tutte le coppie, per la determinazione dei cammini minimi tra ogni nodo.  La maggior parte dei problemi è riconducibile al 1°
  • 4. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Archi con cicli di pesi negativi  Dati due vertici s e v, v è raggiungibile da s se esiste almeno un cammino da s a v  La raggiungibilità non è sufficiente a garantire l’esistenza di un cammino minimo tra due nodi
  • 5. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Il sottografo dei predecessori  Sia 𝐺 = (𝑉, 𝐸) un grafo orientato e pesato senza cicli di peso negativo raggiungibili da 𝑠 ∈ 𝑉;  Il sottografo dei predecessori 𝐺 𝜋 = 𝑉𝜋, 𝐸 𝜋 è: • 𝑉𝜋 = 𝑣 ∈ 𝑉: 𝜋 𝑣 ≠ 𝑁𝐼𝐿 ∪ 𝑠 , ovvero l’insieme dei vertici 𝑉𝜋 è l’insieme composto dai vertici di 𝐺 aventi predecessore diverso da NIL, più la sorgente 𝑠 • 𝐸 𝜋 = 𝜋 𝑣 , 𝑣 ∈ 𝐸: 𝑣 ∈ 𝑉𝜋 − 𝑠 , ovvero l’insieme degli archi orientati 𝐸 𝜋 è l’insieme di archi indotto dai valori di 𝜋 per i vertici in 𝑉𝜋.
  • 6. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu La tecnica del rilassamento  per ogni nodo 𝑢 del grafo, si memorizza un attributo 𝑑 𝑢 (stima del cammino minimo)  𝑑 𝑢 è un limite superiore al peso di un cammino minimo dalla sorgente 𝑠 a un nodo 𝑣 ∈ 𝑉  rilassare un arco (𝑢, 𝑣) vuol dire • verificare se passando per 𝑢, si può migliorare il cammino minimo per 𝑣 attualmente noto • aggiornare conseguentemente i valori di 𝑑[𝑣] e 𝜋[𝑣]
  • 7. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Rappresentazione dell’output  L’output del problema dei cammini minimi a sorgente singola è l’albero dei cammini minimi  La rappresentazione utilizza un array 𝜋, di dimensione pari al numero dei nodi e tale che 𝜋 𝑢 contenga: • il nodo padre di u • -1 se u è la radice dell’albero (ovvero il nodo sorgente)
  • 8. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu L’algoritmo di Dijkstra  Risolve il problema di cammini minimi con sorgente singola • su di un grafo orientato e pesato 𝐺 = (𝑉, 𝐸) • nel caso in cui tutti gli archi hanno peso non negativo, quindi 𝑤(𝑢, 𝑣) ≥ 0 per ogni arco (𝑢, 𝑣) ∈ 𝐸
  • 9. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Funzionamento – elementi utilizzati • un insieme 𝑆 con i vertici aventi il peso di cammino minimo dalla sorgente 𝑠 già determinato; • una coda a priorità 𝑄 con i vertici aventi il peso di cammino minimo dalla sorgente 𝑠 non già determinato; • un array 𝑑 per memorizzare di volta in volta il peso del cammino migliore temporaneo per ciascun nodo; • un array 𝜋 in cui viene memorizzato l’albero dei cammini
  • 10. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Algoritmo di Dijkstra: pseudocodice (1)  Utilizza le due seguenti procedure:
  • 11. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Algoritmo di Dijkstra: pseudocodice (2)
  • 12. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu L’algoritmo di Bellman-Ford  Risolve il problema di cammini minimi con sorgente singola • su di un grafo orientato e pesato 𝐺 = (𝑉, 𝐸) • anche nel caso più generale in cui i pesi degli archi possono essere negativi • identifica l’eventuale esistenza nel grafo di cicli di peso negativo, che siano raggiungibili dalla sorgente • produce l’albero dei cammini minimi con i relativi pesi, se nel grafo non esistono i cicli di cui sopra
  • 13. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Algoritmo di Bellman-Ford: pseudocodice
  • 14. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Analisi comparativa  Analisi dell’algoritmo di Dijkstra • descrizione, analisi asintotica, analisi della struttura dati implementata per la coda di priorità  Analisi dell’algoritmo di Bellman-Ford • descrizione, analisi asintotica  Comparazione riassuntiva tra i due algoritmi
  • 15. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Dijkstra: analisi (1)  L’efficienza dell’algoritmo dipende dalla struttura dati usata per implementare la coda di priorità Q  La scelta dell’implementazione di Q non cambia il comportamento dell’algoritmo  La scelta dell’implementazione di Q cambia la complessità e l’efficienza dell’algoritmo
  • 16. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Dijkstra: analisi (2)  L’algoritmo si basa su tre operazioni principali che sono la base per l’analisi della complessità asintotica • Inserimento (istruzione Q ← V) • Estrazione del minimo (funzione Extract_Min()) • Decremento di una chiave (implicito nella funzione Relax(u,v,w))
  • 17. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Coda di priorità su lista non ordinata  È la più semplice implementazione della coda  È realizzabile con un vettore di puntatori  Il tempo totale di esecuzione dell’algoritmo è quindi Ο 𝐸 + 𝑉2 = Ο(𝑉2 ) × |V| operazioni × |E| operazioni
  • 18. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Coda di priorità su heap binario (1)  Realizza Q organizzando gli elementi in un albero binario secondo la struttura min-heap  Mantiene 3 proprietà: • Ogni elemento della coda corrisponde a un nodo dell’albero binario • Ogni nodo dell’albero binario diverso dalla radice ha priorità ≥ a quella del nodo padre • L’albero è completo fino al penultimo livello (h-1)
  • 19. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Coda di priorità su heap binario (2)  Dato un albero di n nodi, dalle tre proprietà derivano le seguenti: 1. L’heap conterrà esattamente n nodi 2. Tutti i nodi dell’albero avranno priorità ≥ a quella della radice 3. L’altezza è proporzionale a 𝑙𝑜𝑔2 𝑛 che diviene un limite superiore per ogni operazione sull’albero
  • 20. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Coda su heap binario: analisi asintotica  Il tempo totale di esecuzione dell’algoritmo è pari a Ο 𝐸𝑙𝑜𝑔𝑉 + 𝑉𝑙𝑜𝑔𝑉 = Ο( 𝐸 + 𝑉 𝑙𝑜𝑔𝑉) × |V| operazioni × |E| operazioni
  • 21. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Coda di priorità su heap di Fibonacci  È la più efficiente coda con priorità utilizzabile per l’algoritmo di Dijkstra  Ha le stesse prestazioni teoriche di un heap tradizionale ma…  …permette inserimento e decremento di una chiave in un tempo constante e non logaritmico  Fa uso dell’analisi in tempo ammortizzato
  • 22. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Struttura dati heap di Fibonacci (1)  Sono composti da una lista di alberi che soddisfano l’ordinamento parziale min-heap (≤)
  • 23. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Struttura dati heap di Fibonacci (2)  Ogni nodo 𝑥 ha un puntatore 𝑝 𝑥 al padre e un puntatore 𝑐ℎ𝑖𝑙𝑑 𝑥 a uno dei suoi figli.  I figli di 𝑥 sono collegati da una lista circolare a doppio collegamento  Ogni figlio 𝑦 ha dei puntatori 𝑙𝑒𝑓𝑡 𝑦 e 𝑟𝑖𝑔ℎ𝑡 𝑦
  • 24. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu L’analisi ammortizzata  Il tempo di esecuzione di una sequenza di operazioni di una struttura dati è la media dei tempi di esecuzione della sequenza  Sia n la dimensione di una struttura dati e k una catena di operazioni su di essa  => La complessità in tempo è la somma dei tempi di caso pessimo divisa per k  => Ottengo l’efficienza media nel caso pessimo
  • 25. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Il metodo del potenziale  È una tecnica usata nell’analisi ammortizzata  Si associa alla struttura dati D un potenziale 𝜙(𝐷), definito in modo tale che: • le operazioni meno costose lo incrementano • le operazioni più costose lo diminuiscono  Il costo ammortizzato è quindi dato dalla somma algebrica di costo effettivo e variazione di potenziale
  • 26. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Funzione potenziale per l’heap di Fibonacci  Sia H un heap di Fibonacci • 𝑡(𝐻) il numero di alberi nella lista delle radici di 𝐻 • 𝑚(𝐻) il numero dei nodi marcati in 𝐻  La funzione potenziale è così definita:  𝜙 𝐻 = 𝑡 𝐻 + 2𝑚 𝐻 • Assumiamo che un’applicazione che fa uso di un heap di Fibonacci inizi con un heap vuoto • => Il potenziale iniziale è dunque pari a 0 e rimarrà positivo anche successivamente.
  • 27. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Coda su heap di Fibonacci: analisi asintotica  Il tempo totale di esecuzione dell’algoritmo è pari a Ο(𝑉𝑙𝑜𝑔𝑉 + 𝐸) × |V| operazioni × |E| operazioni
  • 28. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Altre possibili implementazioni di Dijkstra
  • 29. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Bellman-Ford: analisi  L’algoritmo si basa su tre operazioni principali basilari per l’analisi della complessità asintotica: • Inizializzazione (funzione Initialize_Single_Source()) – riga 1 • Rilassamento (funzione Relax(u,v,w))) – ciclo for delle righe 2-4 • Diminuzione della stima del peso di cammino minimo – ciclo for delle righe 5-7
  • 30. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Coda su heap di Fibonacci: analisi asintotica  Il tempo totale di esecuzione dell’algoritmo è Ο(𝑉𝐸)
  • 31. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Conclusioni (1)  Caso grafo con archi aventi pesi negativi • Non supportato da Dijkstra • Supportato da Bellman-Ford (rileva anche la presenza di cicli negativi)  Tipologia: • Dijkstra esempio di algoritmo Greedy • Bellman-Ford esempio di programmazione dinamica
  • 32. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Conclusioni (2)  Rilassamento • Entrambi utilizzano tale tecnica • Dijkstra rilassa ogni arco una sola volta • Bellman-Ford rilassa ogni arco del grafo |V|-1 volte  Complessità (caso migliore): • Dijkstra Ο(𝑉𝑙𝑜𝑔𝑉 + 𝐸) con heap di Fibonacci • Bellman-Ford Ο(VE) – risulta meno efficiente
  • 33. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu Conclusioni (3)  La complessità di Dijkstra è strettamente connessa alla complessità della sua coda di priorità  Θ(𝑉 + 𝑉 × 𝑇𝐸𝑥𝑡𝑟𝑎𝑐𝑡_𝑀𝑖𝑛() + 𝐸 × 𝑇𝑅𝑒𝑙𝑎𝑥 𝑢,𝑣,𝑤 )
  • 34. Studio comparativo tra gli algoritmi di Dijkstra e Bellman-Ford © Francesco Ciclosi – febbraio 2015 – Tutti i diritti riservati. www.democraziadigitale.eu I miei contatti linkedin http://it.linkedin.com/pub/francesco-ciclosi/62/680/a06/ facebook https://www.facebook.com/francesco.ciclosi twitter @francyciclosi www http://www.francescociclosi.it