APLICAÇÕES DE BUSCA EM GRAFOS

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

Busca em Profundidade e em Largura

Grafos: caminhos mínimos

Projeto e Análise de Algoritmos

Grafos: Busca. Algoritmos e Estruturas de Dados 2. Graça Nunes

Alguns probleminhas...

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

PERCURSOS. André Falcão, Carlos Augusto, Rafael Broédel e Lucas Dipré

BCC204 - Teoria dos Grafos

Busca em largura. Algoritmos em Grafos. Marco A L Barbosa

Grafos: aplicações. Grafos: árvore geradora mínima

Estruturas de Dados Grafos

Teoria dos Grafos. Profa. Alessandra Martins Coelho

GRAFOS Aula 05 Algoritmos de percurso: busca em largura e profundidade Max Pereira

04 Grafos: caminhos e coloração SCC0503 Algoritmos e Estruturas de Dados II

As Pontes de Königsberg

Noções da Teoria dos Grafos. André Arbex Hallack

Aplicação do algoritmo de Dijkstra para o problema de roteamento da frota de táxis partindo de um ponto fixo

Busca em Profundidade. Busca em Grafos. Busca em Grafos. Busca em Grafos. Busca em Grafos. Os objetivos da busca são: Aplicações???

Teoria dos Grafos AULA 1

x y Grafo Euleriano Figura 1

GRAFOS BUSCAS E MENOR CAMINHO. Prof. André Backes

Teoria dos Grafos Aula 6

Comunicação e redes. Aula 2: Teoria dos Grafos Conceitos básicos. Professor: Guilherme Oliveira Mota.

Grafos Eulerianos e o Problema do Carteiro Chinês

Grafos - Representação

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

Estudo e Implementação de Algoritmos de Roteamento sobre Grafos em um Sistema de Informações Geográficas

Teoria dos Grafos AULA 1

Teoria dos Grafos. Valeriano A. de Oliveira, Socorro Rangel, Silvio A. de Araujo. Departamento de Matemática Aplicada

Teoria dos Grafos. Valeriano A. de Oliveira Socorro Rangel Departamento de Matemática Aplicada.

Noções da Teoria dos Grafos

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 8 Grafos. Estrutura de Dados 1

5COP096 TeoriadaComputação

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

Grafos: algoritmos de busca

Cap. 2 Conceitos Básicos em Teoria dos Grafos

Teoria dos Grafos. Motivação

Escola Básica e Secundária Mouzinho da Silveira. MACS 11.º Ano Problema do Caixeiro Viajante

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

Noções da Teoria dos Grafos. André Arbex Hallack

Estrutura de Dados e Algoritmos e Programação e Computadores II. Aula 10: Introdução aos Grafos

Projeto e Análise de Algoritmos

76) 1.1 Sim 1.2 Não 1.3 Não

Introdução. Introdução. Introdução. Distância euclidiana. Superfícies de custo

Capítulo 1. Aula Caminhos de Euler e Hamilton Caminhos de Euler e Circuitos

GRAFOS. Prof. André Backes. Como representar um conjunto de objetos e as suas relações?

Grafos I. Figura 1: Mapa de Königsberg

As pontes de Königsberg

1 Trajeto Euleriano. > Trajeto Euleriano 0/20

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

Teoria dos Grafos Aula 5

Buscas Informadas ou Heurísticas - Parte II

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

Problema do Caminho Mais Curto. Problema do Caminho Mais Curto

Problemas de Fluxo em Redes

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

Técnicas Inteligência Artificial

Grafos Parte 1. Aleardo Manacero Jr.

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

Grafos: caminhos mínimos

Capítulo 2- Modelos de grafos.

2. Desenhe o grafo orientado G = (X, Γ) para: 3. Em cada alínea dois grafos são iguais. Identifique-os. (a) (b) (c)

INF 1010 Estruturas de Dados Avançadas

Grafos Caminhos mais Curtos

Matemática Aplicada às Ciências Sociais- 11º ano (Versão: para o manual a partir de 2016/17)

Introdução à Teoria do Grafos Notas de aula. Socorro Rangel últimas atualizações: (2009), (2012)

Teoria dos Grafos. Maria Claudia Silva Boeres. UFES. Teoria dos Grafos

ALGORITMO DE DIJKSTRA

GRAFOS. Introdução Conceitos Fundamentais

Teoria da Complexidade Computacional

Matemática Discreta - Exercícios de Grafos

Alguns Problemas Clássicos Sobre Grafos

8. Árvores. Fernando Silva DCC-FCUP. Estruturas de Dados. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

8. Árvores. Fernando Silva. Estruturas de Dados DCC-FCUP. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

Pesquisa Operacional II. Professor João Soares de Mello

grafo nós vértices arcos arestas

Transcrição:

APLICAÇÕES DE BUSCA EM GRAFOS David Krenkel Rodrigues de Melo david.melo1992@gmail.com Prof. Leonardo Sommariva, Estrutura de Dados RESUMO: São inúmeras as aplicaçõe de grafos, bem como os problemas clássicos que são resolvidos por meio de técnicas que utilizam grafos. Será apresentada de forma sucinta, uma abordagem sob o contexto histórico, com o primeiro problema com aplicação em grafos, bem como alguns outros problemas clássicos e os principais métodos de busca, visando esclarecer sobre a importância dos grafos em aplicações práticas. Palavras-chave: Grafos. Busca em grafos. Aplicações de grafos. 1 INTRODUÇÃO A teoria dos grafos é relativamente recente, tendo seu início no século XVIII, nascendo de um problema muito conhecido, O Problema das Pontes de Königsberg, resolvido pelo matemático suíço Leonhard Euler (1707-1783). São inúmeras as aplicações de grafos, principalmente em jogos, bem como em redes de computadores, sistemas rodoviários, aéreos, ferroviários, dentre outros. Segundo GONÇALVES, A. L. (2007, 11), Qualquer situação que possoa ser modelada em função de estados e onde haja alteração de estados ao longo do tempo é possível de ser resolvida mediante a utilização de grafos. O presente artigo tem como objetivo apresentar alguns dos principais problemas resolvidos por grafos e as principais técnicas de busca, que incluem busca em profundidade, largura e menor caminho. Porém, não serão apresentados conceitos iniciais sobre grafos, apenas algumas de suas diversas aplicações em busca. Inicialmente, haverá uma breve abordagem histórica, com a apresentação do problema que, segundo (GONÇALVES, 2007), deu origem à teoria dos grafos. Em seguida, são apresentados outros problemas clássicos e alguns dos principais métodos de busca. 2 DESENVOLVIMENTO 2.1 Primeiro problema de grafos

No problema que deu origem à teoria dos grafos, conhecido como O Problema das Pontes de Königsberg, há uma cidade na Prússia, Königsberg há duas ilhas, com sete pontes interligando estas entre si e com as margens. Os moradores do local queriam poder passear pelas pontes de tal forma a percorrer todos os locais e passar apenas uma vez por cada ponte, sem deixar de passar por nenhuma das 7 pontes. Porém ninguém conseguia faze-lo, e acreditavam ser impossível realizar tal tarefa. O cenário é ilustrado pela figura 1. Figura 1: Representação das ilhas com as pontes de Königsberg Fonte: http://www.inf.ufpr.br/ Para resolver tal problema, o matemático suíço Leonhard Euler representou o trajeto como ilustrado na figura 2. Figura 2: Representação do cenário sob a forma de um grafo Fonte: http://www.inf.ufpr.br/ Mais do que resolver o problema, Euler generalizou-o e introduziu o conceito de caminho euleriano. Para ser considerado euleriano, um grafo deve possuir um caminho que

passe por todos as arestas apenas uma vez. Para tanto, todos os vértice deve possuir grau par, ou seja, possuir um número par de arestas conectadas a ele. Nesse caso, cada ponte é uma aresta, e cada ilha ou margem é um vértice. Logo, o grafo que representa o problema não pode ser considerado euleriano, pois todos os quatro vértices têm grau ímpar, e portanto não há caminho que passa por todas as pontes apenas uma vez. 2.2 Alguns problemas conhecidos 2.2.1 Problema do Caixeiro Viajante Neste que é um dos problemas mais conhecidos na teoria dos grafos, um caixeiro viajente deseja passar por um determinado número de cidades, para realizar suas vendas e voltar a cidade da qual partiu. Porém, para realizar tal tarefa, ele quer percorrer o menor caminho possível. Representando sob a forma de grafo, cada cidade é um vértice e cada trajeto entre duas cidades, uma aresta. A distância entre uma cidade e outra será o peso ou custo da aresta. 2.2.2 Problema do carteiro Chinês Também é um dos problemas mais conhecidos com aplicação em garfos. Segundo, (GONÇALVES, 2007), foi criado pelo matemático chinês Mei-Ko Kwan em 1962. Neste problema, um carteiro deve percorrer um roteiro todo dia, percorrendo todas as ruas pelo menos uma vez. Porém, ele deseja identificar o menor trajeto possível. Nesse caso, pode-se associar cada destino a um vértice e cada rua a uma aresta. GONÇALVES, A. L. (2007, 28) apresenta a seguinte abordagem para o problema: Se estivermos perante um grafo onde exista um trajecto que comece e acabe no mesmo vértice, passando por todas as arestas, então qualquer um desses trajectos serve pois o caminho mais curto será passar uma única vez por cada aresta. No caso de não existirem trajectos nessas condições, então para escolher qual o mais curto temos de associar a cada aresta do grafo um certo número, chamado peso, e por isso estamos perante um problema que lida com grafos pesados. Cada rua será representado por uma aresta e intersecções entre ruas corresponderão aos vértices. Para tratar o problema tal como foi colocado então a cada aresta associaremos um número que corresponda ao comprimento dessa rua. A partir daí, teremos um grafo ponderado e haverá a necessidade de utilizar algum dos métodos de custo mínimo, que serão apresentados mais adiante. dos principais. 2.3 Principais métodos de busca em grafos Existem diversos métodos de busca em grafos. A seguir, serão apresentados alguns

2.3.1 Busca em largura Busca em largura é um dos métodos mais simples de se pesquisar em um grafo. Dado um grafo G e um vértice de origem s, as arestas de G são exploradas sistematicamente até que seja descoberto cada vértice acessível a partir de s. A busca em largura recebe este nome porque expande a fronteira entre vértices descobertos e não descobertos uniformemente ao longo da extensão da fronteira. Isto é, o algoritmo descobre todos os vértices à distância k a partir de s, antes de descobrir quaisquer vértices à distância k+1. Segundo definição de CORMEM et al. (2002, p. 422), sobre a busca em largura: A busca em largura recebe este nome porque expande a fronteira entre vértices descobertos e não descobertos uniformemente ao longo da extensão da fronteira. Isto é, o algoritmo descobre todos os vértices à distância k a partir de s, antes de descobrir quaisquer vértices à distância k+1. A busca em largura produz uma árvore com raíz s e que possui todos os vértices acessíveis. Conceitualmente, ao invés de gerar uma árvore apenas, poderia gerar várias árvores, no caso de haverem mais de uma origem, mas como geralmente a busca em largura é utilizada em aplicações que calculam caminho mais curto entre dois pontos, isso não é muito comum. CORMEM et al. (2002, p. 422) Como forma de distinção sobre os vértices que já foram percorridos, é feita uma espécie de marcação com cores. Para tal, os vértices que já foram percorridos e estão em nível anterior são marcados com a cor preta. Aqueles que representam a fronteira entre vértices percorridos de não percorridos são marcados com a cor cinza. E os vértices que ainda não foram descobertos são marcados com a cor branca. As operações do algoritmo de busca em largura sobre um grafo não direcionado podem ser verificadas na figura 3. Figura 3: Representação das ilhas com as pontes de Königsberg

Fonte: CORMEM et al. (2002, p. 424) 2.3.2 Busca em profundidade Segundo CORMEM et al. (2002, p. 429), A estratégia seguida pela busca em profundidade é, como seu nome implica, procurar mais fundo no grafo sempre que possível. Nesse método, as arestas são percorridas partindo do vértice v que foi descoberto por último e que tenha arestas não descobertas a partir dele. Quando todas as arestas que partem de v foram descobertas, a busca reinicia para percorrer todos as arestas que partem do vértice a partir do qual v foi descoberto. A busca em profundidade pode gerar várias árvores, e vai depender do número de origens a partir das quais será repetida a busca. Da mesma forma que ocorre na busca em largura, na busca em profundidade, os vértices são marcados com cores para indicar seu estado. 2.4 Menor caminho Uma pessoa precisa partir de Florianópolis a Chapecó. Porém, certamente existem diversas formas de se fazer tal trajeto. Portanto, ele deseja encontrar o menor caminho possível, ou seja, o conjunto de trajetos que irá gerar o caminho mais curto. Será possível encontrar tal rota? Para resolver tal problema poderia se pensar em listar todas as possíveis rotas partindo de Florianópolis a Chapecó e verificar qual a mais curta, porém não é preciso muito para notar

que a quantidade de rotas possíveis nesse e em outros casos semelhantes seria enorme e, portanto, inviável. Existem algumas técnicas envolvendo grafos que certamente poderiam resolver problemas como este. Para isso, consideramos cada cidade, inclusive a origem e o destino, como vértices e as estradas que ligam as cidades, arestas. A distância entre as cidades será o peso das arestas, sendo nesse caso, um grafo ponderado. Para encontrar o menor caminho, deverá se encontrar o caminho que gere a menor soma de pesos possível. Porém, esse não é o único tipo de grafo em que se opera tal busca. Há também os casos de grafos não ponderados, onde o menor caminho será apenas o caminho que passe pelo menor número de vértices possível, e os casos em que o grafo possui arestas com peso negativo. A seguir, alguns algoritmos usados para descobrir o custo mínimo. 2.4.1 Algoritmo de Dijikstra É usado na resolução de problemas de menor caminho em grafos ponderados. Utiliza ideia semelhante à busca em largura. Primeiro, é necessário que seja definido um vértice de origem s e um de destino e. A cada vértice v, é atribuído um valor d[v], que armazena a distância entre v e a origem s. É também atribuído um valor π[v], que representa o vértice que deu origem à ligação com v, ou seja, a outra ponta da aresta.todos os vértices do grafo são armazenados em uma estrutura fila Q. O funcionamento do algoritmo de Dijikstra pode ser observado no exemplo da figura 4. Figura 4: Execução do algoritmo de Dijikstra em um grafo direcionado e ponderado. Fonte: CORMEM et al. (2002, p. 471) Inicialmente, como pode ser observado em (a), é atribuído o valor de 0 à d[s], já que este é a própria origem. Em seguida, é atribuído para todo v, d[v] = e π[v] recebendo nulo, inclusive s. Em seguida, é verificado qual a aresta com menor peso saindo do vértice corrente

u, que no início será o próprio s. Nesse exemplo, o vértice marcado será y, com peso 5, portanto tem-se que d[y] recebe 5 e, como pode ser visto em (b). Em (c), é feita novamente a verificação, dessa vez a partir de y. Como a aresta com menor peso partindo de y é a que liga y a z, com peso 2, e a soma será 7 (d[y]=5 + 2) e 7 é menor que 10, que é o peso da outra aresta que parte da origem, z será marcado, e tem-se d[z] recebe 7 e π[z] recebe y. Quando é feita a verificação novamente, o menor peso partindo de z é igual a 6, porém o custo do caminho nesse caso passa a ser 13 (d[z]=7 + 6), que é maior que o peso de outra aresta que parte de y ssomado ao valor de π[y]. Então, o caminho com custo até então muda, com peso 8 (d[y]=5 + 3) e π[t] recebe y, como pode ser observado em (d). Na próxima iteração, a verificação é feita mais uma vez, e a aresta que parte de t até o destino e tem peso 1, que somado a d[t]=8 equivale ao novo valor de d[e], já que 9 é menor que o atual valor de d[e], que é 13. Portanto, o menor caminho é 9. 2.4.2 Algoritmo de Bellman-Ford Ao contrário do Algoritmo de Dijikstra, que resolve apenas os casos de grafos com os pesos das arestas positivos, o Algoritmo de Bellman-Ford resolve também os casos com pesos negativos. De acordo com definição de CORMEM et al. (2002, p. 422): [...] O algoritmo de Bellman-Ford retorna um valor booleano indicando se existe ou não um ciclo de peso negativo acessível a partir da origem. Se existe tal ciclo, o algoritmo indica que não existe nenhuma solução. Se não existe tal ciclo, o algoritmo produz os caminhos mais curtos e seus pesos. 3 CONCLUSÃO São várias as aplicações práticas da teoria dos grafos, várias delas envolvendo algoritmos de busca. Desde aplicações em sistemas rodoviários, aéreos e ferroviários, até redes de computadores e jogos. E a utilização de formas de busca em tais problemas, pode ser muito útil. O presente artigo não tem como objetivo o aprofundamento em questões de implementação, nem de estudo de complexidade dos algoritmos, mas apresentar pricipalmente de forma conceitual e clara algumas das aplicações de tais algoritmos. Para um estudo mais aprofundado sobre a teoria dos grafos, existem boas obras que abrangem melhor questões de implementação e exploram mais a fundo os algoritmos apresentados. 4 REFERÊNCIAS

CORMEN, Thomas H.; LEISERSON, Charles E.; RIVEST, Ronald L.; STEIN, Clifford. Algoritmos: Teoria e Prática. 2ª ed. Rio de Janeiro: Elsevier, 2002. 916 páginas. GONÇALVES, A. L.Grafos: Aplicações ao Jogo. 2007. Grau: dissertação Universidade Portucalense, Portugal, 2007.