princeton university cos 423 theory of algorithms spring 2002 kevin wayne o problema do passeio mais...

23
Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16 11 6 19 6

Upload: internet

Post on 17-Apr-2015

105 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

Princeton University • COS 423 • Theory of Algorithms • Spring 2002 • Kevin Wayne

O Problema do Passeio mais Curto

s

3

t

2

6

7

45

23

18

2

9

14

15 5

30

20

44

16

11

6

19

6

Page 2: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

2

1

3

8

2

6

7

45

Grafo Direcionado

Directed graph: G = (V, E) . V = conjunto de vértices E V V = conjunto de arcos n = |V|, m = |E|. Caminho: s - 2 - 3 - 5 - t. ciclo: 5 - 4 - 3 - 5.

Page 3: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

3

Redes

comunicação

Rede

computadores, satélites

Vértices Arcos

Cabos,fibras óticas

Fluxo

Voz,video, pacotes

circuitosProcessadores, Portas lógicas

Fios corrente

Hidraulica reservatórios, lagos dutos fluido, óleo

Finanças Ações, moedas transações dinheiro

Page 4: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

4

O Problema do Passeio Mais Curto

Rede : (V, E, s, t, c) . Grafo Direcionado (V, E). Fonte s V, destino t V. Custo dos arcos c(v, w). Custo do caminho = soma dos

arcos do caminho

Custo do caminho s - 2 - 3 - 5 - t = 9 + 23 + 2 + 16 = 48.

s

3

t

2

6

7

45

23

18

2

9

14

15 5

30

20

44

16

11

6

19

6

Page 5: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

5

Passeio Mais Curto

Problema do passeio mais Curto (CLR 25.1-25.2) Rede (V, E, s, t, c). Encontrar o passeio mais curto de s a t.

Hipóteses: Existe caminho de s aos demais nós do grafo A Rede não contém ciclo com custo negativo

3

45

-6

7

-4

Page 6: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

6

Caminho Mais Curto: Existencia

Existência. Se algum passeio de s a t contem um ciclo negativo, então não existe passeio mais curto entre s e v. Caso contrário, o passeio mais curto existe e é um caminho.

Se o ciclo negativo existe, é possível gerar passeios arbitrariamente negativos percorrendo o ciclo quantas vezes for necessário.

Se não existe ciclos negativos, podemos remover os ciclos sem aumentar o custo.

s vC

c(C) < 0

Page 7: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

7

Propriedades importantes

Todos os subcaminhos de um caminho mais curto são mais curtos. P1 : subcaminho entre x e y do caminho mais curto P entre s e v.

P2 : subcaminho qualquer entre x e y

c(P1) c(P2), caso contrário P

não é o caminho mais curto entre s e v

Desigualdade Triangular (v, w): comprimento do caminho mais curto de v a w. Então, (v, w) (v, x) + (x, w)

v w

x

s v

P2

P1y

x

Page 8: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

8

Relaxação

Técnica chave para algoritmos de caminhos mais curtos relaxation

Ideia: para todo v, manter d[v], cota superior para (s,v)

Relax(u,v,w) {

if (d[v] > d[u]+w) then

d[v]= d[u]+w

pred[v]<- u ;

}

952

752

Relax

652

652

Relax

Page 9: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

9

Algoritmo de Bellman-Ford

BellmanFord()BellmanFord()

for each v for each v V V d[v] = [v] = ;; d[s] = 0;[s] = 0;

for i=1 to |V|-1for i=1 to |V|-1

for each edge (u,v) for each edge (u,v) E E Relax(u,v, c(u,v));Relax(u,v, c(u,v));

for each edge (u,v) for each edge (u,v) E E if (if (d[v] > [v] > d[u] + c(u,v))[u] + c(u,v))

return “no solution”;return “no solution”;

Inicializar d[]

Relaxation: execute|V|-1 iterações, relaxando cada arco

Verifica a existência deCiclos negativos

Page 10: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

10

Algoritmo de Bellman-Ford

BellmanFord()BellmanFord()

for each v for each v V V d[v] = [v] = ;; d[s] = 0;[s] = 0;

for i=1 to |V|-1for i=1 to |V|-1

for each edge (u,v) for each edge (u,v) E E Relax(u,v, c(u,v));Relax(u,v, c(u,v));

for each edge (u,v) for each edge (u,v) E E if (if (d[v] > [v] > d[u] + c(u,v))[u] + c(u,v))

return “no solution”;return “no solution”;

Relax(u,v,w): if (Relax(u,v,w): if (d[v] > [v] > d[u]+w) then [u]+w) then d[v]= [v]= d[u[u]+w

B

E

DC

A

-1 2

2

1-3

5

3

4

Ex: quadro

s

Page 11: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

11

Bellman-Ford: Correção

Lemma: d[v] (s,v) ao longo da execução

Verdade no início (base da indução) Verdade após k relaxações (hipótese indutiva) Considere a relaxação (k+1) onde a aresta (u,v) é relaxada

– Caso 1) d[v] não é modificado. Como d[v] (s,v) antes da relaxação então d[v] (s,v) após

– Caso 2) d[v] é modificado. Logo, d[v]=d[u]+c(u,v) após a relaxação. Entretanto,

d[u]+c(u,v) (s,u) +c(u,v) (hipótese em u)

(s,u) +c(u,v) (s,v) (desigualdade triangular)

Page 12: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

12

Bellman-Ford: Correção

Teorema: após |V|-1 iterações, o vetor d esta correto Considere o caminho mais curto de s a v:

s = v1 v2 v3 … vl = v

Inicialmente d[v1] = 0 esta correto (base )

Após k-1 iterações d[vk] estão corretos (hipótese)

Considere a iteração k (k < l )

– Quando a aresta vkvk+1 é relaxada :

d[vk+1]<=d[vk]+c(vk,vk+1 )

d[vk]+c(vk,vk+1 ) = (s, vk)+c(vk,vk+1 ) (hipótese)

(s, vk)+c(vk,vk+1 ) = (s, vk+1) ( mais curto)

Page 13: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

13

Ciclos Negativos

Teorema: Se G tem um ciclo negativo o algoritmo retorna ‘no solution’

Prova:

Seja C=(v0,v1,...,vk) um ciclo negativo

c(v0,v1)+c(v1,v2)+ ... +c(vk,v0) < 0

Assuma que o agoritmo NÃO retorna ‘no solution’. Logo,

d[v1] <= d[v0]+ c(v0,v1)

d[v2] <= d[v1]+ c(v1,v2) .

.

.

d[v0] <= d[vk]+ c(vk,v0)

Somando as equações acima obtemos

c(v0,v1)+c(v1,v2)+ ... +c(vk,v0)>= 0 (Contradição)

Page 14: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

14

Algoritmo de Dijkstra

Pesos Não Negativos

Page 15: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

15

Algoritmo de DiksjtraAo término

d(v) = custo do caminho mais curto entre s e v. pred(v): predecessor no caminho mais curto

for each v V d(v) pred(v) nild(s) 0S (utilizado na correção)Q Vfor each v V insert(v, Q) while (Q ) v vértice com menor d[] em Q Q Q - {v} S S {v} (utilizado na correção) for each u Adj[v] relax(v,u)

Algoritmo de Dijkstra

Page 16: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

16

Algoritmo de Dijkstra

a b

c

f g

ed

4

4

1

1

2 2

2

3

65

10

8

PQueue

Enqueue Vo

1

0

d

1

1 a

b

2

2 a

a

1

1

c

3

3 d

g

5

d5

f

9

d9

b

1

No improvement to v4 so skip

e

12

b12

c

1

No improvement to v1 so skip

8 c

f

8

Update dv and pv to reflect

improvement

g

1

f

6

Update dv and pv to reflect

improvement

g61

f ‘

V6 is already known so ignore

1

No improvement to v4 so skip

No improvement to v7 so skip

Queue is now empty so stop

Page 17: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

17

Algoritmo de Dijkstra: Correção

Invariant. For each vertex v S, d(v) = (s, v). Indução em |S|. Caso Base: Para |S| = 0 é trivial.

Passo indutivo:– Assuma que o algoritmo adicione o vértice v a S– se d(v)<> (s, v) então seja P* o caminho mais curto entre s e v– P* utiliza arco (x, y) que deixa S– Então d(v) >(s, v) hipótese

= (s, x) + c(x, y) + (y, v) subcaminhos curtos (s, x) + c(x, y) custos não-negativos

= d(x) +c(x, y) indução d(y) algoritmo

então Dijkstra teria selecionado y em vez de v

S

s

y

v

x

P*

Page 18: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

18

Dijkstra 1 make-heapn insertn delete-minm decrease-key

Priority Queues and Heaps (CLR 20, 21)

make-heap

Operation

insert

find-min

delete-min

union

decrease-key

delete

1

Binary

log N

1

log N

N

log N

log N

1

Binomial

log N

log N

log N

log N

log N

log N

1

Fibonacci *

1

1

log N

1

1

log N

1

Relaxed

1

1

log N

1

1

log N

1

Linked List

1

N

N

1

1

N

n (n) + m(1) = O(n2)

n (log n) + m(log n) = O(m log n)

n (log n) + m(1) =O(m + n log n)

is-empty 1 1 1 11

Heaps

Page 19: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

19

Shortest Path Extensions

Variants of shortest path: Undirected graph.

– O(m + n) using Thorup's algorithm Unit weights.

– O(m + n) using breadth first search Integer weights between 0 and constant C. DAGs.

– O(m + n) using topological sort All-pairs.

– O(n3) using Floyd-Warshall

Page 20: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

20

DAG Shortest Paths

Problem: finding shortest paths in DAG Bellman-Ford takes O(VE) time. How can we do better? Idea: use topological sort

– If were lucky and processes vertices on each shortest path from left to right, would be done in one pass

– Every path in a dag is subsequence of topologically sorted vertex order, so processing verts in that order, we will do each path in forward order (will never relax edges out of vert before doing all edges into vert).

– Thus: just one pass. What will be the running time?

Page 21: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

Princeton University • COS 423 • Theory of Algorithms • Spring 2002 • Kevin Wayne

Shortest Path: Extra Slides

Page 22: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

22

Shortest Path: Proving Optimality

How can we verify that a given solution is really optimal?

s

3

t

2

6

7

4

5

23

18

2

9

14

15 5

30

20

44

16

11

6

19

6

9 32

14

15

34

50

45

0

Page 23: Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t 2 6 7 4 5 23 18 2 9 14 15 5 30 20 44 16

23

Shortest Path: Proving Optimality

How can we verify that a given solution is really optimal? Easy if all weights nonnegative, and there exists a zero cost path.

s

3

t

2

6

7

4

5

0

0

0

0

0

0 4

10

1

1

0

0

19

1

1