![Page 1: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/1.jpg)
Il problema del cammino minimo tra 2 nodi in un grafo
non cooperativo
![Page 2: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/2.jpg)
Notazioni preliminari
G=(V,E): grafo non diretto pesato, w(e) R+ per ogni e E (tipo privato dell’agente che possiede l’arco e)
s,t V, risp. sorgente e destinazione PG(s,t): cammino minimo in G da s a t dG(s,t): distanza in G da s a t (somma
dei pesi degli archi di PG(s,t))
![Page 3: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/3.jpg)
Meccanismo VCG per il problema del cammino
minimo
M= <g(r), p(g(r))> g(r): dato il grafo G e le dichiarazioni r=(r1,…,rm),
calcola PG(s,t) pe: Per ogni arco e PG(s,t),
pe=dG-e(s,t)-dG(s,t)+w(e) (w(e): peso riportato per e)
Per ogni e PG(s,t), dobbiamo calcolare PG-e(s,t), ovvero il cammino minimo di rimpiazzo per e (cammino minimo in G-e =(V,E\{e}))
![Page 4: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/4.jpg)
Cammino di rimpiazzo per e
s
t
e
2
2
34
5 6
510
5
12
PG-e(s,t)PG(s,t)
![Page 5: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/5.jpg)
Ipotesi di lavoro
n=|V|, m=|E| I nodi s,t sono 2-edge connessi: per
ogni arco e del cammino PG(s,t) che viene rimosso esiste almeno un cammino alternativo in G-e
![Page 6: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/6.jpg)
…infatti
Se s,t non sono 2-edge connessi c’è almeno un arco in PG(s,t) che è un ponte (arco che rimosso spezza G in due componenti C1 e C2, r C1 e s C2)
Se e è un ponte dG-e(s,t) = ∞
Il possessore di quell’arco “tiene in pugno” il sistema: può chiedere qualsiasi cifra!
![Page 7: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/7.jpg)
Una soluzione banale
e PG(s,t) applichiamo l’algoritmo di Dijkstra al grafo G-e
Complessità: k=O(n) archi per O(m + n logn): O(mn + n2 logn) time
La soluzione che proponiamo costerà: O(m + n logn) time
![Page 8: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/8.jpg)
Notazioni
SG(s), SG(t): alberi dei cammini minimi radicati in s e t
Ms(e): insieme dei nodi raggiungibili da s in SG(s) senza passare per l’arco e
Ns(e)=V/Ms(e): nodi del sottoalbero di SG(s) radicato in v, dove e=(u,v)
Mt(e), Nt(e) definiti in modo analogo
![Page 9: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/9.jpg)
s
u
v
t
e
Ms(e)
Ns(e)
SG(s)
![Page 10: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/10.jpg)
Ms(e) e Ns(e) individuano un taglio in G Cs(e)={(x,y) E\{e}: x Ms(e),
yNs(e)} archi del taglio: crossing edges
![Page 11: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/11.jpg)
Crossing edges
s
u
v
t
e
Ms(e)
Ns(e)
SG(s)
Cs(e)
![Page 12: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/12.jpg)
Come è fatto PG-e(s,t)?
Ovvio: non usa e PG-e(s,t) deve attraversare il taglio È il cammino più corto fra quelli che
non usano e La sua lunghezza è:
dG-e(s,t)= min {dG-e(s,x)+w(f)+dG-e(y,t)}f=(x,y) Cs(e)
![Page 13: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/13.jpg)
Cammino di rimpiazzos
u
v
t
ex
y
dG-e(s,t)= min {dG-e(s,x)+w(f)+dG-e(y,t)}f=(x,y) Cs(e)
![Page 14: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/14.jpg)
Sia f=(x,y) Cs(e); dimostreremo che:
dG-e(s,x)+w(f)+dG-e(y,t)=dG(s,x)+w(f)+dG(y,t)
Osservazione: dG-e(s,x)=dG(s,x), perché x Ms(e)Lemma:Sia f=(x,y) Cs(e) un arco del taglio (x Ms(e)).
Allora y Mt(e).
(da cui segue che: dG-e(y,t)=dG(y,t))
![Page 15: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/15.jpg)
Un semplice lemma
Dim(per assurdo)y Mt(e), allora y Nt(e). Quindi y
discendente di u in SG(t) e PG(t,y) usa e. PG(v,y) è sottocammino di PG(t,y). Quindi:
dG (v,y)=w(e) + dG (u,y) > dG (u,y).
y Ns(e), allora PG(s,y) usa e. PG(u,y) è sottocammino di PG(s,y). Quindi:
dG (u,y)=w(e) + dG (v,y) > dG (v,y).
![Page 16: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/16.jpg)
s
t
Ns(e) Mt(e)
Ms(e)
![Page 17: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/17.jpg)
Corollario
Dati SG(s) e SG(t),
k(f):= dG-e(s,x) + w(f) + dG-e(y,t) disp. in O(1) time
dG(s,x) guardo in SG(s)
Osservazione: k(f) è la lunghezza del cammino minimofra s e t che usa f
dG(y,t) guardo in SG(t)
![Page 18: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/18.jpg)
Un altro semplice algoritmo
Passo 1: Calcoliamo SG(s) e SG(t)Passo 2:e PG(s,t) guardiamo gli archi del taglio Cs(e) e
prendiamo il minimo (rispetto al valore k(٠)).Complessità
Passo 1: O(m + n logn)Passo 2: k=O(n) archi, O(m) archi in ogni taglio:
O(mn)Migliore di O(mn + n2 logn) se m=o(n logn)
![Page 19: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/19.jpg)
L’algoritmo di Malik, Mittal e Gupta
Siano e1, e2,…,ek gli archi di PG(s,t) da s verso t Al passo i manteniamo in un heap H l’insieme
dei nodi Ns(ei) (convenzione: Ns(e0)=V) Chiamiamo i nodi in H nodi attivi Ad ogni nodo yH è associata una chiave k(y)
e un particolare crossing edge. k(y)= min {dG(s,x)+w(x,y)+dG(y,t)}
k(y): lunghezza del cammino minimo da s a t passante per y
x Ms(ei)
![Page 20: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/20.jpg)
L’algoritmo di Malik , Mittal e Gupta
Inizializzazione: H =V, k(y)= per ogni y Passo i : consideriamo l’arco ei e
processiamo H nel seguente modo: Elimino da H tutti i nodi in Ws(ei)=Ns(ei-1)\Ns(ei) Considero ogni x Ws(ei), quando trovo che un
vicino y a x è attivo, calcolo k’(y)=dG(s,x)+w(x,y)+dG(y,t)
Se k’(y)<k(y) decremento k(y) a k’(y) Processati tutti gli x Ws(ei), estraggo il
minimo da H, che fornisce la lunghezza del cammino minimo di rimpiazzo per ei (dG-ei(s,t))
![Page 21: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/21.jpg)
Un esempio
Ns(e1)
e1
e2
e3
e5
e4
s
t
Ws(e1
)
![Page 22: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/22.jpg)
Un esempio
Ns(e2)
e1
e2
e3
e5
e4
s
t
Ws(e2
)
![Page 23: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/23.jpg)
TeoremaDati due nodi s,t in un grafo G con n
vertici e m archi, tutti i cammini di rimpiazzo possono essere calcolati in tempo O(m + n logn).
![Page 24: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/24.jpg)
Dim: Calcoliamo SG(s) e SG(t) in tempo O(m + n logn). Usiamo l’heap di Fibonacci. Complessità ammortizzata delle operazioni di delete e delete_min è O(logn), e O(1) per le operazioni di insert, find_min, decrease_key,make_heap.
Singola operazione make_heapO(n) insertO(n) find_minO(n) deleteO(m) decrease_key
O(m + n logn)
![Page 25: Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo](https://reader036.vdocuments.mx/reader036/viewer/2022062512/5542eb4a497959361e8b67f4/html5/thumbnails/25.jpg)
CorollarioIl meccanismo VCG per il problema del
cammino minimo può essere calcolato in tempo O(m + n logn)
DimComplessità di g(٠): O(m + n logn)Complessità di p(٠): calcolo tutte le
distanze dG-e(s,t), in tempo O(m + n logn)