Vous êtes sur la page 1sur 72

BC0506 - Comunicao e Redes

Aula 05 Algoritmos de caminhos mnimos


David Correa Martins Jr
david.martins@ufabc.edu.br

Aulas passadas

Algoritmos de busca em grafos


Busca em largura
Busca em profundidade

Busca em largura (Breadth First Search)


BFS(G,s):
Para cada vrtice v em G.V-{s} faa
v.cor = BRANCO
v.dis = INFINITO
v.pre = VAZIO
s.cor = CINZA
s.dis = 0
Q = VAZIO
Insere(Q,s)
Enquanto Q
VAZIO faa
u = Remove(Q)
Para cada vrtice v em G.Adj[u] faa
se v.cor == BRANCO
v.cor = CINZA
v.dis = u.dis+1
v.pre = u
Insere(Q,v)
u.cor = PRETO

Inicializao

Percorre o grafo
Explora os vizinhos de u

Busca em profundidade (Depth First Search)


DFS(G,s):
Para cada vrtice v em G.V-{s} faa
Inicializao
v.cor = BRANCO
v.t1 = INFINITO
v.t2 = INFINITO
s.cor = CINZA
s.t1 = 0
P = VAZIO
Insere(P,s)
Enquanto P
VAZIO faa
Percorre o grafo
u = Consulta(P)
Se u tem vrtices adjacentes na cor BRANCO
v = escolhe um vrtice adjacente v.cor=BRANCO
v.cor = CINZA
tempo = tempo+1
v.t1 = tempo
Insere(P,v)
Caso-contrrio
u.cor = PRETO
tempo = tempo+1
v.t2 = tempo
Remove(P)
4

Busca em profundidade (verso recursiva 1)


DFS(G,s):
Para cada vrtice v em G.V-{s} faa
v.cor = BRANCO
v.t1 = INFINITO
v.t2 = INFINITO
tempo = 0
VisitaDFS(G,s)

VisitaDFS(G,s):
tempo = tempo+1
s.t1 = tempo
s.cor = CINZA
Para cada v em G.Adj[s] faa
Se v.cor == BRANCO
VisitaDFS(G,v)
s.cor = PRETO
tempo = tempo+1
s.t2 = tempo

Inicializao

Percorre o grafo

Busca em profundidade

Verso recursiva 1

Busca em profundidade (verso recursiva 2)


DFS(G):
Para cada vrtice v em G.V faa
v.cor = BRANCO
v.t1 = INFINITO
v.t2 = INFINITO
tempo = 0
Para cada vrtice u em G.V faa
se u.cor==BRANCO
VisitaDFS(G,u)
VisitaDFS(G,s):
tempo = tempo+1
s.t1 = tempo
s.cor = CINZA
Para cada v em G.Adj[s] faa
Se v.cor == BRANCO
VisitaDFS(G,v)
s.cor = PRETO
tempo = tempo+1
s.t2 = tempo

Inicializao

Percorre o grafo

Busca em profundidade

Verso recursiva 2

I. Uso de 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)

10

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

11

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/312

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)

13

Uso do algoritmo de busca em profundidade

(3) 7

(2) 2

(2)

(1)

(1)

(2)

(0)
origem
14

II. Algoritmos de caminhos mnimos

15

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.

16

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

Modelar o problema atravs de grafos.


17

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.

18

Caminhos mnimos - Motivao


Sobre o exerccio 1 (atividade para casa) da aula 04

O grafo dos estados do Brasil definido


assim: cada vrtice um dos
estados da Repblica Federativa do
Brasil; dois estados so adjacentes se
tm uma fronteira comum. Faa um
desenho do grafo.
Quantos vrtices tem o grafo?
Quantas arestas?
Qual o grau mdio?
Existe um caminho Euleriano?
19

Caminhos mnimos - Motivao


Sobre o exerccio 1 (atividade para casa) da aula 04

O grafo dos estados do Brasil definido


assim: cada vrtice um dos
estados da Repblica Federativa do
Brasil; dois estados so adjacentes se
tm uma fronteira comum. Faa um
desenho do grafo.
Quantos vrtices tem o grafo?
Quantas arestas?
Qual o grau mdio?
Existe um caminho Euleriano?
20

Caminhos mnimos - Motivao


Sobre o exerccio 1 (atividade para casa) da aula 04

O grafo dos estados do Brasil definido


assim: cada vrtice um dos
estados da Repblica Federativa do
Brasil; dois estados so adjacentes se
tm uma fronteira comum. Faa um
desenho do grafo.
Quantos vrtices tem o grafo?
Quantas arestas?
Qual o grau mdio?
Existe um caminho Euleriano?
21

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.

Modelar o problema atravs de grafos.


22

Caminhos mnimos - Motivao


Modelar o problema atravs de grafos.

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

23

Distncia

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


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

24

Distncia
Grafos no-ponderados

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

25

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 ser remetido a uma
caracterstica fsica da
conexo.

3
e

26

Distncia
Grafos ponderados

h
1

b
5
a

1
d

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

10

3
e

27

Distncia
Grafos ponderados

h
1

b
5
a

1
d

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

10

3
e

28

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.

29

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.

30

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.

31

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.
32

Algoritmo de Dijkstra

a
10
3

e
6

5
c

d
2

33

Algoritmo de Dijkstra

a.dis

b.dis

c.dis

d.dis

e.dis

{}

1
c

Vrtices
visitados

10
3

iterao

d
2

34

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

35

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

36

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

37

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

38

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

39

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 houverem vrtices no visitados:
Eleja o vrtice no visitado com a menor distncia (a partir da
origem) como o vrtice atual.
Calcule a distncia para todos os vrtices adjacntes 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)

40

Algoritmo de Dijkstra

2
b

a
4
3

7
3

3
c

d
2

41

Algoritmo de Dijkstra

2
b

Vrtices
visitados

a.dis

b.dis

c.dis

d.dis

e.dis

{}

4
3

iterao

d
2

42

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

43

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

44

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

45

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

46

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

47

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

48

Algoritmo de Dijkstra

t
10

x
9

4
5

49

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

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
10
1

t
10

x
9

iterao

Vrtices
visitados

s.dis

t.dis

x.dis

y.dis

z.dis

{}

{s}

10

4
5

y
5

51

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

14
1

t
10

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
52

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

13
1

t
10

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
53

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

9
1

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
54

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

9
1

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
55

Caminhos entre todos os pares de vrtices


O algoritmo de Floyd-Warshall encontra todos os caminhos
mnimos entre todos os pares de vrtices em um grafo.
Os pesos devem ser no-negativos.
Este algoritmo til em aplicaes onde necessria a criao de
uma matriz de caminhos mnimos ao invs de um vetor.
O algoritmo, primeiramente modifica a matriz de adjacncia:
Atribui infinito a todos os pares de vrtices sem conexo, exceto
a diagonal principal.

56

Algoritmo de Floyd-Warshall
FloydWarshall(MAdj):
D = Madj
para cada linha i em MAdj
para cada coluna j em MAdj
se (Madj[i,j]==0 e i!=j) // sem conexo?
dist[i,j] = INFINITO
N = numero de linhas de MAdj
para k igual a 1 at N
para i igual a 1 at N
para j igual a 1 at N
se D[i,j] > D[i,k]+D[k,j]
D[i,j] = D[i,k]+D[k,j]

57

Algoritmo de Floyd-Warshall
Matriz de adjacncia

5
1

3
1

10

1
2
3
4
5

3 4

10

10

Matriz simtrica com zeros na diagonal


58

Algoritmo de Floyd-Warshall
Matriz de distncias (D)

5
1

3
1

10

1
2
3
4
5

3 4

10

10

59

Algoritmo de Floyd-Warshall
1
2
3
4
5

1
2
3
4
5

3 4

10

10

3 4

10

10

K=1

D[1,1] > D[1,1]+D[1,1] ? No


D[1,2] > D[1,1]+D[1,2] ? No
D[1,3] > D[1,1]+D[1,3] ? No
D[1,4] > D[1,1]+D[1,4] ? No
D[1,5] > D[1,1]+D[1,5] ? No
D[2,1] > D[2,1]+D[1,1] ? No
D[2,2] > D[2,1]+D[1,2] ? No
D[2,3] > D[2,1]+D[1,3] ? No
D[2,4] > D[2,1]+D[1,4] ? SIM D[2,4]= 5+2=7
D[2,5] > D[2,1]+D[1,5] ? No

D[4,2] > D[4,1]+D[1,2] ? SIM D[4,2]= 2+5=7

...

60

Algoritmo de Floyd-Warshall
1
2
3
4
5

1
2
3
4
5

3 4

10

10

K=2

D[1,1] > D[1,2]+D[2,1] ? No


D[1,2] > D[1,2]+D[2,2] ? No
D[1,3] > D[1,2]+D[2,3] ? SIM D[1,3]= 5+1=6
D[1,4] > D[1,2]+D[2,4] ? No
D[1,5] > D[1,2]+D[2,5] ? No

D[3,1] > D[3,2]+D[2,1] ? SIM D[3,1]= 1+5=6

3 4

10

10

...

61

Algoritmo de Floyd-Warshall
1
2
3
4
5

1
2
3
4
5

3 4

10

10

3 4

10

10

K=3

D[1,1] > D[1,3]+D[3,1] ? No


D[1,2] > D[1,3]+D[3,2] ? No
D[1,3] > D[1,3]+D[3,3] ? No
D[1,4] > D[1,3]+D[3,4] ? No
D[1,5] > D[1,3]+D[3,5] ? No
D[2,1] > D[2,3]+D[3,1] ? No
D[2,2] > D[2,3]+D[3,2] ? No
D[2,3] > D[2,3]+D[3,3] ? No
D[2,4] > D[2,3]+D[3,4] ? SIM D[2,4]=1+1=2
D[2,5] > D[2,3]+D[3,5] ? No

D[4,2] > D[4,3]+D[3,4] ? SIM D[4,2]=1+1=2

...

62

Algoritmo de Floyd-Warshall
1
2
3
4
5

3 4

10

10

3 4

1 0 4 3 2 12
2 4 0 1 2 12
3 3 1 0 1 11
4 2 2 1 0 10
5 12 12 11 10 0

D[1,2] > D[1,4]+D[4,2] ? SIM


D[1,3] > D[1,4]+D[4,3] ? SIM
D[1,5] > D[1,4]+D[4,5] ? SIM
...
D[2,1] > D[2,4]+D[4,1] ? SIM
D[2,5] > D[2,4]+D[4,5] ? SIM

D[3,1] > D[3,4]+D[4,1] ? SIM


D[3,5] > D[3,4]+D[4,5] ? SIM

K=4
D[1,2]=2+2=4
D[1,3]=2+1=3
D[1,5]=2+10=12
D[2,1]=2+2=4
D[2,5]=2+10=12
D[3,1]=1+2=3
D[3,5]=1+10=11

D[5,1] > D[5,4]+D[4,1] ? SIM D[5,1]=10+2=12


D[5,2] > D[5,4]+D[4,2] ? SIM D[5,2]=10+2=12
D[5,3] > D[5,4]+D[4,3] ? SIM D[5,3]=10+1=11

63

Algoritmo de Floyd-Warshall
1

3 4

1 0 4 3 2 12
2 4 0 1 2 12
3 3 1 0 1 11
4 2 2 1 0 10
5 12 12 11 10 0
1

3 4

K=5

No houveram modificaes

1 0 4 3 2 12
2 4 0 1 2 12
3 3 1 0 1 11
4 2 2 1 0 10
5 12 12 11 10 0
64

Algoritmo de Floyd-Warshall

3 4

1 0 4 3 2 12
2 4 0 1 2 12
3 3 1 0 1 11
4 2 2 1 0 10
5 12 12 11 10 0

5
1

3
1

10

65

Pginas interessantes
All Minimum Routs Finder (Floyd Algorithm)
http://students.ceid.upatras.gr/~papagel/english/java_docs/allmin.htm

Floyd-Warshall All-Pairs Shortest Pairs Algorithm


http://www.pms.ifi.lmu.de/lehre/compgeometry/Gosper/shortest_path/shortest_path.html

66

Lista 2
Enunciado no Tidia->Repositrio->Listas->Lista 2->CR-lista02.pdf
PARTE 1: Isomorfismo de grafos
PARTE 2:
- Busca em profundidade
- Caminhos mnimos (algoritmo de Dijkstra)
- rvore geradora mnima atravs do algoritmo de Prim (lembra
Dijkstra)

67

Lista 2
Submisso:
Envie as respostas atravs do seguinte formulrio:
https://docs.google.com/forms/d/1sq-qnZnb3DrUxGxurLRMP7sND3VOTW7lfniDtRCYPFQ/viewform

Observaes:
Pode submeter inmeras vezes, apenas a ltima submisso ser avaliada.
Data limite: 23 de junho s 23:55

68

III. Atividade Prtica

69

Atividade Prtica
Questo nica:
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

70

Atividade Prtica
1
1
3
5

1
1

1
3

2
2

71

Atividade para casa

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.

72

Vous aimerez peut-être aussi