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

Slides:



Advertisements
Apresentações semelhantes
Algoritmos de Caminho Mínimo em Grafos
Advertisements

Grafos eulerianos 1.
Algoritmo de Caminho Mínimo
CC/EC/Mestrado Teoria dos Grafos Grafos Hamiltonianos.
Árvores CC/EC/Mestrado Teoria dos Grafos ‏ 1.
2010/1 Teoria dos Grafos (INF 5037/INF2781) Grafos eulerianos.
Grafo k-conexo Seja k um inteiro positivo. Diz-se que um grafo G é k-conexo em vértices quando não existe corte de vértices de tamanho menor que k Analogamente,
Ford Fulkerson Teoria dos Grafos.
Grafos - Caminhos Caminhos Máximo / Mínimo:
Fluxo em Redes Prof. Ricardo R. Santos.
Exercícios PAA- Grafos
Pontes Seja (G) o número de componentes conexas de G. Uma ponte é uma aresta a tal que (G - a) > (G)
CC/EC/PPGI/UFES CC/EC/MestradoTeoria dos Grafos Algoritmo de Caminho Mínimo.
Grafo k-conexo Seja k um inteiro positivo. Diz-se que um grafo G é k-conexo em vértices quando não existe corte de vértices de tamanho menor que k.
Grafos Grafo G = (V, E) V — conjunto de vértices
Problemas de fluxo numa rede
Ronaldo Celso Messias Correia –
Teoria dos Grafos Caminhos e Noção de Grafos com pesos
Caminhamento em Grafos: Busca em Largura e Busca em Profundidade
Exercícios PAA- Grafos
Problema do menor Caminho
Algoritmo de PRIM para MST
Msc. Daniele Carvalho Oliveira
CAMINHOS MAIS CURTOS EM GRAFOS
Introdução a Algoritmos em Grafos.
Celso C. Ribeiro Caroline T. Rocha
Running time: O(n + m) BFS(G) 1 for every vertex s of G not explored yet 2 do Enqueue(S,s) 3 mark vertex s as visited 4 while S is not empty do 5 u ← Dequeue(S);
Algoritmos em Grafos Celso C. Ribeiro Caroline T. Rocha.
Grafos e Teoria da Complexidade Professor: Fabio Tirelo
Grafos Anjolina Grisi de Oliveira 2005
Programação Dinâmica Profa. Sandra de Amo Bacharelado em Ciência da Computação – UFU Disciplina de Análise de Algoritmos.
Grafos Anjolina Grisi de Oliveira 2007
Algoritmo de Dijkstra.
Grafos e Teoria da Complexidade Professor: Fabio Tirelo
1 RCO2 Redes Locais: Interligação de LANs com roteadores.
Universidade de Brasília Laboratório de Processamento de Sinais em Arranjos 1 Circuitos Elétricos 2 Circuitos Elétricos Aplicados Prof. Dr.-Ing. João Paulo.
Teoria dos Grafos Geração de Valores aleatórios
Algoritmo de Pesquisa em Profundidade
Finding community structure in very large networks
EGP, CPC, 2004/05 Manipulação de strings, colecções e ficheiros em Visual Basic .Net João Pascoal Faria Dezembro de 2004.
INTRODUÇÃO Estendendo LANs.
P3 - Fluxo máximo numa rede de transporte
Algoritmo de bellman-ford
Algoritmo de Floyd-Warshall
Métodos Formais em Engenharia de Software Utilização da Ferramenta VDMTools Lite João Pascoal Faria
Geração automática de testes de caixa branca
PROGRAMAÇÃO ORIENTADA A OBJETO - JAVA
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
Prof. Wellington Franco
Representação de um Algoritmo na Forma de Pseudocódigo
FEUP/LEEC Algoritmos e Estruturas de Dados 2001/2002
Algoritmo de Bellman-Ford para cálculo de custo mínimo em grafo
EGP, CPC, 2004/05 Problema e Algoritmos de Colocação de Professores
CAMINHOS CRÍTICOS. Os grandes projetos requerem uma calendarização de execução, um acompanhamento constante e uma perfeita coordenação das tarefas inerentes.
Algoritmos de Redes Rota mais curta Árvore de ramificação mínima
Algoritmos e Técnicas CEFET/RN.
Algoritmo de Johnson Estrutura de Dados II
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
Lógica de Programação Significa o uso correto das leis do pensamento e de processos de raciocínio para a produção de soluções logicamente válidas e coerentes,
Grafos eulerianos 1.
TCP/IP CRD Filipe Pacheco.
Arranjo Físico Industrial
Introdução à NP-completude
MODELO DE REFERÊNCIA OSI
Grafos: Conceitos Básicos
Introdução a lógica de programação Tipos de algoritmos.
Vetores.
Ordenação por Comparação
Prof. Rafael Mesquita Algoritmo de Dijkstra Prof. Rafael Mesquita
Transcrição da apresentação:

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

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

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)

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

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

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

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!)

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

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

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)