Teoria dos GrafosIntrodução à Teoria dos Grafos
Introdução aos Grafos
25 min de leitura · 2ª mais cobrada em Teoria dos Grafos
O que é isto
Um grafo modela relações de dois em dois. Cada objeto é um vértice (também chamado de nó) e cada relação é uma ligação entre dois vértices — o hipergrafo, definido mais abaixo, permite ligações com mais de dois extremos. Formalmente
onde é um conjunto finito não vazio de vértices e descreve as ligações.
A mesma notação serve para dois objetos. Em um grafo não dirigido, cada elemento de é um par não ordenado : a aresta é a mesma que . Em um grafo dirigido (digrafo), cada elemento de é um par ordenado : o arco de para . O arco não é o arco ; um pode existir sem o outro.
Por que dois tipos: relações simétricas (cabo de rede, rua de dois sentidos) pedem aresta-conjunto; relações de um lado só (hiperligação, pré-requisito, rua de mão única) pedem arco.
Dois vértices e são adjacentes se existe uma ligação entre eles. Um laço liga um vértice a si mesmo: no não dirigido, ou no dirigido.
Ideia central
Em um grafo simples, é um conjunto: no máximo uma aresta (ou um arco) com os mesmos extremos, e em geral sem laços. Se for conjunto, escrever duas vezes não cria duas arestas — é o mesmo elemento.
Em um multigrafo, é uma coleção: duas arestas não dirigidas podem ter os mesmos extremos, e dois arcos podem ter a mesma origem e o mesmo destino. Essas cópias chamam-se multiarestas (arestas paralelas).
Conjunto e coleção definem de formas diferentes. Se for conjunto, aparece no máximo uma vez: a segunda cópia é o mesmo elemento. Se for coleção, as duas cópias são arestas distintas — dois cabos entre os mesmos aparelhos, duas ruas paralelas entre os mesmos cruzamentos.
Exemplo mínimo: com duas arestas não dirigidas entre e . Como conjunto, tem um elemento. Como coleção, tem dois. O desenho mostra duas linhas paralelas.
Arestas ponderadas carregam um número (custo, distância). Esta página usa só bits.
Para guardar no computador há duas representações clássicas. Fixe uma ordem , com .
Matriz de adjacência de bits. A matriz — tabela retangular de entradas indexadas por linha e coluna — é . A entrada
se e somente se existe aresta (ou arco) de para , e caso contrário.
No não dirigido, a aresta é um conjunto: liga a e a . Por isso preenche as duas entradas e — a matriz é simétrica. No digrafo, significa o arco ; é independente e pode ser . Sem laços, a diagonal é : seria um arco (ou aresta) de para si mesmo.
A ordem dos rótulos é parte da representação: permutar permuta linhas e colunas. O grafo é o mesmo; a matriz muda. Sem uma ordem fixa, “a entrada ” não tem sentido — o e o são posições na ordem escolhida, não nomes intrínsecos.
A matriz de adjacência é , com sse existe arco — ou seja, se e são adjacentes nessa orientação. A matriz de incidência tem uma linha por vértice e uma coluna por aresta: a coluna da aresta marca os (dois) extremos de .
Lista de adjacência. Para cada , guarda-se a lista dos vizinhos de — os vértices tais que existe aresta ou arco de para . Seja .
O espaço é proporcional a (na ordem de crescimento, ). Cada vértice contribui com um cabeçalho (mesmo que a lista seja vazia). Cada arco aparece só na lista de . Cada aresta não dirigida aparece nas duas listas: na de e na de . Por isso, no não dirigido, o número de apontadores é , não .
Por que duas estruturas:
| Matriz | Lista | |
|---|---|---|
| Espaço | sempre | |
| Existe ? | : leia | percorrer a lista de |
| Vizinhos de | varrer colunas | só os vizinhos |
Grafo denso ( da ordem de ): os espaços se aproximam; a matriz ganha na consulta pontual. Grafo esparso ( linear em ): a lista economiza memória e a travessia custa da ordem de , não de .
Números: , . A matriz guarda bits; a lista, cerca de cabeçalhos mais apontadores (aresta nas duas pontas). Com as duas ocupam a mesma ordem.
Três vértices, duas arestas
Sejam e arestas não dirigidas . Com linhas e colunas na ordem , a matriz de bits começa nula: cada só entra quando uma aresta de o força.
O par não ordenado é o mesmo que , então liga os dois sentidos. As entradas e recebem . Uma só delas seria um arco, não esta aresta-conjunto.
Mesma regra: . Não há , logo . Não há laço, logo a diagonal fica .
A lista: ; ; . Consultar “ liga a ?” é ler o bit na matriz. Na lista, percorre-se os vizinhos de (só ) e conclui-se que não.
Espaço: , . A matriz gasta bits. A lista gasta três cabeçalhos e apontadores — cada aresta nas duas pontas.
O caminho inverso — lista matriz — zera e, para cada vizinho na lista de , põe . No não dirigido, se lista , então tem de listar ; senão a lista está inconsistente com a simetria.
Se a ordem fosse em vez de , a aresta continuaria a existir, mas passaria a ocupar outras posições na matriz (primeira e segunda linhas trocadas, e as colunas com elas). O grafo não mudou.
Da matriz de bits ao digrafo
Dada a matriz de bits abaixo, com vértices nessa ordem, reconstrua o digrafo: se e somente se existe o arco .
A linha lista os destinos dos arcos que saem de . A linha é : há arco e arco . Não há nem . A diagonal seria um laço em ; aqui toda a diagonal é .
Percorra os s, par :
| com | arco | |
|---|---|---|
| , | , | |
Cinco uns, cinco arcos. Linha : . Linha : . Linha : .
Vértices e os cinco arcos da tabela. A matriz não é simétrica: e , logo existe e não existe . Se o grafo fosse não dirigido, essas duas entradas teriam de coincidir.
A coluna lista quem chega em . Coluna : de cima para baixo — chegam e , coerente com a tabela. A matriz lista os arcos que existem.
Cada da linha vira um vizinho na lista de :
Com e arcos, a matriz gasta bits mesmo com cinco uns; a lista gasta quatro cabeçalhos e cinco vizinhos (aqui , não : cada arco fica só na lista da origem). Consultar “existe ?” é na matriz, ou varrer a lista de (só ).
Uma linha só de zeros seria um vértice sem arcos de saída; uma coluna só de zeros, sem arcos de entrada. Isolado no digrafo exigiria linha e coluna nulas ao mesmo tempo. Neste exemplo nenhum vértice é isolado: cada um aparece em pelo menos um .
Contagem na matriz de adjacências
No grafo não dirigido, a matriz de adjacências pode deixar de ser -: a entrada é o número de arestas que ligam a . A aresta coincide com , logo — a matriz continua simétrica. Um laço em é aresta com os dois extremos em , logo ocupa a diagonal: conta os laços em . Entradas podem ser inteiros maiores que .
Por que inteiro e não bit: no multigrafo, duas arestas paralelas entre o mesmo par são objetos distintos. O bit colapsa as duas numa única presença; o inteiro preserva a multiplicidade. Peso é outra anotação: substitui o bit por um custo, não pela contagem de cópias.
Fixe nessa ordem, com duas arestas paralelas , uma aresta e um laço em .
aparece duas vezes; uma; uma. Não há nem laço em ou .
As duas cópias de são a multiplicidade , e o par não ordenado preenche os dois lados: . Uma cópia de dá . Sem , .
Sem laço em nem em , . O laço ocupa a casa . A matriz é
Simétrica, com nas paralelas e o laço na diagonal. Em bits, as duas paralelas virariam e a multiplicidade desapareceria.
Hipergrafo
No grafo ordinário cada aresta (ou arco) liga exatamente dois vértices. Um hipergrafo generaliza esse objeto: cada elemento de é uma hiperaresta, um subconjunto não vazio de com qualquer número de extremos — um vértice, dois, três ou mais. Não se exige que cada ligação tenha exatamente dois extremos.
No digrafo, cada arco tem dois extremos, só que ordenados: tem origem e destino. A direção não aumenta o número de extremos. Uma hiperaresta liga três vértices de uma vez; nenhum arco faz isso.
Por que a generalização: reuniões ou conjuntos que compartilham mais de dois elementos não cabem no modelo de pares. O grafo ordinário é o caso em que toda hiperaresta tem tamanho .
Seja e com , e . tem dois extremos: é aresta ordinária. tem três: liga , e de uma vez. tem um: só . Os três tamanhos estão no mesmo .
Os arcos e descrevem um digrafo sobre : cada um ainda liga dois vértices. Orientar não acrescenta o terceiro extremo que já tem.
Subgrafo
Um subgrafo de é um grafo tal que , , e cada aresta de tem os extremos em . Não se inventa vértice nem aresta: só se escolhe um subconjunto de cada, respeitando a incidência.
Um laço é uma aresta (ou um arco ), não um subgrafo. O subgrafo é o par , não uma ligação isolada.
O caso e é o subgrafo gerador: mesmos vértices, parte das arestas. A definição geral permite próprio — pode-se largar vértices, desde que as arestas restantes não apontem para o que foi largado.
e .
e . Os três extremos estão em ; . O vértice e a aresta ficaram de fora. Tirar ainda também daria um subgrafo: não precisa incluir todas as arestas de com extremos em .
com não é subgrafo: , então não pode ficar em . Uma ligação que envolve só um vértice (um laço) também não é “o subgrafo” — é uma aresta de .
Em Resumo
Grafo: . Simples: é conjunto de pares (não ordenados ou ordenados). Multigrafo: é coleção — multiarestas com os mesmos extremos.
Aresta é conjunto; arco é par ordenado. A mesma notação serve nos dois casos.
Matriz de adjacência : em bits, sse há aresta/arco de para . No não dirigido com multiplicidade, conta quantas arestas ligam a e o laço ocupa ; entradas podem ser inteiros . Consulta em tempo constante; espaço . Incidência usa uma coluna por aresta e marca os extremos de cada .
Lista de adjacência: espaço ; boa para percorrer vizinhos em grafo esparso. Em bits, a matriz reconstrói o digrafo lendo cada como um arco .
Hipergrafo: cada hiperaresta liga qualquer número de vértices; o arco do digrafo continua com dois extremos.
Subgrafo de : com , e extremos de em . Laço é aresta de um vértice a si mesmo, não um subgrafo.