A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

CAMINHOS MAIS CURTOS EM GRAFOS

Apresentações semelhantes


Apresentação em tema: "CAMINHOS MAIS CURTOS EM GRAFOS"— Transcrição da apresentação:

1 CAMINHOS MAIS CURTOS EM GRAFOS

2 Caminho entre dois vértices usando busca em profundidade: cada ordem dos vértices produz um caminho distinto. A B C D E F Encontrar o caminho produzido pelo algoritmo de 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

3 [1,12] A Arestas Forward: B D C F C E A  E Arestas Back: F  A Não há arestas Cross B [2,11] C [3,10] [4,9] A D B [5,8] F C D E [6,7] E F Árvore de Busca em Profundidade Caminho: A, B, C, D, F, E Tamanho = 5

4 Encontrar o caminho produzido pelo algoritmo
de 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 [1,12] A [2,11] B A [3,10] C B [6,9] E D [4,5] C D [7,8] F E F Árvore de Busca em Profundidade Caminho: A, B, C, E Tamanho = 3

5 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 [1,12] A [4,11] [2,3] B A E [9,10] C D B [5,8] C D [6,7] F E F CROSS = C  F, C D, F  E, C E BACK = F A

6 BUSCA EM LARGURA Nivel 0 A A B E Nivel 1 B C D Nivel 2 C D F Nivel 3 E
Busca em largura sempre produz Caminho mais curto entre dois vértices, Independente da ordenação escolhida dos vértices.

7 Algoritmo Busca em Largura
Input: Grafo G (dirigido ou não), vértice S Output: para cada vértice v, dist(v) de S a v, distância do menor caminho entre S e v. Para todo vértice u O(|V|) dist(u) = infinito dist(S) = 0 Q = [S] (Q é uma fila) While Q ≠ O(|V|) u = eject(Q) Para cada aresta uv O(|E|) Cada aresta é testada 2 vezes se dist(v) = infinito inject(Q,v); dist(v) = dist(v) + 1 Complexidade = O(|V| + |E|)

8 Caminho mais curto em grafos com distâncias entre vértices
Nivel 0 A 8 A 2 8 B E Nivel 1 30 1 B 11 1 2 C D Nivel 2 C D 30 30 4 2 F Nivel 3 E F Busca em Largura a partir de A produz caminho com menor número de arestas : A BC F O custo deste caminho se contabilizarmos as distâncias entre as arestas é = 39

9 Caminho mais curto em grafos com distâncias entre vértices
2 A 8 2 2 8 1 B 11 B 11 1 2 C D 2 C D 30 4 1 30 4 2 E F E F Caminho mais curto: A  B  C  D  F Tem 4 arestas Custo = 20

10 Algoritmo para determinar caminho mais curto com distâncias
Algoritmo de Dijkstra

11 Filas com prioridade

12 Idéia do algoritmo Dijkstra
B 4 C 2 B 3 A 0 B inf C inf 4 A B 2 1 Fila com prioridade C

13 Idéia do algoritmo Dijkstra
B 4 C 2 B 3 A 0 B inf C inf 4 A B 2 1 Fila com prioridade C

14 Algoritmo de Dijkstra Input: 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. Para todo vértice u dist(u) = infinito prev(u) = nil dist(S) = 0 Constrói H = fila com prioridade contendo os vértices de G (prioridade é a menor distância a seus filhos) While H ≠ u = deletemin(H) Para cada aresta uv (arestas são ordenadas em ordem descrescente das distâncias) se dist(v) > dist(u) + dist(u,v) dist(v) = dist(u) + dist(u,v) prev(v) = u Ajusta_valor(H,v) (v é recolocado com sua prioridadade ajustada)


Carregar ppt "CAMINHOS MAIS CURTOS EM GRAFOS"

Apresentações semelhantes


Anúncios Google