Академический Документы
Профессиональный Документы
Культура Документы
Caminho Mnimo
Caminho Mnimo
cidades, qual o menor caminho entre quaisquer cidades A e B? Este problema pode ser modelado atravs de um grafo:
Cidade: vrtices; Estradas entre cidades: arestas ponderadas com peso que
indicam distncia entre cidades. Esse problema conhecido como Problema do Caminho
Mnimo.
Caminho Mnimo
Abordagem
do nmero de Erds;
Caminho Mnimo
Abordagem
do nmero de Erds;
Podemos utilizar uma idia semelhante ao Levar em considerao: O problema tem subestrutura tima.
BFS
Caminho Mnimo
t
10
s
2 5 3
9 4 7 2 6
Caminho Mnimo
10
s 0
5
9 2 3 4 7 6
Caminho Mnimo
10
s 0
5
9 2 3 4 7 6
Caminho Mnimo
10
10
s 0
5
9 2 3 4 7 6
Caminho Mnimo
8
10
14
s 0
5
9 2 3 4 7 6
Caminho Mnimo
8
10
13
s 0
5
9 2 3 4 7 6
Caminho Mnimo
8
10
s 0
5
9 2 3 4 7 6
Caminho Mnimo
8
10
s 0
5
9 2 3 4 7 6
Caminho Mnimo
v 9
u
1 2 3 4
relaxa(u, v): se v.d > u.d + p(u, v) ento v.d = u.d + p(u, v) v.p = u
5 u 5
Relaxa(u,v) v 2 7 (a)
v
2
u 5
Relaxa(u,v) v 2 6 (b)
Caminho Mnimo
1 2 3 4 5 6 7 8 9 10 11 12 13
dijkstra(G, s): para u em V(G) faa u.d = u.p = None s.d = 0 A = Heap(V(G)) \\ com base em d S=[] enquanto tamanho(A) > 1 faa u = retira_min(A) S=S+u para v em adj(u) faa relaxa(u, v) refaz_heap(A)
Caminho Mnimo
dijkstra(G, s): para u em V(G) faa u.d = u.p = None s.d = 0 A = Heap(V(G)) \\ com base em d S=[] enquanto tamanho(A) > 1 faa u = retira_min(A) S=S+u para v em adj(u) faa relaxa(u, v) refaz_heap(A)
Caminho Mnimo
dijkstra(G, s): para u em V(G) faa u.d = u.p = None s.d = 0 A = Heap(V(G)) \\ com base em d S=[] enquanto tamanho(A) > 1 faa u = retira_min(A) S=S+u para v em adj(u) faa relaxa(u, v) refaz_heap(A)
Caminho Mnimo
dijkstra(G, s): para u em V(G) faa u.d = u.p = None s.d = 0 A = Heap(V(G)) \\ com base em d S=[] enquanto tamanho(A) > 1 faa u = retira_min(A) S=S+u para v em adj(u) faa relaxa(u, v) refaz_heap(A)
Construo do heap (linha 6): O (n) retira_min (linha 9) tem complexidade (log n) e executado n vezes: O (n log n)
Caminho Mnimo
dijkstra(G, s): para u em V(G) faa u.d = u.p = None s.d = 0 A = Heap(V(G)) \\ com base em d S=[] enquanto tamanho(A) > 1 faa u = retira_min(A) S=S+u para v em adj(u) faa relaxa(u, v) refaz_heap(A)
Construo do heap (linha 6): O (n) retira_min (linha 9) tem complexidade (log n) e executado n vezes: O (n log n) refaz_heap (linha 13) tem complexidade (log n) e executado m vezes: O (m log n)
Caminho Mnimo
dijkstra(G, s): para u em V(G) faa u.d = u.p = None s.d = 0 A = Heap(V(G)) \\ com base em d S=[] enquanto tamanho(A) > 1 faa u = retira_min(A) S=S+u para v em adj(u) faa relaxa(u, v) refaz_heap(A)
Construo do heap (linha 6): O (n) retira_min (linha 9) tem complexidade (log n) e executado n vezes: O (n log n) refaz_heap (linha 13) tem complexidade (log n) e executado m vezes: O (m log n) Complexidade total: O ((n + m) log n)
Caminho Mnimo
Caminho mnimo de fonte nica; Caminho mnimo de destino nico; Caminho mnimo entre quaisquer vrtices u e v ; Caminho mnimo de todos os vrtices para todos os
vrtices:
Algoritmo de Floyd-Warshall O (n3 ).
Caminho Mnimo
Caminho Mnimo
No funciona para grafos com ciclos com pesos negativos; Alternativa: Algoritmo de Bellman-Ford de complexidade
O (n m).
Caminho Mnimo
Exerccios
2. Faa a anlise da complexidade (tempo e espao) do algoritmo de Dijkstra quando a representao do grafo por matriz de adjacncias.
Caminho Mnimo
Exerccios
2. Faa a anlise da complexidade (tempo e espao) do algoritmo de Dijkstra quando a representao do grafo por matriz de adjacncias. 3. Faa a anlise da complexidade do algoritmo de Dijkstra quando a la de prioridades uma lista (ordenada e no-ordenada).
Caminho Mnimo
Exerccios
2. Faa a anlise da complexidade (tempo e espao) do algoritmo de Dijkstra quando a representao do grafo por matriz de adjacncias. 3. Faa a anlise da complexidade do algoritmo de Dijkstra quando a la de prioridades uma lista (ordenada e no-ordenada). 4. D exemplo de um grafo com pesos negativos em que o algoritmo de Dijkstra no retorna a resposta correta.
Caminho Mnimo
Bibliograa Utilizada
CORMEN, T. H.; LEISERSON, C. E.; RIVEST, R. L. e STEIN, C. Introduction to Algorithms, 3a edio, MIT Press, 2009.