t:teoria_dos_grafos
Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
| Ambos lados da revisão anteriorRevisão anteriorPróxima revisão | Revisão anterior | ||
| t:teoria_dos_grafos [2022/08/27 04:08] – Wesley Peres | t:teoria_dos_grafos [2022/08/27 13:22] (atual) – Wesley Peres | ||
|---|---|---|---|
| Linha 1: | Linha 1: | ||
| + | ====== Teoria dos Grafos ====== | ||
| + | Grafos são uma área da matemática discreta que estuda a relação entre os objetos de um conjunto. Um grafo G é uma estrutura abstrata formada por dois conjuntos: o primeiro conjunto V(G), finito e não vazio, tem seus elementos chamados de vértices. Vértices costumam ser representados como u, v w, ou vi, vj. O segundo conjunto, E(G), é formado pelos pares não ordenados dos vértices de V(G), que podem ser entendidos como arestas. Arestas, em geral, são representadas pelas letras a, b, c, d ou ei, ej. A representação usual de um grafo é G(V, E), que indica a sua natureza composta por dois conjuntos. | ||
| + | |||
| + | Uma vez que o conjunto de arestas é formado pelos subconjuntos de pares de vértices, se V(G) tem n elementos, então, por análise combinatória, | ||
| + | |||
| + | Um outro conceito relacionado a grafos é o de valência ou grau. A valência de um vértice é a quantidade de arestas que incidem sobre ele. Se há um laço, a aresta é contada duas vezes. Em dígrafos (grafos nos quais a aresta tem sentido) existem o grau de entrada – a quantidade de arestas que apontam para um vértice - e o grau de saída – a quantidade de arestas que saem de um vértice. | ||
| + | |||
| + | Grafos frequentemente são representados como diagramas nos quais os vértices representam pontos ou círculos e as arestas representam arcos que unem os pontos. Diagramas são úteis porque permitem visualizar esquematicamente as relações entre os objetos de um conjunto. Por isso, grafos são úteis para modelar todo tipo de problema prático. | ||
| + | |||
| + | Por exemplo, grafos estão presentes na representação da Web (ligação física entre os nós da rede), de redes de comunicação, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Não se deve confundir a representação de um grafo (geométrica ou mesmo algébrica) com o grafo, que é uma estrutura abstrata. A figura 1 à esquerda simboliza um grafo com os vértices V = {1, 2, 3, 4, 5, 6} e as arestas E = { {1,2}, {1,5}, {2,3}, {2,5}, {3,4}, {4,5}, {4,6} }. Existem representações alternativas para grafos, como a representação por intersecção, | ||
| + | |||
| + | Com a noção de grafo obtida, pode-se definir outros conceitos importantes relacionados. O conceito de passeio diz respeito à sucessão de vértices e arestas percorridos para se chegar a um vértice u partindo de um vértice w. Desta maneira, um passeio pode ser representado por p(w, u) = v0, e1, v1, e2, v2, ..., ek, vk. São três as condições que precisam ser atendidas para um passeio existir: | ||
| + | |||
| + | * w = v0 e u = vk. | ||
| + | * Existe pelo menos uma aresta. | ||
| + | * Para 1 <= i <= k a aresta ei incide sobre vi-1 e vi. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | As condições acima apenas significam que w e u devem estar conectados entre si por pelo menos uma aresta ou que uma cadeia de arestas deve necessariamente conduzir de um vértice a outro. É possível que alguns vértices e arestas se repitam em um passeio. No grafo da figura 2 ao lado, para se chegar a d partindo de a, por exemplo, pode-se seguir o passeio e9, c, e2, b, e6, a, e9, c, e8, d. | ||
| + | |||
| + | Em um grafo simples, não pode haver mais de uma aresta para um mesmo par de pontos, isto é, não pode haver arestas paralelas. Outra restrição é que uma aresta não pode ter como vértices um mesmo vértice, ou seja, não pode existir laço. | ||
| + | |||
| + | Um outro conceito importante é o de caminho. Caminho é toda sequência de vértices tal que para todo vértice existe uma aresta que o conecta ao vértice seguinte. Vértices e arestas podem ser repetidos. No grafo da figura 1, a sequência {1, 2, 5, 1, 2, 3} é um caminho. | ||
| + | |||
| + | O comprimento de um caminho é a quantidade de arestas do caminho, sendo que uma aresta pode ser contada duas ou mais a vezes, a depender de quantas vezes se passa por ela. Também pode-se determinar o custo de um caminho quando existem números associados a cada aresta, somando-se os números das arestas percorridas. | ||
| + | |||
| + | Outros conceitos relevantes relacionados a caminhos são dispostos a seguir: | ||
| + | |||
| + | * **Caminho Euclidiano: | ||
| + | * **Caminho Hamiltoniano: | ||
| + | * **Caminhos independentes: | ||
| + | * **Ciclo:** é um caminho cujo vértice final é o mesmo que o vértice inicial. Os ciclos ainda podem ser subdivididos em: | ||
| + | * **Laços:** ciclos de comprimentos 1, com somente um vértice. | ||
| + | * **Ciclos simples:** possuem comprimento de no mínimo 3 arestas e o vértice inicial só é atingido novamente no fim do caminho. | ||
| + | * **Ciclo acíclico: | ||
| + | |||
| + | ===== História ===== | ||
| + | ---- | ||
| + | |||
| + | O primeiro grafo conhecido foi criado por Leonhard Euler em 1736, quando este propôs uma solução ao problema das pontes de Königsberg. Situada Prússia do século XVIII, hoje denominada Kaliningrado e pertencente à Rússia, Königsberg possuía duas ilhas que se conectavam entre si e com a parte continental através de sete pontes. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Discutia-se na cidade o seguinte problema: seria possível passar por todas as sete pontes sem passar por uma ponte mais de uma vez? Euler representou o problema na forma de um grafo, tomando as intersecções entre as pontes como pontos e as pontes como arestas. Ele então percebeu que só seria possível atingir o objetivo se houvesse no máximo dois pontos com quantidade ímpar de arestas. Isso se deve ao fato de que de cada ponto deveriam partir duas arestas, uma para entrar e outra para sair. Os pontos ímpares se referem ao pontos do início e do fim do percurso, pois estes não precisam de uma entrada e de uma saída, respectivamente. | ||
| + | |||
| + | Inicialmente, | ||
| + | |||
| + | Com o desenvolvimento dos computadores após a Segunda Guerra Mundial, tornou-se possível utilizar algoritmos para processar grafos. Alguns algoritmos importantes que trabalham com grafos são o algoritmo de Dijkstra, o algoritmo de Kruskal, o algoritmo do vizinho mais próximo e o algoritmo de Prim. O novo recurso da computação acabou por amplificar a influência da teoria dos grafos para as mais diversas áreas. | ||
| + | |||
| + | ===== Tipos de grafos ===== | ||
| + | ---- | ||
| + | |||
| + | Apesar de grafos simples não tolerarem laços ou arestas paralelas, essas características e mesmo outras podem estar presentes em outros tipos de grafos. É a reunião de determinadas características em um grafo que determina o seu tipo, sendo possível a um grafo assumir um ou mais tipos ao mesmo tempo. Por exemplo, um grafo com laços e arestas paralelas é denominado **multigrafo**. | ||
| + | |||
| + | Também é possível que arestas que conectam vértices diferentes tenham sentido. Quando isso ocorre, é dito que esse grafo é um **dígrafo** ou um grafo direcionado. A representação s, t : E -> V indica que s(e) é o vértice de origem e t(e) é vértice alvo para o qual a aresta aponta. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | A figura acima traz vários conceitos relacionados a grafos. Em a3, observa-se uma aresta do tipo laço. Em a2 e a1, verifica-se a presença de arestas paralelas. As retas a4 e a5 são retas adjacentes pois compartilham o mesmo vértice, enquanto que os vértices 1 e 2 são adjacentes pois são unidos pela reta a1. Além disso, o vértice 5 exemplifica o vértice isolado, não unido a nenhum outro por um arco. | ||
| + | |||
| + | Um grafo simples também pode ser classificado como um **grafo completo** se todos os seus pares de vértices forem adjacentes, ou seja, a quantidade de arestas é exatamente o número máximo, n(n-1) / 2. Alguns outros tipos são enunciados abaixo: | ||
| + | |||
| + | * **Grafo bipartido: | ||
| + | * **Grafo rotulado:** quando se associa a uma aresta ou a um vértice um rótulo, que pode ser uma letra, um nome ou um número. Neste último caso, também é possível chamar o grafo de valorado. Tais valores numéricos podem ser entendidos como o custo da reta ou do ponto e são utilizados em problemas de rota ótima, como por exemplo, no problema do caixeiro viajante. Este é um problema de otimização que busca determinar o menor trajeto para se percorrer um determinado número de cidades, passando somente uma vez por cada uma. Fica claro que esse problema pode ser modulado por grafos, nos quais as arestas simbolizam as estradas, e os vértices, as cidades. | ||
| + | * **Grafo vazio:** quando o conjunto de arestas é vazio. | ||
| + | * **Grafo trivial:** possui somente um vértice e o conjunto E é vazio. | ||
| + | * **Grafo regular:** todos os vértices estão conectados ao mesmo número de vértices, ou seja, possuem a mesma valência. | ||
| + | * **Pseudografo: | ||
| + | * **Grafo conexo:** quando é possível chegar a qualquer vértice partindo-se de qualquer vértice. | ||
| + | * **Árvore: | ||
| + | * **Floresta: | ||
| + | |||
| + | ===== Representação de grafos no computador ===== | ||
| + | ---- | ||
| + | |||
| + | Grafos podem ser representados na forma geométrica ou na forma algébrica. Esta última forma é a utilizada para armazenar grafos em computadores. As estruturas de dados utilizadas na representação algébrica de um grafo dependem da estrutura do grafo e do algoritmo que irá operar sobre ele, mas, no geral, utiliza-se listas e matrizes. Listas costumam ser utilizadas em grafos esparsos, aqueles nos quais o número de arestas é pequeno. Matrizes são utilizadas em grafos densos, nos quais a quantidade de arestas se aproxima ou é igual à maior quantidade possível. Contudo, esta última estrutura demanda maior memória para armazenar o grafo. | ||
| + | |||
| + | Existem dois tipos de listas comuns. A lista de adjacência associa a um vértice todos os outros vértices com os quais ele tem uma aresta. O outro tipo é a lista de incidência, | ||
| + | |||
| + | As matrizes possuem tipos análogos: matrizes de incidência e matrizes de adjacência. Nas matrizes de adjacência, | ||
| + | |||
| + | Se o grafo é direcionado, | ||
| + | |||
| + | Como já foi exposto, alguns grafos podem atribuir valores numéricos a arestas ou vértices. Grafos assim são representados algebricamente por uma matriz de custo, na qual os vértices são dispostos em linhas e em colunas. Assim, se um par de vértices {i, j} ∈ E(G), atribui-se o valor correspondente à posição aij da matriz A = [aij]. Se o par de vértices não possui uma aresta incidente, então, atribui-se 0 ou ∞. Tais valores associados podem indicar distância, fluxo, capacidade, etc. | ||
| + | |||
| + | ===== Problemas Clássicos ===== | ||
| + | ---- | ||
| + | |||
| + | Já foram apresentados o problema das pontes de Königsberg e o problema do caixeiro viajante. Existem outros problemas famosos, como o problema do Teorema de quatro cores, que se originou da discussão a respeito de quantas cores são necessárias para se colorir cada região de um mapa com uma cor diferente das cores das regiões adjacentes. | ||
| + | |||
| + | A seguir, uma lista de outros problemas famosos: | ||
| + | |||
| + | * Problemas de conjuntos de grafos: problema do conjunto independente, | ||
| + | * Problema do caminho mínimo | ||
| + | * Árvore de extensão mínima | ||
| + | * Problemas de Roteamento: problema da inspeção de rotas | ||
| + | * Problema de fluxo de rede: problema de fluxo máximo | ||
| + | |||
| + | ===== Referências ===== | ||
| + | ---- | ||
| + | |||
| + | - MELO, Gildson Soares. **Introdução à Teoria dos Grafos**. Orientador: Napoleón Caro Tuesta. 2014. 35 f. Dissertação (Mestrado) - Curso de Matemática, | ||
| + | - FEOFILOFF P.; KOHAYAKAWA, Y.; WAKABAYASHI. Y. **Uma Introdução Sucinta à Teoria dos Grafos**. 61 f. 2011. Departamento de Ciência da Computação do Instituto de Matemática e Estatística da Universidade de São Paulo, São Paulo, 2011. Disponível em: https:// | ||
| + | - **TEORIA DOS GRAFOS E APLICAÇÕES**. Synergismus scyentifica UTFPR, Pato Branco, 2009. Disponível em: http:// | ||
| + | - Biggs, N.; Lloyd, E. and Wilson, R. (1986), **Graph Theory**, 1736-1936, Oxford University Press | ||
| + | - Holanda, Bruno. «**Teoria dos Grafos**» (PDF). OBM. Consultado em 14 de junho de 2018 | ||
| + | - Cayley, A. (1857), «**On the theory of the analytical forms called trees**», Philosophical Magazine, Series IV, 13 (85): 172–176, doi: | ||
| + | - Tutte, W.T. (2001), **Graph Theory**, ISBN 978-0-521-79489-3, | ||
| + | - «**The Four Color Theorem**». Mathpages.com. Consultado em 3 de junho de 2016 | ||
| + | - Di Battista, Giuseppe; Eades, Peter; Tamassia, Roberto; Tollis, Ioannis G. (1994), «**Algorithms for Drawing Graphs: an Annotated Bibliography**», | ||
| + | - Longabaugh, William (2012), «**Combing the hairball with BioFabric: a new approach for visualization of large networks**» (PDF), BMC Bioinformatics, | ||
| + | - Goodrich, Michael T.; Tamassia, Roberto (2001). **Estruturas de Dados e Algoritmos em Java 2ª ed.** Porto Alegre: Bookman. p. 502-503. ISBN 85-363-0043-4 | ||
| + | - Goodrich, Michael T.; Tamassia, Roberto (2004). **Projeto de Algoritmos. Fundamentos, | ||
| + | - West, Douglas Brent (2001). «Chapter 1 - Fundamental Concepts». **Introduction to Graph Theory** 2nd ed. USA: Prentice Hall. p. 20. ISBN 0-13-014400-2 | ||