Académique Documents
Professionnel Documents
Culture Documents
Caminho Mnimo
Caminho Mnimo
Mnimo.
Caminho Mnimo
Abordagem
do nmero de Erds;
Caminho Mnimo
Abordagem
do nmero de Erds;
Podemos utilizar uma idia semelhante a do algoritmo de
Busca em Largura;
Levar em considerao:
O problema tem subestrutura tima: um caminho mnimo
Caminho Mnimo
10
9
2
3
4
Caminho Mnimo
10
s
0
9
2
3
4
Caminho Mnimo
10
s
0
9
2
3
4
Caminho Mnimo
10
10
s
0
9
2
3
4
Caminho Mnimo
14
10
s
0
9
2
3
4
Caminho Mnimo
13
10
s
0
9
2
3
4
Caminho Mnimo
10
s
0
9
2
3
4
Caminho Mnimo
10
s
0
9
2
3
4
Caminho Mnimo
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
Relaxa(u,v)
v
2
7
(a)
Relaxa(u,v)
v
2
6
(b)
Caminho Mnimo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
dijkstra(G, s):
para u em V(G) faa
u.d =
u.p = None
s.d = 0
s.p = s
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
s.p = s
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
s.p = s
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)
Caminho Mnimo
dijkstra(G, s):
para u em V(G) faa
u.d =
u.p = None
s.d = 0
s.p = s
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
s.p = s
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
s.p = s
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
Caminho Mnimo
algoritmo de Dijsktra;
Caminho Mnimo
algoritmo de Dijsktra;
Caminho mnimo de todos os vrtices para todos os
Caminho Mnimo
Caminho Mnimo
O(n m);
a
0
3
-4
6
b
0
d
0
-3
3
-6
-8
f
0
h
4
Caminho Mnimo
aresta?
-9
Caminho Mnimo
aresta?
-9
a
mais 9
13
15
11
Caminho Mnimo
aresta?
2 custo:1
custo:2 6
-9
a
mais 9
13
15
11
Caminho Mnimo
aresta?
custo:1
6
2 custo:2
-9
a
mais 9
13
custo:28
11 custo:11 15
Caminho Mnimo
Bibliografia Utilizada