Si tratta di uno dei problemi di ottimizzazione su grafi più importante e più studiato.
Richiami di Definizioni
insieme finito di nodi;
tale che per ogni ;
La coppia è un grafo orientato:
è l’insieme dei nodi di G,
è l’insieme degli archi di G.
Sia una funzione peso o costo si dice grafo pesato.
Matrice di Adiacenza
Dato con la matrice di adiacenza associata a G è la matrice A di dimensioni tale che:
Liste di Adiacenza
Dato le liste di adiacenza associate a G sono gli insiemi .
Cammini
Sia un grafo con funzione peso
Siano . un Cammino da a è una sequenza di nodi contigui di G, cioè tale che:
Si usa anche la notazione
Poniamo:
Peso del cammimo ;
Poniamo inoltre:
PATHS(G) = Insieme di tutti i cammini in G;
PATHS(G; u) = insieme di tutti i cammini in G che iniziano da u;
PATHS(G; u, v) = insieme di tutti i cammini in G che iniziano da u e terminano in v;
Concatenazione di Cammini
Siano e due cammini tali che .
Scriviamo per indicare la concatenazione tra i due cammini.
Ovviamente il peso del cammino concatenato è la somma dei pesi dei due cammini.
Distanza
Poniamo
con
Cammini Minimi
Un cammino è minimo se
Un Grafo ammette cammini minimi se:
Lemma
Un grafo ammette cammini minimi se e solo se ammette cammini minimi da ciascuno dei suoi nodi
Lemma: Condizione necessaria e sufficiente per cammini minimi
Non vi deve essere alcun ciclo di peso negativo raggiungibile da una sorgente s
Dimostrazione: Necessità
Se da s è possibile raggiungere un ciclo di peso negativo da , allora:
Ma:
Quindi G non ammette cammini minimi da s.
Dimostrazione: Sufficienza
Supponiamo che da s non sia raggiungibile alcun ciclo di peso negativo.
Per ogni poniamo:
è facile verificare che:
E quindi l’estremo inferiore del peso tra SIMPLE_PATHS e PATHS è uguale. Poiché SIMPLE_PATHS è finito, siamo sicuri che non sarà mai uguale a , da cui:
Data l’arbitrarietà di , concludiamo che G ammette cammini minimi da s.
Corollario 1
Condizione necessaria e sufficiente perché un grafo pesato (G,w) ammetta cammini minimi è che non contenga alcun ciclo di peso negativo.
Corollario 2
Ogni grafo con funzione peso non negativa ammette sempre cammini minimi.
Corollario 3
Ogni grafo aciclico ammette sempre cammini minimi
Sottostruttura Ottima
Sia un cammino minimo in (G,w).
Allora il sottocammino per ogni è minimo.
Cammini minimi da una singola sorgente
Sia (G,w) un grafo pesato, con sorgente assegnata, e supponiamo che (G,w) ammetta cammini minimi da .
Vogliamo memorizzare in maniera spazialmente efficiente un cammino minimo da s.
La soluzione ingenua consiste nel memorizzare O(n) liste di lunghezza O(n) ciascuna
Grafo dei Cammini Minimi
Sia MIN_PATHS(G;s) l’insieme di tutti i cammini minimi da s in G;
Sia l’insieme di tutti gli archi contenuti in qualche cammino minimo da s
Chiamiamo il grafo grafo dei cammini minimi da s in G
Esempio
Proprietà:
MIN_PATHS(G;s) PATHS() = MIN_PATHS(G;s)
Dimostrazione
wip
Albero di Cammini Minimi
Sia (G,w) un grafo pesato, con sorgente assegnata, e supponiamo che (G,w) ammetta cammini minimi da .
Allora esiste un albero , con e radicato in s e contenente esattamente un cammino minimo in G da s per ciascun nodo raggiungibile da s in G.
Dimostrazione
Basta effettura una visita, DFS o BFS, da nel grafo dei cammini minimi .
Complessità Spaziale:
Esempio
Alberi di Cammini Minimi in Grafi non orientati e MST
Dato un grafo non orientato con funzione peso e sorgente , non è necessariamente vero che tra i suoi alberi di cammini minimi da s ci debba essere un MST di (G,w).