Buscar

Aula05_grafos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 33 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 33 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 33 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

Teoria dos Grafos
Valeriano A. de Oliveira
So
orro Rangel
Silvio A. de Araujo
Departamento de Matemáti
a Apli
ada
antunes�ibil
e.unesp.br, so
orro�ibil
e.unesp.br, saraujo�ibil
e.unesp.br
AULA 5
Caminho mínimo - Algoritmo de Djskstra
Preparado a partir do texto:
Rangel, So
orro. Teoria do Grafos, Notas de aula, IBILCE, Unesp, 2002-2013.
Caminho Mínimo em
Grafos
Caminho Mínimo em Grafos
Introduçao
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 3
Considere a rede:
s t
a b
cd
9
15
4
2
2
3
35
16
6
5
7
21
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 4
Dado dois vérti
es nesta rede, queremos determinar o menor 
aminho
entre eles.
Uma primeira questão é 
omo representar os valores asso
iados às
arestas neste grafo. Isto pode ser feito através da matriz de pesos.
Seja D um digrafo simples 
ujas arestas possuem �pesos� asso
iados,
digamos, a 
ada aresta (vi, vj) está asso
iado um número real wij ≥ 0
(que pode representar 
omprimento, distân
ia, valor, et
).
Vamos de�nir wii = 0 para todo i e wij =∞ quando não existe uma
aresta entre os vérti
es vi e vj .
Assim a matriz de pesos é uma matriz n× n de�nida 
omo W = [wij],
onde n é o número de vérti
es.
Exemplo
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 5
Construir a matriz de pesos para a rede abaixo:
s t
a b
cd
9
15
4
2
2
3
35
16
6
5
7
21
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 6
Observação 1. Em geral
■ wij 6= wji e
■ wij + wjk pode ser menor ou igual a wik.
Por exemplo, na rede anterior,
wsd + wda = 9 + 4 ≤ 15 = wsa.
O algoritmo que nós vamos ver foi proposto por Dijkstra em 1959 e é
um dos mais e�
ientes até hoje. Vamos supor então que queremos
en
ontrar o 
aminho mínimo entre e na rede a
ima.
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 6
Observação 2. Em geral
■ wij 6= wji e
■ wij + wjk pode ser menor ou igual a wik.
Por exemplo, na rede anterior,
wsd + wda = 9 + 4 ≤ 15 = wsa.
• O algoritmo que nós vamos ver foi proposto por Dijkstra em 1959 e é
um dos mais e�
ientes até hoje. Vamos supor então que queremos
en
ontrar o 
aminho mínimo entre s e t na rede a
ima.
Idéia do Algoritmo:
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 7
■ Rotular os vérti
es do digrafo.
■ A partir do vérti
e ini
ial s, pro
eder em direção ao vérti
e �nal t
(seguindo as arestas orientadas) rotulando os vérti
es 
om as suas
distân
ias ao vérti
e s, medida até aquele momento.
■ A 
ada estágio do algoritmo teremos vérti
es que possuem rótulos
temporários e outros rótulos permanentes.
■ O rótulo de um vérti
e vj é feito permanente quando este rótulo
representa a menor distân
ia de s até vj.
■ Começamos asso
iando rótulo permanente igual a zero para o vérti
e
s, e um rótulo temporário igual a ∞ para os outros n− 1 vérti
es do
grafo.
■ A 
ada iteração, um novo vérti
e re
ebe um rótulo permanente de
a
ordo 
om as seguintes regras:
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 8
1. Cada vérti
e vj 
om um rótulo temporário, re
ebe um novo rótulo
temporário dado por:
min{rótulo de vj, (rótulo de vi) + wij}
onde vi é o vérti
e que re
ebeu rótulo permanente na iteração
anterior e wij é o valor da aresta entre o vérti
e vi e o vérti
e vj.
2. En
ontre o menor valor entre os rótulos temporários.
Este será o rótulo permanente do respe
tivo vérti
e.
Em 
aso de empate sele
ione qualquer um dos 
andidatos e atribua
rótulo permanente ao es
olhido.
� Repetir 1 e 2 até que o vérti
e destino, t, re
eba um rótulo
permanente.
Exemplo
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 9
Vamos apli
ar a ideia a
ima à rede abaixo:
s t
a b
cd
9
15
4
2
2
3
35
16
6
5
7
21
Apli
ação do algoritmo:
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 10
Ini
ializaçao: rot(s) = 0 é permanente,
rot(a) = rot(b) = rot(c) = rot(d) = rot(t) =∞ são temporários
it = 1
Regra 1 � Novo rótulo
Novo rot(a) = min{∞, 0 + wsa} = min{∞, 15} = 15
Novo rot(b) = min{∞, 0 + wsb} = min{∞,∞} =∞
Novo rot(c) = min{∞, 0 + wsc} = min{∞,∞} =∞
Novo rot(d) = min{∞, 0 + wsd} = min{∞, 9} = 9
Novo rot(t) = min{∞, 0 + wst} = min{∞,∞} =∞
Regra 2 � Rótulo permanente
min{15,∞,∞, 9,∞} = 9 ⇒ rot(d) torna-se permanente
Apli
ação do algoritmo 
ont.:
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 11
it = 2
Regra 1 � Novo rótulo
Novo rot(a) = min{15, 9 + wda} = min{15, 9 + 4} = 13
Novo rot(b) = min{∞, 9 + wdb} = min{∞,∞} =∞
Novo rot(c) = min{∞, 9 + wdc} = min{∞, 9 + 2} = 11
Novo rot(t) = min{∞, 9 + wdt} = min{∞,∞} =∞
Regra 2 � Rótulo permanente
min{13,∞, 11,∞} = 11 ⇒ rot(c) torna-se permanente
Regra 1 � Novo rótulo
Novo
Novo
Novo
Regra 2 � Rótulo permanente
torna-se permanente
Apli
ação do algoritmo 
ont.:
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 11
it = 2
Regra 1 � Novo rótulo
Novo rot(a) = min{15, 9 + wda} = min{15, 9 + 4} = 13
Novo rot(b) = min{∞, 9 + wdb} = min{∞,∞} =∞
Novo rot(c) = min{∞, 9 + wdc} = min{∞, 9 + 2} = 11
Novo rot(t) = min{∞, 9 + wdt} = min{∞,∞} =∞
Regra 2 � Rótulo permanente
min{13,∞, 11,∞} = 11 ⇒ rot(c) torna-se permanente
it = 3
Regra 1 � Novo rótulo
Novo rot(a) = min{13, 11 + wca} = min{13, 11 +∞} = 13
Novo rot(b) = min{∞, 11 + wcb} = min{∞, 11 +∞} =∞
Novo rot(t) = min{∞, 11 + wct} = min{∞, 11 + 7} = 18
Regra 2 � Rótulo permanente
min{13,∞, 18} = 13 ⇒ rot(a) torna-se permanente
Apli
ação do algoritmo 
ont.:
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 12
it = 4
Regra 1 � Novo rótulo
Novo rot(b) = min{∞, 13 + wab} = min{∞, 13 + 35} = 48
Novo rot(t) = min{18, 13 + wat} = min{18, 13 +∞} = 18
Regra 2 � Rótulo permanente
min{48, 18} = 18 ⇒ rot(t) torna-se permanente
Fim
Podemos parar pois o vérti
e destino, , re
ebeu rótulo permanente.
Assim o menor 
aminho entre e tem 
omprimento igual a 18.
Como re
uperar o 
aminho? A partir do vérti
e destino , veri�
amos o
vérti
e 
om rótulo permanente usado na obtenção do rótulo de . No
nosso exemplo, o vérti
e .
Repetimos o pro
esso a partir de até al
ançar o vérti
e ini
ial . Assim
temos . O 
aminho é obtido invertendo a ordem obtida: .
Apli
ação do algoritmo 
ont.:
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 12
it = 4
Regra 1 � Novo rótulo
Novo rot(b) = min{∞, 13 + wab} = min{∞, 13 + 35} = 48
Novo rot(t) = min{18, 13 + wat} = min{18, 13 +∞} = 18
Regra 2 � Rótulo permanente
min{48, 18} = 18 ⇒ rot(t) torna-se permanente
Fim
Podemos parar pois o vérti
e destino, t, re
ebeu rótulo permanente.
Assim o menor 
aminho entre s e t tem 
omprimento igual a 18.
Como re
uperar o 
aminho? A partir do vérti
e destino t, veri�
amos o
vérti
e 
om rótulo permanente usado na obtenção do rótulo de t. No
nosso exemplo, o vérti
e c.
Repetimos o pro
esso a partir de c até al
ançar o vérti
e ini
ial s. Assim
temos t, c, d, s. O 
aminho é obtido invertendo a ordem obtida: s, d, c, t.
Implementação
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 13
Em uma possível implementação deste algoritmo vamos pre
isar
armazenar as seguintes informações:
■ Indi
ação se um vérti
e vk possui rótulo permanente ou temporário.
■ Guardar a menor distân
ia entre o vérti
e ini
ial s e o vérti
e vk.■ Guardar o vérti
e 
om rótulo permanente que deu origem a um novo
rótulo (importante para re
uperar o 
aminho).
Assim vamos podemos de�nir a seguinte estrutura de dados:
1. Entrada de Dados: Matriz de pesos W (O(n2)).
2. A di�
uldade é distinguir, a 
ada iteração, os vérti
es 
om rótulos
permanentes e os vérti
es 
om rótulo temporário.
Utilizamos um vetor lógi
o (ou binário) n-dimensional:
final(v) =
{
True se o rótulo do vérti
e v é permanente,
False se o rótulo do vérti
e v é temporário.
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 14
3. Pre
isamos também de um vetor n-dimensional para guardar as
distân
ias a
umuladas do vérti
e ini
ial s ao vérti
e vk. Vamos
hamar este vetor de dist.
4. Como re
uperar o 
aminho? Sabemos que a menor distân
ia será
dada por dist(t). Mas qual é este 
aminho?
Cada vez que o rótulo de um vérti
e é modi�
ado pre
isamos saber
a partir de que vérti
e foi 
al
ulado o novo rótulo. Mantendo um
vetor n-dimensional pred tal que:
• pred(v) indi
a o vérti
e 
om rótulo permanente que deu origem
ao rótulo do véti
e v,
• e se v for o vérti
e ini
ial, então pred(s) = −1;
temos que o menor 
aminho é dado por:
s, pred(pred(· · · )), . . . , pred(pred(t)), pred(t), t.
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 15
Considere um digrafo D(V,A), 
om n vérti
es e sua matriz de pesos
W = [wij ], n× n.
Queremos en
ontrar o menor 
aminho entre o vérti
e s e o vérti
e t no
digrafo D.
De�na os vetores:
■ final(i) � indi
a se o vérti
e vi re
ebeu rótulo permanente
(poten
ial) ou não;
■ dist(i) � indi
a a distân
ia a
umulada do vérti
e ini
ial s até o
vérti
e vi;
■ pred(i) � indi
a o vérti
e 
om rótulo permanente que deu origem ao
rótulo do véti
e vi.
Algoritmo de Dijkstra
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 16
Ini
ialização
para todo v ∈ V faça
iní
io
dist(v) =∞
final(v) = falso
pred(v) = −1
�m
dist(s) = 0
final(s) = verdadeiro
recente = s
Algoritmo de Dijkstra 
ont.
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 17
Iteração Prin
ipal
enquanto final(t) = falso faça
iní
io
para todo vérti
e vj tal que exista a aresta (recente, vj) e tal que final(j) = falso faça
iní
io (atualização dos rótulos)
rotulo = dist(recente) + wrecente,j
(o rótulo de vj é modi�
ado se houver um 
aminho menor de s a vj através do vérti
e
re
ente)
se rotulo < dist(j) então
iní
io
dist(j) = rotulo
pred(j) = recente
�m
�m
(en
ontre o vérti
e 
om menor rótulo temporário)
Seja y o vérti
e 
om menor rótulo temporário, tal que dist(y) 6=∞
iní
io (o rótulo do vérti
e y se torna permanente)
final(y) = verdadeiro
recente = y
�m
�m
Exemplo
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 18
Rastrear o algoritmo de Dijkstra usando o digrafo 
om vérti
es
s, a, b, c, d, t 
uja matriz de pesos asso
iada é:
W =


0 7 4 9 7 ∞
7 0 1 ∞ ∞ 6
4 1 0 3 ∞ ∞
9 ∞ 3 0 1 3
7 ∞ ∞ 1 0 5
∞ 6 ∞ 3 5 0


.
Exemplo 
ont.
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 19
Ini
ialização
dist = [∞ ∞ ∞ ∞ ∞ ∞]
final = [falso falso falso falso falso falso]
pred = [−1 − 1 − 1 − 1 − 1 − 1]
dist(s) = 0
final(s) = verdadeiro
recente = s
it = 1
Vérti
es v tais que existe a aresta (recente, v) e tais que
final(v) = falso: a, b, c, d
Exemplo 
ont.
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 20
v = a: rotulo = dist(recente) + wrecente,a = 0 + 7 <∞ = dist(a)
dist(a) = 7
pred(a) = s
v = b: rotulo = dist(recente) + wrecente,b = 0 + 4 <∞ = dist(b)
dist(b) = 4
pred(b) = s
v = c: rotulo = dist(recente) + wrecente,c = 0 + 9 <∞ = dist(c)
dist(c) = 9
pred(c) = s
v = d: rotulo = dist(recente) + wrecente,d = 0 + 7 <∞ = dist(d)
dist(d) = 7
pred(d) = s
Exemplo 
ont.
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 21
Vérti
e y 
om menor rótulo temporário, tal que dist(y) 6=∞: b
final(b) = verdadeiro
recente = b
Vérti
es tais que existe a aresta e tais que
:
:
:
Exemplo 
ont.
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 21
Vérti
e y 
om menor rótulo temporário, tal que dist(y) 6=∞: b
final(b) = verdadeiro
recente = b
it = 2
Vérti
es v tais que existe a aresta (recente, v) e tais que
final(v) = falso: a, c
v = a: rotulo = dist(recente) + wrecente,a = 4 + 1 < 7 = dist(a)
dist(a) = 5
pred(a) = b
v = c: rotulo = dist(recente) + wrecente,c = 4 + 3 < 9 = dist(c)
dist(c) = 7
pred(b) = b
Exemplo 
ont.
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 22
Vérti
e y 
om menor rótulo temporário, tal que dist(y) 6=∞: a
final(a) = verdadeiro
recente = a
Vérti
es tais que existe a aresta e tais que
:
:
Vérti
e 
om menor rótulo temporário, tal que : ou
Exemplo 
ont.
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 22
Vérti
e y 
om menor rótulo temporário, tal que dist(y) 6=∞: a
final(a) = verdadeiro
recente = a
it = 3
Vérti
es v tais que existe a aresta (recente, v) e tais que
final(v) = falso: t
v = t: rotulo = dist(recente) + wrecente,t = 5 + 6 <∞ = dist(t)
dist(t) = 11
pred(t) = a
Vérti
e y 
om menor rótulo temporário, tal que dist(y) 6=∞: c ou d
final(c) = verdadeiro
recente = c
Exemplo 
ont.
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 23
it = 4
Vérti
es v tais que existe a aresta (recente, v) e tais que
final(v) = falso: d, t
v = d: rotulo = dist(recente) + wrecente,d = 7 + 1 ≮ 7 = dist(d)
v = t: rotulo = dist(recente) + wrecente,t = 7 + 3 < 11 = dist(t)
dist(t) = 10
pred(t) = c
Vérti
e y 
om menor rótulo temporário, tal que dist(y) 6=∞: d
final(d) = verdadeiro
recente = d
Exemplo 
ont.
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 24
it = 5
Vérti
es v tais que existe a aresta (recente, v) e tais que
final(v) = falso: t
v = t: rotulo = dist(recente) + wrecente,d = 7 + 5 ≮ 7 = dist(d)
Vérti
e y 
om menor rótulo temporário, tal que dist(y) 6=∞: t
final(t) = verdadeiro
recente = t
Como final(t) = verdadeiro, pare
Exemplo 
omt.
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 25
Qual é o valor do menor 
aminho?
dist(t) = 10
Qual é este 
aminho?
t, pred(t)
t, c, pred(c)
t, c, b, pred(b)
t, c, b, s, pred(s)
t, c, b, s,−1
O menor 
aminho é {s, b, c, t}
Exemplo 
ont.
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 26
E se quisermos o menor 
aminho entre s e c? Podemos aproveitar os
ál
ulos anteriores.
Como c possui rótulo permanente, temos que:
dist(c) = 7
E o 
aminho é:
c, pred(c)
c, b, pred(b)
c, b, s
O menor 
aminho é então: {s, b, c}.
Observações
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 27
1. A 
omplexidade em termos de tempo 
omputa
ional do algoritmo
a
ima é dada por:
O laço prin
ipal deste algoritmo, no pior 
aso, é exe
utado n− 1
vezes. Isto a
onte
e quando o vérti
e �nal, t, é o último a re
eber
um rótulo permanente. Para 
ada exe
ução deste laço, pre
isamos
examinar uma linha da matriz de pesos, e atualizar os vetores dist e
pred, ou seja um tempo propor
ional a n. Assim o tempo total é da
ordem 2n(n− 1). A 
omplexidade é O(n2).
Observe que independe do número de arestas no grafo.
2. É possível, usando o algoritmo de Dijkstra en
ontrar o menor
aminho entre o vérti
e s e todos os outros vérti
es do grafo.O que
deve ser modi�
ado?
Observações
Caminho Mínimo em Grafos
Teoria dos Grafos (Antunes Rangel&Araujo) � 28
1. Outros Algoritmos para problemas de Caminho Mínimo em grafos
podem ser en
ontrados por exemplo na página 283 de: [Otimização
Combinatória e Programação Linear, M.C. Goldbarg e H.P.L. Luna,
Ed. Campus, 2000℄.
2. O algoritmo de Dijskstra fun
iona apenas se wij ≥ 0 para todos i, j.
Veri�que este fato apli
ando o algoritmo à seguinte rede para
en
ontrar o menor 
aminho entre v1 e v3:
v1
v2 v3
1
-5
5
	Caminho Mínimo em Grafos
	Introduçao
	
	Exemplo
	
	Idéia do Algoritmo:
	
	Exemplo
	Aplicação do algoritmo:
	Aplicação do algoritmo cont.:
	Aplicação do algoritmo cont.:
	Implementação
	
	
	Algoritmo de Dijkstra
	Algoritmo de Dijkstra cont.
	Exemplo
	Exemplo cont.
	Exemplo cont.
	Exemplo cont.
	Exemplo cont.
	Exemplo cont.
	Exemplo cont.
	Exemplo comt.
	Exemplo cont.
	Observações
	Observações

Outros materiais