Вы находитесь на странице: 1из 31

Caminho Mnimo

Caminho Mnimo de Fonte nica em


Grafos sem Pesos Negativos
Letcia Rodrigues Bueno
UFABC

Caminho Mnimo

Problema 2: Menor caminho entre duas cidades

Dado um mapa de cidades, contendo as distncias entre

cidades, qual o menor caminho entre quaisquer cidades A


e B?

Caminho Mnimo

Problema 2: Menor caminho entre duas cidades

Dado um mapa de cidades, contendo as distncias entre

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.


Arestas ponderadas: podem indicar tempo, custo,

penalidades, perdas, etc;


Esse problema conhecido como Problema do Caminho

Mnimo.

Caminho Mnimo

Abordagem

Problema do caminho mnimo semelhante a problema

do nmero de Erds;

Caminho Mnimo

Abordagem

Problema do caminho mnimo semelhante a problema

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

entre dois vrtices contm outros caminhos mnimos em


seu interior.

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra

10

9
2

3
4

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra

10

s
0

9
2

3
4

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra

10

s
0

9
2

3
4

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra

10

10

s
0

9
2

3
4

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra

14

10

s
0

9
2

3
4

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra

13

10

s
0

9
2

3
4

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra

10

s
0

9
2

3
4

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra

10

s
0

9
2

3
4

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra


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

Relaxa(u,v)
v
2
7

(a)

Relaxa(u,v)
v
2
6

(b)

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra

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

Caminho mnimo de fonte nica: algoritmo de Dijkstra


Anlise da complexidade:
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

Caminho mnimo de fonte nica: algoritmo de Dijkstra


Anlise da complexidade:
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)

Construo do heap
(linha 6): O(n)

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra


Anlise da complexidade:
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)

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

Caminho mnimo de fonte nica: algoritmo de Dijkstra


Anlise da complexidade:
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)

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

Caminho mnimo de fonte nica: algoritmo de Dijkstra


Anlise da complexidade:
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)

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

Problemas do Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijsktra;

Caminho Mnimo

Problemas do Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijsktra;


Caminho mnimo de destino nico: inverta a direo

das arestas e aplique algoritmo de Dijstra;

Caminho Mnimo

Problemas do Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijsktra;


Caminho mnimo de destino nico: inverta a direo

das arestas e aplique algoritmo de Dijstra;


Caminho mnimo entre quaisquer vrtices u e v:

algoritmo de Dijsktra;

Caminho Mnimo

Problemas do Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijsktra;


Caminho mnimo de destino nico: inverta a direo

das arestas e aplique algoritmo de Dijstra;


Caminho mnimo entre quaisquer vrtices u e v:

algoritmo de Dijsktra;
Caminho mnimo de todos os vrtices para todos os

vrtices: algoritmo de Floyd-Warshall em tempo O(n3 ).

Caminho Mnimo

Limitaes do algoritmo de Dijkstra


No funciona para grafos que contm ciclos com pesos

negativos acessveis a partir da origem;

Caminho Mnimo

Limitaes do algoritmo de Dijkstra


No funciona para grafos que contm ciclos com pesos

negativos acessveis a partir da origem;


Alternativa: Algoritmo de Bellman-Ford de complexidade

O(n m);

a
0
3

-4
6

b
0

d
0

-3
3
-6

-8

f
0

h
4

Caminho Mnimo

Caminho Mnimo em Grafos com Pesos Negativos

E se adicionarmos uma constante ao peso de cada

aresta?

-9

Caminho Mnimo

Caminho Mnimo em Grafos com Pesos Negativos

E se adicionarmos uma constante ao peso de cada

aresta?

-9

a
mais 9

13

15

11

Caminho Mnimo

Caminho Mnimo em Grafos com Pesos Negativos

E se adicionarmos uma constante ao peso de cada

aresta?

2 custo:1
custo:2 6

-9

a
mais 9

13

15

11

Caminho Mnimo

Caminho Mnimo em Grafos com Pesos Negativos

E se adicionarmos uma constante ao peso de cada

aresta?

custo:1
6
2 custo:2

-9

a
mais 9

13

custo:28
11 custo:11 15

Caminho Mnimo

Bibliografia Utilizada

CORMEN, T. H.; LEISERSON, C. E.; RIVEST, R. L. e STEIN, C.


Introduction to Algorithms, 3a edio, MIT Press, 2009.

Вам также может понравиться