Cammini minimi con una sorgente - PowerPoint PPT Presentation

1 / 15
About This Presentation
Title:

Cammini minimi con una sorgente

Description:

Title: Visita su un grafo Author: Marco Last modified by: gio Created Date: 5/28/2006 8:55:19 AM Document presentation format: Presentazione su schermo – PowerPoint PPT presentation

Number of Views:31
Avg rating:3.0/5.0
Slides: 16
Provided by: Marco315
Category:
Tags: cammini | con | minimi | sorgente | una

less

Transcript and Presenter's Notes

Title: Cammini minimi con una sorgente


1
Cammini minimi con una sorgente
  • Problema dei cammini minimi
  • Varianti e archi negativi
  • Sottostruttura ottima di un cammino minimo
  • Algoritmo di Dijkstra
  • Complessità dellalgoritmo
  • Rappresentazione dei cammini minimi

2
Problema dei cammini minimi
Input un grafo G(V,E) orientato e pesato, con
una funzione peso w E ? R, che associa ad ogni
arco in E un peso a valore nei reali.
1
9
1
8
2
1
2
1
1
1
1
3
1
3
3
3
6
6
1
6
1
4
4
1
4
5
-3
5
1
-1
3
Problema dei cammini minimi
Il peso di un cammino p ltv1, v2, ,vkgt è la
somma dei pesi degli archi che lo costituiscono.
p1 ltPO, FI, SIgt 15 min 50 min 65 min p2
ltPO, FI, AR, SIgt 15 min 35 min 40 min
90 min p3 ltPO, FI, PI, LI, GR, SIgt 160 min
50
MC
PT
20
35
LU
20
25
PO
20
15
PI
60
FI
35
LI
50
AR
65
SI
40
70
GR
4
Problema dei cammini minimi
Il peso di un cammino minimo dal vertice u al
vertice v è definito da
Un cammino minimo dal vertice u al vertice v è
definito come un qualunque cammino p con peso
w(p) d(u,v). Può non essere unico!
d(6,1) 7 p1 lt6, 2, 3, 1 gt w(p1) 7 p2
lt6, 1gt w(p2) 9 p3 lt6, 5, 6, 2, 3, 1 gt
w(p3) 9 p4 lt6, 5, 4, 3, 1 gt w(p4) 7
9
8
2
1
1
3
3
3
6
3
3
4
-2
5
-1
5
Vari problemi
  • Problema di cammini minimi con sorgente singola
    si vuole trovare un cammino minimo da un dato
    vertice sorgente s ad ogni vertice v in V.
  • Problema di cammini minimi con destinazione
    singola si vuole trovare da ogni vertice v in V
    un cammino minimo ad un dato vertice destinazione
    t.
  • Problema di cammini minimi tra una coppia si
    vuole trovare un cammino minimo da u a v.
  • Problema di cammini minimi tra tutte le coppie
    determinazione di un cammino minimo per ogni
    coppia di vertici u e v.

6
Archi con pesi negativi
Un possibile problema può essere rappresentato
dalla presenza di pesi negativi sugli archi e di
cicli che contengano archi con pesi negativi.
Se il peso di un ciclo è negativo, allora tutti
i nodi raggiungibile dal ciclo hanno un cammino
minimo infinitamente negativo (-8).
Ciclo lt6,5gt negativo. Ogni volta che compio un
giro diminuisco il peso del cammino che passa per
il ciclo. d(6,1) -8
9
8
2
1
1
3
3
3
3
6
3
4
-2
5
-7
7
Sottostruttura ottima di un cammino minimo
Sottocammini di cammini minimi sono cammini
minimi Dato un grafo G(V,E) con funzione peso
wE? R, sia p ltv1, v2, ,vkgt un cammino
minimo da v1 a vk. Per ogni i e j tali che 1 i
j k, ha che il sottocammino pij ltvi,
vi1, ,vjgt è un cammino minimo.
w(pij)d(i,j)
1
i
j
k
pij
Dato un altro sottocammino da i a j pij,
necessariamente w(pij ) w(pij), altrimenti il
cammino minimo passa per pij.
8
Sottostruttura ottima di un cammino minimo
Di conseguenza Si supponga che un cammino minimo
p da una sorgente ad un vertice v passi per
larco (u,v) con peso w(u,v). Il peso del cammino
minino da s a v è d(s,v) d(s,u) w(u,v).
d(s,u)
cammino minimo tra u e v d(s,v) d(s,u)
w(u,v).
w(u,v)
i
u
v
Più in generale, se esiste un arco (u,v), allora
si ha d(s,v) d(s,u) w(u,v).
9
Algoritmo di Dijkstra
  • Lalgoritmo di Dijkstra risolve il problema dei
    cammini minimi con sorgente singola su un grafo
    orientato e pesato G(V,E) nel caso in cui tutti
    i pesi degli archi siano non negativi.
  • Ci sono due insiemi
  • S dove dv d(s,v), quindi un cammino minimo
    tra s e v è stato determinato.
  • Q V-S una coda a priorità dove dv ha il
    valore del cammino con peso minore finora
    scoperto.
  • Allinizio, S contiene solo s, ds0, mentre
    QV-s con dv8.

10
Algoritmo di Dijkstra
  • DIJKSTRA(G,w,s)
  • for ogni vertice u in VG // inizializzazione
    di ogni vertice
  • do du ? 8
  • pu ? NIL
  • ds ? 0 // si comincia dal vertice s
  • Q ? VG // coda a priorità
  • S ? Ø // insiemi dei cammini minimi trovati
  • while Q?Ø // termina quando la coda Q è vuota
  • do u ? EXTRACT-MIN(Q) // prendi il cammino in Q
    più piccolo
  • S ? S U u // inserisci u in S
  • for ogni vertice v in Adju //
    aggiorna cammini minimi in Q con v adiacente
    a u
  • do if dv gt du w(u,v)
  • then dv ? du wu,w
  • pv ? u

11
Esempio
v
u
10
v
u
10
v
u
10
1
1
1
8
14
8
8
10
8
3
3
3
s
s
s
9
9
9
2
2
2
0
4
6
0
4
6
0
4
6
7
7
7
8
8
5
8
5
7
5
2
5
2
5
2
y
x
y
x
y
x
(a)
(b)
(c)
u
10
u
10
u
10
v
v
v
1
1
1
8
13
8
9
8
9
3
3
3
s
s
s
9
9
9
2
2
2
0
4
6
0
4
6
0
4
6
7
7
7
5
7
5
7
5
7
5
2
5
2
5
2
y
x
y
x
y
x
(d)
(e)
(f)
12
Correttezza algoritmo
Se si esegue un lalgoritmo di Dijkstra su un
grafo orientato e pesato G(V,E) nel caso in cui
tutti i pesi degli archi siano non negativi,
allora al termine vale dv d(s,v) per ogni v
in V. Dimostrazione Supponiamo per assurdo che
u sia il primo vertice ad entrare in S tale che
du ? d(s,u). Prendiamo un cammino minimo da s a
u, che può essere decomposto in s?x?y?u, con x in
S, y in Q e (x,y) arco di G.
Può essere s x o y u
S
s
x
y
p1
u
p2
13
Correttezza algoritmo
dx d(s,x) x è entrato prima di u in S.
S
s
x
y
p1
u
p2
Si ha anche dy d(s,y) d(s,x) w(x,y),
perché sottocamino di un cammino minimo. Inoltre
dy d(s,y) d(s,u) du. Nellalgoritmo u
viene scelto prima di y (EXTRACT-MIN(Q)), quindi
deve valere luguaglianza dy d(s,y)
d(s,u) du. ASSURDO! d(s,u) ? du.
14
Complessità
  • Si consideri che la coda con priorità Q come un
    array lineare
  • Inizzializzazione tempo O(V)
  • EXTRACT-MIN(Q) ricerca del minimo in Q. Bisogna
    vedere tutti i valori in Q, richiede tempo O(V)
  • EXTRACT-MIN(Q) viene eseguito per ogni vertice
    quindi il tempo totale è O(VxV) O(V2)
  • Come in BFS vengono, si esamina la lista di
    adiacenza di ogni vertice v, che entra solo una
    volta in S.
  • La somma di tutte liste di adiacenze è E.
  • Il tempo totale dellalgoritmo di Dijkstra è
    O(VEV2).

15
Rappresentazione dei cammini minimi
Come nella visita in ampiezza (BFS), lalgoritmo
Dijkstra definisce un sottografo dei predecessori
Tp(Vp,Ep). Lalbero che ne segue contiene i
cammini minimi individuati da s ad ogni vertice
raggiungibile v. Nota questo vale solo al
termine dellalgoritmo.
v
u
10
v
u
1
1
8
9
8
9
3
3
s
s
9
Tp(Vp,Ep)
2
0
4
6
0
7
5
7
5
7
5
2
5
2
y
x
y
x
Write a Comment
User Comments (0)
About PowerShow.com