Você está na página 1de 54

BC0506 - Comunicao e Redes

Aula 05 Algoritmos de caminhos mnimos


Profa. Letcia Bueno
leticia.bueno@ufabc.edu.br

2Q-2016
1

I. Uso dos algoritmos de busca

Uso de algoritmos de busca

Ordenao linear dos vrtices de um grafo.


Determinar o caminho mnimo entre um par de vrtices.
Existncia de ciclos no grafo (sim ou no).
Determinar se o grafo conexo (sim ou no)

Uso do algoritmo de busca em profundidade


5/12

BCC
BMat

1/4

6/11

PI

NI

2/3

7/10

CR

BExp

15/18

TQui

16/17

Obrig

8/9

Optat

13/14

Uso do algoritmo de busca em profundidade


5/12

BCC
BMat

1/4

6/11

PI

NI

2/3

7/10

CR

BExp

15/18

TQui

16/17

Obrig

8/9

Optat

13/14

BExp

TQui

Optat

BCC

PI

CR

Obrig

BMat

15/18

16/17

13/14

5/12

6/11

7/10

8/9

1/4

NI

2/3 5

Uso do algoritmo de busca em largura


Como identificar um caminho entre os vrtices u e v de um
grafo G?
Caminho_mais_curto(G,u,v):
BFS(G,u)
Imprime_caminho(G,u,v)
Imprime_caminho(G,u,v):
Se u==v
imprime u
caso-contrario
Se v.pre==VAZIO
imprime nao existe caminho de u a v
Caso-contrario
Imprime_caminho(G,u,v.pre)
imprime v
6

Uso do algoritmo de busca em largura


Imprime_caminho(G,u,v):
Se u==v
imprime u
caso-contrario
Se v.pre==VAZIO
imprime nao existe caminho de u a v
Caso-contrario
Imprime_caminho(G,u,v.pre)
imprime v
(1,s)

(0)

(2,w)

(3,t)

Imprime_caminho(G,s,z)
Imprime_caminho(G,s,x)
Imprime_caminho(G,s,w)

(2,r)

(1,s)

(2,w)

(3,x)

Imprime_caminho(G,s,s)

Uso do algoritmo de busca em largura


Imprime_caminho(G,u,v):
Se u==v
imprime u
caso-contrario
Se v.pre==VAZIO
imprime nao existe caminho de u a v
Caso-contrario
Imprime_caminho(G,u,v.pre)
imprime v
(1,s)

(0)

(2,w)

(3,t)

Imprime_caminho(G,s,z)
Imprime_caminho(G,s,x)
Imprime_caminho(G,s,w)

(2,r)

(1,s)

(2,w)

(3,x)

Imprime_caminho(G,s,s)
Imprime s
Caminho= s

Uso do algoritmo de busca em largura


Imprime_caminho(G,u,v):
Se u==v
imprime u
caso-contrario
Se v.pre==VAZIO
imprime nao existe caminho de u a v
Caso-contrario
Imprime_caminho(G,u,v.pre)
imprime v
(1,s)

(0)

(2,w)

(3,t)

Imprime_caminho(G,s,z)
Imprime_caminho(G,s,x)
Imprime_caminho(G,s,w)

(2,r)

(1,s)

(2,w)

(3,x)

Imprime_caminho(G,s,s)
Imprime s
Caminho= s

Uso do algoritmo de busca em largura


Imprime_caminho(G,u,v):
Se u==v
imprime u
caso-contrario
Se v.pre==VAZIO
imprime nao existe caminho de u a v
Caso-contrario
Imprime_caminho(G,u,v.pre)
imprime v
(1,s)

(0)

(2,w)

(3,t)

Imprime_caminho(G,s,z)
Imprime_caminho(G,s,x)
Imprime_caminho(G,s,w)
Imprime w

(2,r)

(1,s)

(2,w)

(3,x)

Imprime_caminho(G,s,s)
Imprime s
Caminho= s,w

10

Uso do algoritmo de busca em largura


Imprime_caminho(G,u,v):
Se u==v
imprime u
caso-contrario
Se v.pre==VAZIO
imprime nao existe caminho de u a v
Caso-contrario
Imprime_caminho(G,u,v.pre)
imprime v
(1,s)

(0)

(2,w)

(3,t)

Imprime_caminho(G,s,z)
Imprime_caminho(G,s,x)
Imprime_caminho(G,s,w)
Imprime w

(2,r)

(1,s)

(2,w)

(3,x)

Imprime_caminho(G,s,s)
Imprime s
Caminho= s,w

11

Uso do algoritmo de busca em largura


Imprime_caminho(G,u,v):
Se u==v
imprime u
caso-contrario
Se v.pre==VAZIO
imprime nao existe caminho de u a v
Caso-contrario
Imprime_caminho(G,u,v.pre)
imprime v
(1,s)

(0)

(2,w)

(3,t)

Imprime_caminho(G,s,z)
Imprime_caminho(G,s,x)
Imprime x
Imprime_caminho(G,s,w)
Imprime w

(2,r)

(1,s)

(2,w)

(3,x)

Imprime_caminho(G,s,s)
Imprime s
Caminho= s,w,x

12

Uso do algoritmo de busca em largura


Imprime_caminho(G,u,v):
Se u==v
imprime u
caso-contrario
Se v.pre==VAZIO
imprime nao existe caminho de u a v
Caso-contrario
Imprime_caminho(G,u,v.pre)
imprime v
(1,s)

(0)

(2,w)

(3,t)

Imprime_caminho(G,s,z)
Imprime z
Imprime_caminho(G,s,x)
Imprime x
Imprime_caminho(G,s,w)
Imprime w

(2,r)

(1,s)

(2,w)

(3,x)

Imprime_caminho(G,s,s)
Imprime s
Caminho= s,w,x,z

13

II. Algoritmos de caminhos mnimos

14

Caminhos mnimos - Motivao


Ideia:
Minimizar (ou maximizar) um certo valor.

Por exemplo:
- Minimizar o custo ou o tempo gasto.
- Maximizar o lucro ou o ganho.

15

Caminhos mnimos - Motivao


Exemplo 1
Considere uma empresa de entregas, com um centro de
distribuio e um caminho.
Problema:
Dada uma lista de endereos de entrega encontrar uma
sequncia que minimize a kilometragem total do caminho
para realizar todas as entregas

16

Caminhos mnimos - Motivao


Modelar o problema atravs de grafos.

Vrtices:
Endereos de engrega.
Arestas:
Uma rota conectando 2
endereos de entrega.
Peso/custo:
Distncias entre as
extremidades.

17

Caminhos mnimos - Motivao


Exemplo 2
Considere um programa de GPS para o clculo da melhor
rota entre dois pontos.
Problema:
Dado um endereo de origem e destino, encontrar um
caminho mnimo entre a origem e o destino, i.e., encontrar a
rota com a menor distncia.

18

Caminhos mnimos - Motivao


Modelar o problema atravs de grafos.

Vrtices:
Cruzamentos entre ruas.
Arestas:
Cada trecho de rua.
Peso/custo:
Comprimento do trecho (em
quilmetros)

19

Distncia

Um caminho C, em um grafo, mnimo se no existe outro


caminho com mesma origem e mesmo trmino que C e com
comprimento menor que o de C.
A distncia entre s e t o comprimento do caminho
mnimo entre s e t.
Se no existe nenhum caminho entre s e t, ento a distncia
entre esses vrtices infinita.

20

Distncia
Grafos no-ponderados

Distncia entre:
h,e = 3
h,k = Infinito

21

Distncia
Grafos ponderados
Muitas aplicaes associam
um nmero a cada aresta.

h
1

b
5
a

1
d

10

Esse nmero o
custo/peso da aresta, que
pode representar uma
caracterstica fsica da
conexo.

3
e

22

Distncia
Grafos ponderados

h
1

b
5
a

1
d

Distncia entre:
h,k = Infinito
h,e = ?

10

3
e

23

Distncia
Grafos ponderados

h
1

b
5
a

1
d

Distncia entre:
h,k = Infinito
h,e = 8

10

3
e

24

Distncia
Grafos ponderados

h
1

b
5
a

1
d

10

3
e

Distncia entre:
h,k = Infinito
h,e = 8

O comprimento de
um caminho a
soma dos
pesos/custos das
arestas do caminho.

25

Busca de caminhos mnimos em grafos

Para a busca de caminhos mnimos em grafos


ponderados, h algoritmos especficos que executam a
tarefa.
Algoritmos especficos:
(1) Caminhos mnimos a partir de um dado vrtice.
(2) Caminos mnimos entre todos os pares de vrtices.

26

Caminho mnimos com origem fixa

Dado um vrtice s de um grafo ponderado, encontrar para


cada vrtice t (que pode ser alcanado a partir de s) um
caminho mnimo de s a t.
Todos os algoritmos para esses problemas exploram a
seguinte propriedade triangular:

d(x,z) d(x,y)+d(y,z)
sendo d(i,j) a distncia do vrtice i ao vrtice j.

27

Algoritmo de Dijkstra

Algoritmo eficiente para a obteno do caminho mnimo em


grafos com pesos no-negativos.
Criado por um cientista da computao chamado Edsger
Dijkstra.
Entrada:
Grafo, G.
Vrtices, s.
Pesos, w (no-negativos).

Sada:
Caminhos mnimos a partir de s.
28

Algoritmo de Dijkstra

a
10
3

e
6

5
c

d
2

29

Algoritmo de Dijkstra

a.dis

b.dis

c.dis

d.dis

e.dis

{}

1
c

Vrtices
visitados

10
3

iterao

d
2

30

Algoritmo de Dijkstra

0
1
1

a
10
3

Vrtices
visitados

a.dis

b.dis

c.dis

d.dis

e.dis

{}

{a}

10

10

iterao

d
2

31

Algoritmo de Dijkstra

0
1
1

a
10
3

c
6

Vrtices
visitados

a.dis

b.dis

c.dis

d.dis

e.dis

{}

{a}

10

{a,b}

10

10

iterao

d
2

32

Algoritmo de Dijkstra

0
1
1

a
10
3

c
5

Vrtices
visitados

a.dis

b.dis

c.dis

d.dis

e.dis

{}

{a}

10

{a,b}

10

{a,b,d}

iterao

d
2

33

Algoritmo de Dijkstra

0
1
1

a
10
3

c
5

Vrtices
visitados

a.dis

b.dis

c.dis

d.dis

e.dis

{}

{a}

10

{a,b}

10

{a,b,d}

{a,b,d,c}

iterao

d
2

34

Algoritmo de Dijkstra

0
1
1

a
10
3

e
6

5
c
5

iterao

Vrtices
visitados

a.dis

b.dis

c.dis

d.dis

e.dis

{}

{a}

10

{a,b}

10

{a,b,d}

{a,b,d,c}

{a,b,d,c,e}

d
2

35

Algoritmo de Dijkstra
Inicializao:
Atribui uma distncia infinita para todos os vrtices.
O vrtice de origem recebe distncia zero (0).
Todos os vrtices so marcados como no visitados.
Enquanto existir vrtices no visitados:
Determine o vrtice no visitado com a menor distncia (a
partir da origem) como o vrtice atual.
Calcule a distncia para todos os vrtices adjacentes no
visitados:
- Se a distncia menor, substitua a distncia.
- Marque-o como visitado (sua distncia mnima).
Observao: por sempre escolher como prximo vrtice a ser analisado aquele que parece a melhor
opo, o algoritmo chamado de guloso (Greedy)

36

Algoritmo de Dijkstra

2
a

b
4
3

7
3

3
e

d
2

37

Algoritmo de Dijkstra

2
a

Vrtices
visitados

a.dis

b.dis

c.dis

d.dis

e.dis

{}

4
3

iterao

d
2

38

Algoritmo de Dijkstra

2
0

2
a
4
3

iterao

Vrtices
visitados

a.dis

b.dis

c.dis

d.dis

e.dis

{}

{b}

3
c
3

d
2

39

Algoritmo de Dijkstra

2
0

2
a
4
3

iterao

Vrtices
visitados

a.dis

b.dis

c.dis

d.dis

e.dis

{}

{b}

{b,a}

7
3

3
c
3

d
2

40

Algoritmo de Dijkstra

2
0

2
a
4
3

iterao

Vrtices
visitados

a.dis

b.dis

c.dis

d.dis

e.dis

{}

{b}

{b,a}

{b,a,c}

7
3

3
c
3

d
2

41

Algoritmo de Dijkstra

2
0

2
a
4
3

iterao

Vrtices
visitados

a.dis

b.dis

c.dis

d.dis

e.dis

{}

{b}

{b,a}

{b,a,c}

{b,a,c,d}

3
c
3

d
2

42

Algoritmo de Dijkstra

2
0

2
a
4
3

7
3

3
c
3

iterao

Vrtices
visitados

a.dis

b.dis

c.dis

d.dis

e.dis

{}

{b}

{b,a}

{b,a,c}

{b,a,c,d}

{b,a,c,d,e}

d
2

43

Algoritmo de Dijkstra
Dijkstra(G,s,w)
Para cada vrtice v em G
v.dis = INFINITO
v.pre = -1
s.dis = 0
T = todos os vrtices de G
Enquanto T
VAZIO faa
u = vrtice em T com menor distncia
se u.dist==INFINITO
Sai do lao
remove u de T
Para cada vizinho v de u
d = u.dist + w(u,v)
Se d<v.dist
v.dist = d
v.pre = u

Inicializao

Percorre o grafo

44

Algoritmo de Dijkstra

t
10

x
9

4
5

Como identificar os caminhos mximos?

45

Algoritmo de Dijkstra
Inicializao

Para cada vrtice v em G


v.dis = INFINITO
v.pre = -1
s.dis = 0
T = todos os vrtices de G

t
10

iterao

Vrtices
visitados

s.dis

t.dis

x.dis

y.dis

z.dis

{}

9
2

4
5

46

Algoritmo de Dijkstra
Enquanto T
VAZIO faa
u = vrtice em T com menor distncia
Se u.dist==INFINITO
Sai do lao
remove u de T
Para cada vizinho v de u
d = u.dist + w(u,v)
Se d<v.dist
v.dist = d
v.pre = u
10

t
10

x
9

iterao

Vrtices
visitados

s.dis

t.dis

x.dis

y.dis

z.dis

{}

{s}

10

4
5

y
5

47

Algoritmo de Dijkstra
Enquanto T
VAZIO faa
u = vrtice em T com menor distncia
Se u.dist==INFINITO
Sai do lao
remove u de T
Para cada vizinho v de u
d = u.dist + w(u,v)
Se d<v.dist
v.dist = d
v.pre = u
8

t
10

14

x
9

4
5

iterao

Vrtices
visitados

s.dis

t.dis

x.dis

y.dis

z.dis

{}

{s}

10

{s,y}

14

y
5

z
7
48

Algoritmo de Dijkstra
Enquanto T
VAZIO faa
u = vrtice em T com menor distncia
Se u.dist==INFINITO
Sai do lao
remove u de T
Para cada vizinho v de u
d = u.dist + w(u,v)
Se d<v.dist
v.dist = d
v.pre = u
8

t
10

13

x
9

4
5

iterao

Vrtices
visitados

s.dis

t.dis

x.dis

y.dis

z.dis

{}

{s}

10

{s,y}

14

{s,y,z}

13

y
5

z
7
49

Algoritmo de Dijkstra
Enquanto T
VAZIO faa
u = vrtice em T com menor distncia
Se u.dist==INFINITO
Sai do lao
remove u de T
Para cada vizinho v de u
d = u.dist + w(u,v)
Se d<v.dist
v.dist = d
v.pre = u
8

t
10

x
9

4
5

y
5

iterao

Vrtices
visitados

s.dis

t.dis

x.dis

y.dis

z.dis

{}

{s}

10

{s,y}

14

{s,y,z}

13

{s,y,z,t}

z
7
50

Algoritmo de Dijkstra
Enquanto T
VAZIO faa
u = vrtice em T com menor distncia
Se u.dist==INFINITO
Sai do lao
remove u de T
Para cada vizinho v de u
d = u.dist + w(u,v)
Se d<v.dist
v.dist = d
v.pre = u
8

t
10

x
9

4
5

y
5

iterao

Vrtices
visitados

s.dis

t.dis

x.dis

y.dis

z.dis

{}

{s}

10

{s,y}

14

{s,y,z}

13

{s,y,z,t}

{s,y,z,t,x}

7
51

III. Atividade Pratica

52

Atividade
Questo 1:
Considere um grafo orientado e ponderado que seja
representado pela matriz de adjacncia abaixo.
Simule o algoritmo de Dijkstra e determine as distncias a
todos os vrtices, considerando como origem o vrtice 1.
Faa grficos para mostrar a evoluo do algoritmo.

53

Atividade
Questo 2:
Para cada grafo, simule o algoritmo de Dijkstra e determine
as distncias a todos os vrtices, considerando como
origem o vrtice 1.
1
1
3
5

1
1

1
3

2
2

54

Você também pode gostar