A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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.

Apresentações semelhantes


Apresentação em tema: "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."— Transcrição da apresentação:

1 Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne O Problema do Passeio mais Curto s 3 t

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

3 3 Redes comunicação Rede computadores, satélites VérticesArcos Cabos,fibras óticas Fluxo Voz,video, pacotes circuitos Processadores, Portas lógicas Fioscorrente Hidraulicareservatórios, lagosdutosfluido, óleo FinançasAções, moedastransaçõesdinheiro

4 4 O Problema do Passeio Mais Curto Rede : (V, E, s, t, c). n Grafo Direcionado (V, E). n Fonte s V, destino t V. n Custo dos arcos c(v, w). n Custo do caminho = soma dos arcos do caminho Custo do caminho s t = = 48. s 3 t

5 5 Passeio Mais Curto Problema do passeio mais Curto (CLR ) n Rede (V, E, s, t, c). n Encontrar o passeio mais curto de s a t. Hipóteses: n Existe caminho de s aos demais nós do grafo n A Rede não contém ciclo com custo negativo

6 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. sv C c(C) < 0

7 7 Propriedades importantes Todos os subcaminhos de um caminho mais curto são mais curtos. n P 1 : subcaminho entre x e y do caminho mais curto P entre s e v. n P 2 : subcaminho qualquer entre x e y n c(P 1 ) c(P 2 ), caso contrário P não é o caminho mais curto entre s e v Desigualdade Triangular n (v, w): comprimento do caminho mais curto de v a w. n Então, (v, w) (v, x) + (x, w) vw x sv P2P2 P1P1 y x

8 8 Relaxação Técnica chave para algoritmos de caminhos mais curtos relaxation n 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 ; } Relax

9 9 Algoritmo de Bellman-FordBellmanFord() for each v V for each v V [v] = ; d [v] = ; [s] = 0; d [s] = 0; for i=1 to |V|-1 for i=1 to |V|-1 for each edge (u,v) E for each edge (u,v) E Relax(u,v, c(u,v)); Relax(u,v, c(u,v)); for each edge (u,v) E for each edge (u,v) E if ([v] > [u] + c(u,v)) if ( d [v] > d [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 de Ciclos negativos

10 10 Algoritmo de Bellman-FordBellmanFord() for each v V for each v V [v] = ; d [v] = ; [s] = 0; d [s] = 0; for i=1 to |V|-1 for i=1 to |V|-1 for each edge (u,v) E for each edge (u,v) E Relax(u,v, c(u,v)); Relax(u,v, c(u,v)); for each edge (u,v) E for each edge (u,v) E if ([v] > [u] + c(u,v)) if ( d [v] > d [u] + c(u,v)) return no solution; return no solution; Relax(u,v,w): if ([v] > [u]+w) then [v]= [u Relax(u,v,w): if ( d [v] > d [u]+w) then d [v]= d [u]+w B E DC A Ex: quadro s

11 11 Bellman-Ford: Correção Lemma: d [v] (s,v) ao longo da execução n Verdade no início (base da indução) n Verdade após k relaxações (hipótese indutiva) n 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)

12 12 Bellman-Ford: Correção Teorema: após |V|-1 iterações, o vetor d esta correto n Considere o caminho mais curto de s a v: s = v 1 v 2 v 3 … v l = v n Inicialmente d[v 1 ] = 0 esta correto (base ) n Após k-1 iterações d[v k ] estão corretos (hipótese) n Considere a iteração k (k < l ) – Quando a aresta v k v k+1 é relaxada : d[v k+1 ]<=d[v k ]+c(v k,v k+1 ) d[v k ]+c(v k,v k+1 ) = (s, v k )+c(v k,v k+1 ) (hipótese) (s, v k )+c(v k,v k+1 ) = (s, v k+1 ) ( mais curto)

13 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)

14 14 Algoritmo de Dijkstra Pesos Não Negativos

15 15 Algoritmo de Diksjtra Ao término n d(v) = custo do caminho mais curto entre s e v. n pred(v): predecessor no caminho mais curto for each v V d(v) pred(v) nil d(s) 0 S (utilizado na correção) Q V for 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

16 16 Algoritmo de Dijkstra a b c fg e d PQueue Enqueue Vo 1 0 d 1 1a 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 b c 1 No improvement to v1 so skip 8 c f 8 Update dv and pv to reflect improvement g 1 f 6 g6 1 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

17 17 Algoritmo de Dijkstra: Correção Invariant. For each vertex v S, d(v) = (s, v). n Indução em |S|. n Caso Base: Para |S| = 0 é trivial. n 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*

18 18 Dijkstra 1 make-heap n insert n delete-min m 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 N 1 Binomial log N 1 Fibonacci * 1 1 log N Relaxed 1 1 log N Linked List 1 N N 1 1 N n (n) + m(1) = O(n 2 ) n (log n) + m(log n) = O(m log n) n (log n) + m(1) = O(m + n log n) is-empty11111 Heaps

19 19 Shortest Path Extensions Variants of shortest path: n Undirected graph. – O(m + n) using Thorup's algorithm n Unit weights. – O(m + n) using breadth first search n Integer weights between 0 and constant C. n DAGs. – O(m + n) using topological sort n All-pairs. – O(n 3 ) using Floyd-Warshall

20 20 DAG Shortest Paths Problem: finding shortest paths in DAG n Bellman-Ford takes O(VE) time. n How can we do better? n 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?

21 Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne Shortest Path: Extra Slides

22 22 Shortest Path: Proving Optimality How can we verify that a given solution is really optimal? s 3 t

23 23 Shortest Path: Proving Optimality How can we verify that a given solution is really optimal? n Easy if all weights nonnegative, and there exists a zero cost path. s 3 t


Carregar ppt "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."

Apresentações semelhantes


Anúncios Google