Algoritmos e Estruturas de Dados II

Documentos relacionados
Algoritmos e Estruturas de Dados II

Algoritmos em Grafos: Caminho Mínimo

Grafos Caminhos mais Curtos

Caminho Mínimo de Fonte Única em Grafos sem Pesos Negativos

Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade

Teoria dos Grafos Aula 24

Caminho Mínimo de Fonte Única em Grafos com Pesos Negativos Letícia Rodrigues Bueno

Grafos. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

Problema do Caminho Mínimo

Otimização em Grafos

ESTRUTURAS DISCRETAS (INF 1631) GRAFOS. 1. O que é um grafo? Defina um grafo orientado. Defina um grafo não-orientado.

Grafos Parte 1. Aleardo Manacero Jr.

Introdução à Ciência da Computação II

Desafios de Programação TCC Turma A-1

SCC-201 Introdução à Ciência de Computação II

Busca em Largura. Adaptado de Humberto C. B. Oliveira

Estruturas de Dados para Conjuntos Disjuntos: Union-find Letícia Rodrigues Bueno

GRAFOS Aula 07 Algoritmos de Caminho Mínimo: Bellman-Ford / Floyd-Warshall Max Pereira

Problema do Caminho Mais Curto. Problema do Caminho Mais Curto

Distâncias Mínimas. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Distâncias Mínimas 2014/ / 27

AULA 13 PROJETO E ANÁLISE DE ALGORITMOS. Problema do caminho mais curto de uma única origem em grafos Karina Valdivia Delgado

Algoritmo Floyd-Warshall. Problema dos caminhos mínimos entre todos os pares. Programação dinâmica

5COP096 TeoriadaComputação

Grafos: caminhos mínimos

Grafos representação e aplicações. Prof. Guilherme Tomaschewski Netto

Projeto e Análise de Algoritmos NP Completude Parte 2. Prof. Humberto Brandão

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Teoria da Complexidade Computacional

Grafos: árvores geradoras mínimas. Graça Nunes

Grafos: componentes fortemente conexos, árvores geradoras mínimas

Teoria dos Grafos Aula 23

Grafos. Notas. Notas. Notas. Notas. Caminhos mais curtos de única origem. Subestrutura ótima. Propriedades de caminhos mais curtos

Estruturas de Dados. Árvores AVL: Partes I e II. Desempenho de ABBs (Revisão)

Estruturas de Dados. Filas em que a prioridade de remoção não é cronológica. Maior prioridade não é do elemento que ingressou primeiro

SIN5013 Análise de Algoritmos e Estrutura de Dados - 1o Semestre de 2019

Estruturas de Dados Grafos

Algoritmos em Strings

Projeto e Análise de Algoritmos NP Completude. Prof. Humberto Brandão

PLANO DE DISCIPLINA DISCIPLINA: Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto de Algoritmos Programação Dinâmica. Prof. Humberto Brandão

INF1010 Lista de Exercícios 2

Teoria dos Grafos. Edson Prestes

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO Departamento de Ciências de Computação

Pesquisa Operacional. Teoria dos Grafos

GRAFOS Conceitos Básicos (Parte 1)

Eduardo Camponogara. DAS-9003: Introdução a Algoritmos

Grafos parte 2. Percorrendo um grafo. Correção. Eficiência. Percorrendo um Grafo. Percorrendo um Grafo. Percorrendo um Grafo

Grafos parte 2* Algoritmos e Estruturas de Dados II SCC-203 Rosane 2010/2011. *Baseado em material de professores dos anos anteriores

Estruturas de Dados. Pedro Ribeiro 2017/2018 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Estruturas de Dados 2017/ / 16

ESTRUTURAS DE DADOS. prof. Alexandre César Muniz de Oliveira. 1. Introdução 2. Pilhas 3. Filas 4. Listas 5. Árvores 6. Ordenação 7. Busca 8.

Programação Dinâmica I SCC0210 Algoritmos Avançados (2/2011) Lucas Schmidt Cavalcante

Projeto e Análise de Algoritmos. Método Guloso

Grafos - Introdução. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Grafos - Introdução 2014/ / 32

Demonstração. Relação invariante chave. Implementações do algoritmo de Prim. Implementação grosseira

Trabalho Prático 1. Valor: 1,0 pontos (10% da nota total) Data de Entrega: 02/05/2010

GRAFOS Aula 08 Árvore Geradora Mínima: Algoritmos de Kruskal e Prim-Jarnik Max Pereira

Teoria dos Grafos. Edson Prestes

Algoritmos em Grafos

Grafos: caminhos (matriz adjacência)

Classes, Herança e Interfaces

Algoritmos e Estruturas de Dados II LEIC

TEORIA: 60 LABORATÓRIO: 0

Complexidade Assintótica de Programas Letícia Rodrigues Bueno

Programação Dinâmica: Algoritmo de Bellman-Ford

Complexidade de Tempo e Espaço

Estrutura de Dados. Plano de Ensino. Vilson Heck Junior. Campus Lages. Instituto Federal de Santa Catarina

Algoritmos em Grafos COM11087-Tópicos Especiais em Programação I

Algoritmo de Dijkstra

Grafos: Busca. SCE-183 Algoritmos e Estruturas de Dados 2. Thiago A. S. Pardo Maria Cristina

Problemas de Fluxo em Redes

Transcrição:

Algoritmos e Estruturas de Dados II Grafos VI: Grafos Ponderados & Caminhos Mínimos (Bellman-Ford) Ricardo J. G. B. Campello Parte deste material é baseado em adaptações e extensões de slides disponíveis em http://ww3.datastructures.net (Goodrich & Tamassia).

Organização Algoritmos & Estruturas de Dados II Grafos Ponderados Adaptação da Estrutura de Dados Alternativa Propriedades Caminhos Mínimos Equações Funcionais Algoritmo Bellman-Ford 2

Grafos Ponderados Um grafo ponderado é um grafo que possui rótulos numéricos (pesos) associados a cada aresta. Possui ampla aplicabilidade. Existem algoritmos especializados para calcular o caminho mais curto (shortest path) entre quaisquer dois vértices do grafo. Por exemplo: Bellman-Ford, Floyd-Warshall, Dijkstra, entre outros. O mesmo vale para a árvore geradora mínima: Prim, Prim-Jarník, Kruskal,... HNL SFO LAX DFW ORD LGA MIA PVD 3

Grafos Ponderados Estrutura de Dados Simples:

Caminhos Mais Curtos Dado um grafo simples, direcionado e ponderado, e dois vértices u e v, tais que v é alcançável a partir de u, queremos encontrar um caminho de custo (distância) total mínimo entre u e v. Custo de um caminho é a soma total dos pesos das suas arestas. Exemplo: Caminho mais curto entre Providence (PVD) e Honolulu (HNL). Principais Aplicações Comunicações. Transporte. HNL SFO LAX DFW ORD LGA MIA 5 PVD

Propriedades Propriedade 2 (a) Qualquer grafo não direcionado ou misto pode ser transformado em direcionado (digrafo puro) substituindo cada aresta não direcionada por duas em direções opostas; e (b) Grafos não ponderados podem ser considerados ponderados com pesos unitários. 5 3 2 5 3 6

Propriedades Propriedade 2 (Princípio de Otimalidade) Se não existirem ciclos direcionados com custo total negativo (diciclos negativos), então: Um sub-caminho simples de um caminho mais curto simples é também um caminho mais curto simples por si só. Em outras palavras, se um vértice x faz parte do caminho mais curto de um outro vértice u até um terceiro vértice v, então o sub-caminho entre u e x é o caminho mais curto entre esses dois vértices. 0 2 2 3 3 2-25 Presença de Diciclo Negativo: -2-3 é o caminho simples ótimo, mas -2 não é (ver -3--2). 2-00 Ausência de Diciclo Negativo: --2-3 é caminho simples ótimo, assim como são -, --2, -2, -2-3 e 2-3. 2 3

Propriedades Propriedade 3 A propriedade 2 implica que existe uma árvore de caminhos mais curtos simples de um vértice inicial até todos os outros vértices. Exemplo (a partir de PVD): HNL SFO LAX DFW ORD LGA MIA PVD 8

s Equações Funcionais i i 2 Caso um-para-todos (one-to-all): k i 3 A propriedade 2 implica um conjunto de equações necessárias e suficientes para a otimalidade de caminhos mais curtos. Seja c i,k o peso da aresta direcionada (i, k) ligando algum vértice i ao vértice k e d[k] a distância do caminho mais curto entre um vértice de origem s e um vértice qualquer k do grafo. Então: d[s] = 0 d[k] = min i {d[i] + c i,k : (i, k) existe} k s PS. d[k] é definida como d[k] = se não existe caminho entre s e k. 9

Algoritmo Bellman-Ford (one-to-all) As equações funcionais claramente apresentam uma relação de interdependência recursiva entre os valores de d[k] para os diferentes vértices, que impedem uma solução direta. A idéia do algoritmo Bellman-Ford é avaliar repetidamente as equações utilizando os valores da iteração precedente. Passo 0 (Inicialização): Dado o vértice de origem s, inicialize as distâncias como: d 0 [k] = 0 se k = s. caso contrário. e o contador de iterações como t =. Passo (Atualização): Para cada vértice k s faça: d t [k] = min i { d t [i] + c i,k : (i, k) existe } Se d t [k] < d t [k] faça também p[k] = arg min i { d t [i] + c i,k : (i, k) existe } Passo 3 (Critérios de Parada): Termine se d t [k] = d t [k] para todos os vértices k ou se t = n (iterações = no. de vértices do grafo). Caso contrário faça t = t + e volte para o Passo. 0

Algoritmo Bellman-Ford Encontrando os Caminhos Ótimos: Os valores d[k] representam os custos ou distâncias dos caminhos mais curtos a partir da origem até qualquer vértice k. Os caminhos em si podem ser recuperados através dos valores auxiliares p[k] também computados no passo do algoritmo. Para um dado vértice k, p[k] é simplesmente o índice ou rótulo do vértice que precede k no caminho ótimo da origem s até k. Para obter o caminho ótimo de s até k basta portanto seguir os índices p a partir de k retroativamente até s. Exemplo: d[] = 0 0 2 3 d[3] = 0 3 d[] = 2 d[2] = 3 p[2] = p[3] = p[] = 3 valores finais

Algoritmo Bellman-Ford Exemplo: por simplicidade apenas os valores d são mostrados (nos vértices). 8 0-2 7 8 0-2 8 7-2 3 9-2 5 3 9-2 5 5 8 0-2 8 7-2 -2 3 9 9 5-5 8 0-2 7-2 - 3 9-2 5 9

Algoritmo Bellman-Ford Justificativa: O que garante que os valores d t [k] são ótimos? Alguns vértices estão aresta distantes da origem ao longo de um caminho ótimo, outros 2 arestas distantes ao longo de um caminho ótimo, outros 3 arestas, e assim por diante. Nenhum vértice está mais que n arestas distante ao longo de um caminho ótimo (sempre simples na ausência de diciclos negativos). O valor inicial para a origem, d t [s] = 0 em t = 0, é correto e não se altera nas iterações posteriores. Após a iteração t =, todos os valores que dependem diretamente deste, ou seja, aqueles referentes aos vértices apenas aresta distante de s ao longo de um caminho ótimo, estarão corretos em definitivo. No geral, após t = i, todos os valores referentes aos vértices i arestas distantes de s ao longo de um caminho ótimo terão convergido. Logo, o problema estará resolvido em no máximo n iterações. 3

Algoritmo Bellman-Ford Encontrando Diciclos Negativos: A justificativa anterior garante que se o grafo não contiver diciclos negativos todos os valores terão convergido no máximo após t = n. De fato, se houver um diciclo negativo alcançável a partir do vértice de origem s, então a cada iteração o algoritmo indefinidamente encontrará um caminho de ainda menor custo através do diciclo e os valores nunca irão convergir. Portanto, se algum valor ainda se alterar na iteração t = n, então o grafo necessariamente possui um diciclo negativo. Logo, o algoritmo Bellman-Ford pode também ser utilizado para detectar a presença de diciclos negativos em grafos.

Algoritmo Bellman-Ford Complexidade: Atribuição de valores iniciais aos n vértices: O(n) A cada iteração, cada uma das m arestas direcionadas é verificada uma vez (no vértice de entrada) para atualização de valores: O(m) Como são n iterações: O(nm + n) O(nm) Algoritmo BellmanFord(G, s) Entrada: Grafo G e um vértice s de G Saída: Grafo G modificado com cada vértice v incluindo a distância e o vértice predecessor do caminho mais curto a partir de s ; ou null se G contém diciclos negativos. para todo v vertices(g) se v = s v.distance 0 senão v.distance v.parent null para t até n faça flag_stop para todo v vertices(g) para todo e incomingedges(g, v) z opposite(g, v, e) se z.distance + e.weight < v.distance v.distance z.distance + e.weight v.parent z flag_stop 0 se flag_stop = retorne G retorne null

Exercícios. Modifique o princípio de otimalidade, as equações funcionais e o pseudo-código de Bellman-Ford para encontrar os caminhos máximos (longest paths) ao invés dos caminhos mínimos. 2. Seja um digrafo simples sem diciclos negativos. Se um dado vértice k desse digrafo não for alcançável a partir de um outro vértice s, qual será o valor final de d[k] após a execução de Bellman-Ford com origem em s? Justifique. Algoritmos & Estruturas de Dados II 3. Qual tipo de grafo leva o tempo de execução de Bellman-Ford ao pior caso possível? Justifique e apresente qual é esse tempo de pior caso em termos de complexidade assintótica.. Descreva um método que utilize Bellman-Ford para obter os caminhos mínimos a partir de qualquer vértice para qualquer outro vértice alcançável de um grafo (algoritmo tipo all-to-all). Qual a ordem de complexidade desse método? 6

Exercícios 5. Desenhe um grafo não-direcionado simples, conexo e ponderado com 8 vértices e 6 arestas. Transforme esse grafo em um digrafo e exercite o algoritmo Bellman-Ford executando-o manualmente a partir de diferentes origens: Algoritmos & Estruturas de Dados II Apresente cada execução através de duas matrizes, uma com as distâncias (d[k]) e outra com os vértices predecessores nos caminhos mínimos (p[k]). Nessas matrizes, cada coluna k corresponde a um vértice do grafo e cada linha t corresponde a uma iteração do algoritmo. 6. Implemente o algoritmo Bellman-Ford em C, com base na estrutura de dados para grafos alternativa discutida em aula. Valide sua implementação comparando os resultados de execução com aqueles obtidos manualmente no Exercício 5. 7

Referências M. T. Goodrich and R. Tamassia, Data Structures and Algorithms in C++/Java, John Wiley & Sons, 2002/2005. N. Ziviani, Projeto de Algoritmos, Thomson, 2a. Edição, 200. T. H. Cormen, C. E. Leiserson, and R. L. Rivest, Introduction to Algorithms, MIT Press, 2 nd Edition, 200. Algoritmos & Estruturas de Dados II S. Skiena e M. Revilla, Programming Challenges: The Programming Contest Training Manual, Springer-Verlag, 2003. 8