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

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

João Pascoal Faria EGP, CPC, 2004/05

Apresentações semelhantes


Apresentação em tema: "João Pascoal Faria EGP, CPC, 2004/05"— Transcrição da apresentação:

1 João Pascoal Faria EGP, CPC, 2004/05
Algoritmo de Dijkstra João Pascoal Faria EGP, CPC, 2004/05

2 Conceito de Grafo Grafo G = (V, E) V — conjunto de vértices
E — conjunto de arestas (edges) - cada aresta é um par de vértices (v, w), em que v, w Î V - se o par for ordenado, o grafo diz-se dirigido, ou digrafo, senão diz-se não dirigido - um vértice w é adjacente a um vértice v se e só se (v, w) Î E - num grafo não dirigido com aresta (v, w) e, logo, (w, v) w é adjacente a v e v adjacente a w - as arestas têm por vezes associado um custo ou peso

3 Exemplos de Grafos Grafo não dirigido Grafo dirigido 1 2 1 2 3 4 5 3 4
6 7 6 7 G1= (Cruzamentos, Ruas) G2 = (Cidades, Estradas)

4 Problema do caminho mais curto
Dado um grafo pesado G = (V, E) e um vértice s, obter o caminho pesado mais curto de s para cada um dos outros vértices em G Exemplo: rede de computadores, com custo de comunicação e de atraso dependente do encaminhamento (o caminho mais curto de v7 para v6 tem custo 1) arestas com custo negativo complicam o problema ciclos com custo negativo tornam o caminho mais curto indefinido (de v4 a v7 o custo pode ser 2 ou -1 ou -7 ou …) Outro exemplo: se o grafo representar ligações aéreas, o problema típico poderá ser: Dado um aeroporto de partida obter o caminho mais curto para um destino não há algoritmo que seja mais eficiente a resolver este problema do que a resolver o mais geral

5 Problema do caminho mais curto
Para encontrar o caminho mais curto entre dois vértices s e t, não se conhece um algoritmo melhor do que começar por encontrar o melhor caminho entre s e todos os outros vértices s 2 v1 v2 4 1 10 3 v3 2 v4 v5 2 8 4 5 6 v6 v7 1 t Um grafo não dirigido pode ser tratado como um grafo com arestas simétricas v3 v4 v3 v4

6 Algoritmo de Dijkstra Entradas: V – conjunto de vértices
E – conjunto de arestas (edges), em que cada aresta é um par (v, w) de vértices de V Para todo o vértice vV, Adj(v) – conjunto de vértices adjacentes a v Para toda a aresta (v,w)E, cost(v,w) – custo da aresta (v,w), necessariamente > 0 s – vértice de partida (start) Saídas: dist(v) – distância do vértice de partida s ao vértice v pelo caminho mais curto (de menor custo total); é  se não existe nenhum caminho de s para v ant(v) – vértice anterior a v no caminho mais curto de s para v (para recuperar o caminho mais curto de s para v); não está definido quando dist(v) = 0 ou  Dados de trabalho: Q – fila (queue) de vértices a analisar, com o vértice com valor mínimo de dist() à cabeça

7 Algoritmo de Dijkstra para cada vértice vV fazer dist(v)  
dist(s)  0 Q  {s} enquanto Q  {} fazer v  vértice de Q com valor mínimo de dist() Q  Q \ {v} para cada vértice wAdj(v) fazer se dist(v) + cost(v,w) < dist(w) então dist(w)  dist(v) + cost(v,w) ant(w)  v Q  Q  { w} (podia já lá estar antes!)

8 Aplicação do algoritmo de Dijkstra
v1 v2 v3 v4 v5 v6 v7 4 2 10 6 1 5 3 8 s v1 v2 v3 v4 v5 v6 v7 4 2 10 6 1 5 3 8 s v1 v2 v3 v4 v5 v6 v7 4 2 10 6 1 5 3 8 9 v1 v2 v3 v4 v5 v6 v7 4 2 10 6 1 5 3 8 9

9 Aplicação do algoritmo de Dijkstra
v1 v2 v3 v4 v5 v6 v7 4 2 10 6 1 5 3 8 9 v1 v2 v3 v4 v5 v6 v7 4 2 10 6 1 5 3 8 2 1 3 3 9 8 5 v1 v2 v3 v4 v5 v6 v7 4 2 10 6 1 5 3 8 2 2 2 v1 v2 4 1 10 3 1 1 v3 2 v4 v5 3 3 2 3 3 8 4 5 6 v6 v7 1 8 6 5 6 5

10 Estruturas de dados em Visual Basic .Net
class Edge public orig as Vertex public dest as Vertex public cost as Double ... end class class Vertex public name as String public Adj as Edge() public dist as Double public ant as Vertex class Graph public V as Vertex() public E as Edge() public Q as Vertex() ' ou System.Collections.SortedList Nota: em vez de arrays (que são de tamanho fixo uma vez alocados) é mais fácil usar arrays de tamanho variável do .Net framework (System.Collections.ArrayList)


Carregar ppt "João Pascoal Faria EGP, CPC, 2004/05"

Apresentações semelhantes


Anúncios Google