caminhos mais curtos em grafos. a b cd fe encontrar o caminho produzido pelo algoritmo de busca em...

14
CAMINHOS MAIS CURTOS EM GRAFOS

Upload: angelo-silvia

Post on 07-Apr-2016

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CAMINHOS MAIS CURTOS EM GRAFOS. A B CD FE Encontrar o caminho produzido pelo algoritmo de busca em profundidade, ligando os vértices A a E, usando a seguinte

CAMINHOS MAIS CURTOS EM GRAFOS

Page 2: CAMINHOS MAIS CURTOS EM GRAFOS. A B CD FE Encontrar o caminho produzido pelo algoritmo de busca em profundidade, ligando os vértices A a E, usando a seguinte

A

B

C D

FE

Encontrar o caminho produzido pelo algoritmode busca em profundidade, ligando os vértices A a E, usando a seguinte ordenação entre os vértices: A < B < C < D < E < F

Caminho entre dois vértices usando busca em profundidade: cada ordem dos vértices produz um caminho distinto.

Page 3: CAMINHOS MAIS CURTOS EM GRAFOS. A B CD FE Encontrar o caminho produzido pelo algoritmo de busca em profundidade, ligando os vértices A a E, usando a seguinte

A

B

C

D

F

E

[1,12]

[2,11]

[3,10]

[4,9]

[5,8]

[6,7]

Árvore de Busca em Profundidade

Arestas Forward: B D C F C E A E

Arestas Back: F A

Não há arestas Cross

A

B

C D

FE

Caminho: A, B, C, D, F, ETamanho = 5

Page 4: CAMINHOS MAIS CURTOS EM GRAFOS. A B CD FE Encontrar o caminho produzido pelo algoritmo de busca em profundidade, ligando os vértices A a E, usando a seguinte

A

B

C D

FE

Encontrar o caminho produzido pelo algoritmode busca em profundidade, ligando os vértices A a E, usando a seguinte ordenação entre os vértices: A < B < C < E < D < F

A

B

C

E D

F

[1,12]

[2,11]

[3,10]

[4,5][6,9]

[7,8]

Árvore de Busca em ProfundidadeCaminho: A, B, C, ETamanho = 3

Page 5: CAMINHOS MAIS CURTOS EM GRAFOS. A B CD FE Encontrar o caminho produzido pelo algoritmo de busca em profundidade, ligando os vértices A a E, usando a seguinte

EXISTE ORDENAÇÃO DE VÉRTICES QUE PRODUZ CAMINHO MAIS CURTO ENTRE A e E ? SIM !!

A < E < B < D < C < F CAMINHO [A,E]TAMANHO = 1

A

B

C D

FE

A

E B

D

F

C

[1,12]

[2,3][4,11]

[5,8]

[6,7]

[9,10]

CROSS = C F, C D, F E, C EBACK = F A

Page 6: CAMINHOS MAIS CURTOS EM GRAFOS. A B CD FE Encontrar o caminho produzido pelo algoritmo de busca em profundidade, ligando os vértices A a E, usando a seguinte

BUSCA EM LARGURA

A

B

C D

FE

Busca em largura sempre produz •Caminho mais curto entre dois vértices, Independente da ordenação escolhida dos vértices.

A

B E Nivel 1

Nivel 0

C D

F

Nivel 2

Nivel 3

Page 7: CAMINHOS MAIS CURTOS EM GRAFOS. A B CD FE Encontrar o caminho produzido pelo algoritmo de busca em profundidade, ligando os vértices A a E, usando a seguinte

Algoritmo Busca em LarguraInput: Grafo G (dirigido ou não), vértice SOutput: para cada vértice v, dist(v) de S a v, distância do menor caminho entre

S e v.

1. Para todo vértice u O(|V|) 2. dist(u) = infinito3. dist(S) = 04. Q = [S] (Q é uma fila) 5. While Q ≠ O(|V|)6. u = eject(Q)7. Para cada aresta uv O(|E|) Cada aresta é testada 2 vezes8. se dist(v) = infinito9. inject(Q,v);10. dist(v) = dist(v) + 1

Complexidade = O(|V| + |E|)

Page 8: CAMINHOS MAIS CURTOS EM GRAFOS. A B CD FE Encontrar o caminho produzido pelo algoritmo de busca em profundidade, ligando os vértices A a E, usando a seguinte

Caminho mais curto em grafos com distâncias entre vértices

A

B

C D

FE

3082

1112

2304

A

B E Nivel 1

Nivel 0

C D

F

Nivel 2

Nivel 3

Busca em Largura a partir de Aproduz caminho com menor númerode arestas : A BC F

O custo deste caminho se contabilizarmos as distâncias entre as arestas é = 39

8

1

30

Page 9: CAMINHOS MAIS CURTOS EM GRAFOS. A B CD FE Encontrar o caminho produzido pelo algoritmo de busca em profundidade, ligando os vértices A a E, usando a seguinte

Caminho mais curto em grafos com distâncias entre vértices

A

B

C D

FE

82

1112

2304

Caminho mais curto: A B C D F Tem 4 arestas Custo = 20

A

B

C D

FE

82

11

1

2

2

304

1

Page 10: CAMINHOS MAIS CURTOS EM GRAFOS. A B CD FE Encontrar o caminho produzido pelo algoritmo de busca em profundidade, ligando os vértices A a E, usando a seguinte

Algoritmo para determinar caminho mais curto com distâncias

Algoritmo de Dijkstra

Page 11: CAMINHOS MAIS CURTOS EM GRAFOS. A B CD FE Encontrar o caminho produzido pelo algoritmo de busca em profundidade, ligando os vértices A a E, usando a seguinte

Filas com prioridade

Page 12: CAMINHOS MAIS CURTOS EM GRAFOS. A B CD FE Encontrar o caminho produzido pelo algoritmo de busca em profundidade, ligando os vértices A a E, usando a seguinte

Idéia do algoritmo Dijkstra

A B

C

4

2 1

A 0B infC inf

Fila com prioridade

B 4C 2

B 3

Page 13: CAMINHOS MAIS CURTOS EM GRAFOS. A B CD FE Encontrar o caminho produzido pelo algoritmo de busca em profundidade, ligando os vértices A a E, usando a seguinte

Idéia do algoritmo Dijkstra

A B

C

4

2 1

A 0B infC inf

Fila com prioridade

B 4C 2

B 3

Page 14: CAMINHOS MAIS CURTOS EM GRAFOS. A B CD FE Encontrar o caminho produzido pelo algoritmo de busca em profundidade, ligando os vértices A a E, usando a seguinte

Algoritmo de DijkstraInput: Grafo G (dirigido ou não), vértice S, cada aresta e tem uma dist(e)

associada.Output: para cada vértice v, dist(v) de S a v, distância do menor caminho entre S

e v.1. Para todo vértice u2. dist(u) = infinito3. prev(u) = nil 4. dist(S) = 05. Constrói H = fila com prioridade contendo os vértices de G (prioridade é a

menor distância a seus filhos) 6. While H ≠7. u = deletemin(H)8. Para cada aresta uv (arestas são ordenadas em ordem descrescente das

distâncias)9. se dist(v) > dist(u) + dist(u,v)10. dist(v) = dist(u) + dist(u,v)11. prev(v) = u12. Ajusta_valor(H,v) (v é recolocado com sua prioridadade ajustada)