Escolar Documentos
Profissional Documentos
Cultura Documentos
GRAFOS
2. Representação
3. Relaxamento
4. Algoritmo de Dijkstra
5. Algoritmo de Bellman-Ford
6. Algoritmo de Floyd-Warshall
Introdução
Cenário
Solução possível
Definição
O peso w(c) de um caminho c = (v0, v1, ..., vk) é a soma dos pesos das
arestas que o formam, ou seja,
k-1
w(c) = w(vi , vi+1)
i=0
Introdução
Definição
Definição
−10
1
4 1 1 2 3
Objetivo
Variantes
d[v] ≥ δ(s, v)
Initialize-Single-Source (G, s)
1) for each v ∈ V[G]
2) do d[v] = ∞
3) π[v] = nil
4) d[s] = 0
Relax (u, v, w)
1) if d[v] > d[u] + w(u, v)
2) then d[v] = d[u] + w(u, v)
3) π[v] = u
u v u v
2 2
5 9 5 6
Relax(u, v) Relax(u, v)
5 7 5 6
Algoritmo de Dijkstra
Princípios
Princípios (cont.)
Dijkstra (G, w, s)
1) Initialize-Single-Source(G, s)
2) S = Ø
3) Q = V[G] // cria fila de prioridade Q com os vértices do grafo
4) while (Q ≠ Ø)
5) do u = extract-min(Q)
6) S = S U {u}
7) for each (u, v) ∈ Adj[u]
8) do Relax (u, v, w)
Análise do algoritmo de Dijkstra
O(v2 + e) = O(v2).
Análise do algoritmo de Dijkstra
Bellman-Ford(G, w, s)
1) Initialize-Single-Source(G, s)
2) for i = 1 to |V[G]| − 1
3) do for each (u, v) ∈ E[G]
4) do Relax(u, v, w)
5) for each (u, v) ∈ E[G]
6) do if d[v] > d[u] + w(u, v)
7) then return TRUE
8) return FALSE
Exemplo de execução do Bellman-Ford
5
t
x
6 −2
−4
8 −3
s 2 7
7
z
y 9
Bellman-Ford: inicialização
Bellman-Ford: iteração 1
t x
5
6 ∞
6 -2
s -3
8
0 2 7
-4
7
7 9 ∞
y z
Bellman-Ford: iteração 1
t x
5
6 11
6 -2
s -3
8
0 2 7
7 -4
7 9
2
y z
Bellman-Ford: iteração 1
t x
5
6 4
6 -2
s -3
8
0 2 7
7 -4
7 9
2
y z
Bellman-Ford: iteração 1
t x
5
2 4
6 -2
s -3
8
0 2 7
7 -4
7 9
2
y z
Bellman-Ford: iteração 1
t x
5
2 4
6 -2
s -3
8
0 2 7
7 -4
7 9
2
y z
Bellman-Ford: iteração 2
t x
5
2 4
6 -2
s -3
8
0 2 7
7 -4
7 9
-2
y z
Bellman-Ford: iteração 3
t x
5
2 4
6 -2
s -3
8
0 2 7
7 -4
7 9
-2
y z
Bellman-Ford: iteração 4
t x
5
2 4
6 -2
s -3
8
0 2 7
7 -4
7 9
-2
y z
Bellman-Ford: iteração 5
t x
5
2 4
6 -2
s -3
8
0 2 7
7 -4
7 9
-2
y z
Análise do algoritmo de Bellman-Ford
π[3] = 1
Algoritmo de Floyd-Warshall
Algoritmo de Floyd-Warshall
Algoritmo de Floyd-Warshall
Algoritmo de Floyd-Warshall
Algoritmo de Floyd-Warshall
π[1] = 2
Algoritmo de Floyd-Warshall
Algoritmo de Floyd-Warshall
π[2] = 3
Algoritmo de Floyd-Warshall
π [1] = 2
π [2] = 3
π [3] = 1
Algoritmo de Floyd-Warshall
π[w] := k ;
Análise do algoritmo de Floyd-Warshall