Ciência da Computação GRAFOS Aula 01 Introdução Max Pereira
Todos os dias nos vemos cercados por incontáveis conexões e redes: rodovias e ferrovias, linhas telefônicas e a Internet, circuitos eletrônicos e até mesmo ligações moleculares. Há também as redes sociais entre amigos e familiares. Todos esses sistemas consistem de certos pontos, chamados vértices, conectados por linhas (links), chamadas arestas. Na matemática, todas essas redes são chamadas de grafos. A teoria dos grafos é o estudo dos grafos e suas propriedades. É uma das áreas mais visuais da matemática, e tem inúmeras aplicações importantes.
Cadeia de suprimentos Rodovias Redes de Computadores Circuitos integrados Relacionamentos Conexões Neurais
Podemos projetar o layout de grafos simples usando pontos e linhas. A posição dos pontos e o comprimento das linhas são irrelevantes. Apenas precisamos ficar atentos em como eles estão conectados uns aos outros. As linhas podem até ter cruzamentos entre elas, e não precisam ser retas. Em alguns grafos, as arestas vão apenas em uma direção. Esses grafos são chamados de grafos orientados ou dirigidos. Alguns grafos consistem de múltiplos segmentos distintos que não estão conectados por arestas. Esses grafos são chamados de grafos desconexos. Outros grafos podem conter múltiplas arestas entre os mesmos pares de vértices, ou vértices que estão conectados a eles mesmos (laços).
Podemos criar grafos a partir de grafos existentes através da remoção de alguns vértices e arestas. O resultado é chamado de subgrafo. Alguns exemplos de grafos e subgrafos:
A ordem de um grafo é o seu número de vértices. O grau de um vértice em um grafo é o número de arestas que estão conectadas a esse vértice. Ordem: Grau = 2 Grau = 3 Grau = 1
Grafos que formam um único anel de vértices são chamados ciclos. Todos os ciclos tem o mesmo número de arestas e vértices.
Suponha que você tenha sido convidado para uma festa. Depois da celebração os convidados estão indo embora e todos se cumprimentam. Quantos apertos de mãos são realizados no total? Podemos representar os apertos de mãos usando um grafo: cada pessoa é um vértice e todo aperto de mão é uma aresta. Suponha que, incluindo você mesmo e o dono da festa, há 5 pessoas presentes. São 10 apertos de mãos!
Melhor do que contar as muitas arestas para um número maior de convidados, podemos tentar encontrar uma fórmula simples que nos dê o resultado para qualquer número de convidados. Cada uma das 5 pessoas aperta a mão de outras 4. Temos então 5 X 4 = 20 apertos de mãos no total. De forma geral, parece que número de apertos de mãos para um grupo de n pessoas é: n x (n 1) No entanto, contamos cada aperto de mão duas vezes, uma para cada pessoa envolvida. Quando a pessoa 1 aperta a mão da pessoa 2, então automaticamente a pessoa 2 aperta a mão da pessoa 1. n x (n 1) 2
O grafo do aperto de mãos possui a característica de que todos os vértices estão conectados entre si. Grafos com essa propriedade são chamados grafos completos. O grafo completo com 4 vértices é geralmente chamado de K 4, o grafo completo com 5 vértices é conhecido como K 5, e assim por diante. Um grafo completo com n vértices, K n, tem n x (n 1) 2 arestas.
Suponha agora um outro cenário: temos 5 homens e 4 mulheres, há pequenas mesas e cada homem pode conversar durante 5 minutos com cada uma das mulheres. Quantos encontros individuais ocorrem? Nesse caso, o grafo consiste em dois conjuntos separados de vértices. Cada vértice está conectado a todos os vértices do conjunto oposto, mas com nenhum vértice do seu próprio conjunto. Grafos que possuem esse layout são chamados de grafos bipartidos.
Um grafo bipartido com dois conjuntos de tamanhos x e y é geralmente referenciado como K x,y. Possui x y arestas, ou seja, para nosso exemplo temos 5 x 4 = 20 encontros.
As pontes de Königsberg Um dos primeiros matemáticos a pensar sobre grafos e redes foi Leonhard Euler. Ele ficou intrigado por um antigo problema referente a cidade de Königsberg (hoje Kaliningrado): O rio Pregel divide Königsberg em 4 partes, que estão conectadas por 7 pontes. É possível andar pela cidade cruzando cada uma das pontes exatamente uma única vez? Você pode começar e terminar em qualquer lugar.
As pontes de Königsberg No caso de Königsberg parece ser impossível encontrar um caminho válido. Euler procurou encontrar uma regra simples que poderia ser aplicada em qualquer cidade, sem precisar tentar várias possibilidades, usando teoria dos grafos.
Primeiro, precisamos converter o mapa da cidade em um grafo. Cada região está representada por um vértice e cada ponte conectando duas regiões está representada por uma aresta. Agora o problema de Königsberg torna-se um problema de desenhar um grafo com uma linha contínua enquanto passa uma única vez por cada aresta.
Para alguns grafos é possível para outros não. Um grafo pode ser desenhado se ele tiver não mais do que dois vértices de grau ímpar, ou seja, todos os vértices devem ter grau par, exceto os vértices de início e fim do caminho (esses dois podem ter grau ímpar).
Voltando para o problema das pontes de Königsberg, podemos notar que há mais de dois vértices com grau ímpar. Dessa forma, um caminho que cruze todas as pontes uma única vez é impossível.
Esse problema também é impossível. Alguns grafos podem ser desenhados sem que haja cruzamento das arestas esses grafos são chamados de grafos planares mas outros não podem.
K 3 é planar K 4 é planar?? K 4 é planar K 5 é planar?? K 5 não é planar
O grafo completo K 5 é o menor grafo não planar. Qualquer outro grafo que contenha o K 5 como um subgrafo de certa forma também e não planar. Isso inclui K 6, K 7, e todos os grafos maiores completos. O grafo do problema das três casas é um grafo bipartido K 3,3. Assim, qualquer grafo não planar deve conter um K 5 ou um K 3,3 ou uma subdivisão desses dois grafos como um subgrafo.
A Fórmula de Euler Todos os grafos planares dividem o plano em um número de áreas, chamadas de faces. 4 vértices 3 faces 6 arestas 8 vértices 5 faces 12 arestas 6 vértices 7 faces 12 arestas Podemos notar que o número de arestas é sempre um menos o número de faces mais o número de vértices. Esse resultado é chamado de equação de Euler.
Muitos grafos planares são muito similares aos poliedros. Isso significa que podemos usar a fórmula de Euler também para os poliedros, com uma pequena diferença. Quando transformamos os poliedros em grafos planares, uma das faces desaparece. Assim, o número de arestas é igual o número de vértices somado ao número de faces, menos dois, para qualquer poliedro.
Coloração de Mapas Quando os mapas são coloridos - ou qualquer outro desenho que contenha regiões distintas - os países adjacentes não podem ter a mesma cor. É importante também usar o menor número de cores diferentes possível.
Quantas cores são necessárias? Todos esses mapas podem ser coloridos com apenas 4 cores.
Podemos converter os mapas com países e fronteiras em grafos planares: cada país se torna um vértice, e países que compartilham fronteiras são conectados por uma aresta. Agora queremos colorir os vértices do grafo, e dois vértices devem ter cores diferentes se estiverem conectados por uma aresta.
Em 1852, um estudante de botânica Francis Guthrie precisou colorir um mapa de regiões da Inglaterra. Ele observou que 4 cores pareciam ser suficientes para qualquer mapa que ele tentasse colorir. No entanto, ele não conseguiu provar que funcionaria para todos os mapas. Isso se tornou um problema extremamente difícil, e ficou conhecido como o teorema das quatro cores. Durante os 100 anos seguintes, muitos matemáticos publicaram provas que posteriormente foram desqualificadas. Por muito tempo os matemáticos foram incapazes de provar que as 4 cores eram suficientes ou encontrar um mapa que precisasse de mais de 4 cores.
Muito pouco foi feito para resolver o problema das 4 cores até 1976, quando Wolfgang Haken e Kenneth Appel usaram um computador para finalmente resolvê-lo. Eles utilizaram 1936 mapas possíveis, os quais foram analisados por um computador levando mais de 1000 horas de processamento. Carimbo postal do Departamento de Matemática da Universidade de Illinois, onde Haken e Appel trabalhavam.
O Problema do Caixeiro Viajante Vamos supor que um serviço de entregas tenha que visitar 8 diferentes cidades para distribuir algumas encomendas. Podemos pensar nessas cidades como vértices em um grafo. Se todas as cidades estiverem conectadas por estradas, ou seja, um grafo completo, então há 8 (8 1) 28 arestas no total. O caminhão deverá visitar todas as cidades, em qualquer ordem. No problema das pontes de Königsberg procuramos por caminhos que passavam pelas arestas exatamente uma única vez. Agora queremos encontrar caminhos que visitam cada vértice exatamente uma única vez. Esses caminhos são chamados de ciclos Hamiltonianos. 2 =
Há muitas possibilidades de ciclos Hamiltonianos em um grafo completo. Podemos escolher qualquer vértice para iniciar e depois escolher qualquer uma das cidades restantes em qualquer ordem. Em um grafo com 4 cidades, cada ciclo Hamiltoniano deve conter também 4 cidades. Há 4 escolhas para a primeira cidade. Depois, sobram somente 3 escolhas para a segunda cidade. Seguindo, sobrem 2 escolhas para a terceira cidade. Finalmente, há apenas 1 escolha restante para a quarta cidade. Isso significa que, no total, há 4 3 2 1 = 24 caminhos possíveis ou 4!
Até agora ignoramos o fato que algumas cidades possuem distâncias diferentes umas das outras. Em problemas reais, essa consideração é muito importante. Não queremos apenas encontrar qualquer caminho, mas queremos encontrar o caminho mais curto. Nesse caso, o Problema do Caixeiro Viajante. Esse problema não aplica-se somente aos transportes ou logística, mas também quando transistores devem ser posicionados em microships ou quando se faz análises de estruturas de DNA.
Um método simples seria tentar todos os possíveis caminhos, encontrando o comprimento de cada um, e depois escolher o menor. Porém, com apenas 10 cidades há 10! = 3.628.800 caminhos possíveis. Infelizmente não há um algoritmo eficiente para resolver o problema do caixeiro viajante. Matemáticos e cientistas da computação desenvolveram vários algoritmos que encontram boas soluções, mesmo que não sejam as soluções ótimas. O problema do caixeiro viajante é NP-completo, ou seja, muito difícil de ser resolvido por computadores (pelo menos para um número muito grande de cidades).
A teoria dos grafos no dia-a-dia A Internet, por exemplo, é um grande grafo virtual. Cada vértice é uma página, e cada aresta significa que há um link entre duas páginas. Algumas páginas possuem muitos links de chegada, enquanto outras possuem muito poucos. Esse é o conceito base com o qual o Google trabalha para ordenar os resultados de busca. Páginas com mais links de chegada tem uma tendência de mais qualidade e devem ser mostrados no topo dos resultados de busca. Essa simples ideia da teoria dos grafos, o algoritmo Page Rank, fez o Google ser significativamente melhor do que outras máquinas de busca.
A teoria dos grafos no dia-a-dia Os grafos também possuem um papel importante na área de transportes e navegação. Todos os voos, trens e redes de metrôs formam grafos, que podem ser usados na criação de agendas (escalonamento) eficientes.
As ligações entre átomos nas moléculas formam grafos As epidemias podem ser modeladas usando uma rede (grafo). Na biologia, as árvores de evolução que mostram os ancestrais de uma espécie formam grafos.
As estruturas gramaticais das linguagens podem ser modeladas usando grafos, por exemplo, para criar algoritmos de tradução Os grafos também possuem muitas aplicações em probabilidade, teoria dos jogos e matemática financeira. Os diferentes componentes de circuitos elétricos e chips de computadores formam redes (grafos).
Redes Sociais Um bom exemplo de grafos presente na vida de quase todas as pessoas. Aqui, os vértices representam pessoas e as arestas representam relacionamentos, likes, seguidores, etc. Quando começamos a desenhar grafos de redes sociais, vemos claramente determinados grupos de amigos mútuos, os quais podem ter frequentado a mesma escola ou moram na mesma cidade. Podemos definir também a centralidade das pessoas, que pode ser uma medida de popularidade da pessoa na rede social.
Em 2014, o Facebook tinha 1.4 bilhão de usuários ativos e um total de mais de 200 bilhões de relacionamentos. Metade dos usuários do Facebook tinham mais de 200 amigos, e como a maioria dos amigos tem um número similar de amigos, é fácil perceber que temos centenas de milhares de amigos de amigos. Baseado em um estudo feito pelo Facebook em 2016, cada pessoa está, em média, conectado com todas as pessoas no Facebook através de no máximo 3.57 outras pessoas, ou seja, há 3.57 graus de separação. Em outras palavras, se você selecionar um dos bilhões de usuários do Facebook em todo o mundo, ele terá um amigo de um amigo que conhece um amigo de um de seus amigos.
Visualização geográfica de todos os relacionamentos no Facebook em 2010.
Em 1929, quando o húngaro Frigyes Karinthy pela primeira vez propôs a ideia de 6 graus de separação, obviamente não havia internet nem tampouco redes sociais, mas o mundo começava a ficar mais conectado. Em 1967, Stanley Milgram conduziu o primeiro experimento, onde 296 participantes moradores do Nebraska e Kansas enviaram uma carta para uma pessoa em Boston. Eles tinham que escolher um amigo para enviar a carta que, por sua vez, escolheria um outro amigo. A cada passo, a carta se aproximava de Boston. Milgram descobriu que, em média, apenas 5.2 amigos intermediários foram necessários 5.2 graus de separação. Hoje em dia cada um de nós e parte de incontáveis grafos invisíveis que constituem nossas interações sociais, viagens, internet, ciência, e muito mais.