Teoria de Grafos
Trabalho realizado por:
Cátia Cardoso
Filipe Silva
Sandra Cunha
Um pouco da história de Teoria de
Grafos
Tudo começou no século XVIII, na
cidade medieval de Königsberg,
situada no leste europeu.
Königsberg é banhada pelo rio
Pregel, que a divide em quatro áreas
de terra ligadas umas às outras por
sete pontes, as famosas “sete pontes
de Königsberg”.
Durante muito tempo, os habitantes daquela
cidade perguntavam-se se era possível cruzar as sete
pontes numa caminhada contínua, sem que se
passasse duas vezes por qualquer uma delas.
Leonhard Euler estudou este problema em 1736
(como veremos, mais adiante) e a partir daí,
desenvolveu toda a teoria que é hoje utilizada nas mais
diversas áreas que envolvem tarefas: a Teoria de
Grafos.
Conceitos básicos
Um grafo G(V,A) é definido pelo par de conjuntos não vazios V e A,
onde:
V- conjunto dos vértices do grafo;
A- conjunto de pares ordenados a= (v,w), v e w  V: as arestas do
grafo.
Vértices adjacentes: são aqueles que estão ligados por uma mesma
aresta.
Aresta incidente: é aquela que liga dois vértices distintos.
Exemplo:
Encontre o caminho até ao centro representado por *, e a respectiva saída.
Resolução:
Grau de um vértice é igual ao número de arestas nele incidentes.
Grafo Regular é aquele em que todos os vértices têm o mesmo grau.
Grafo Completo é aquele em que todos os vértices são adjacentes.
Um grafo G diz-se um Grafo Bipartido se o conjunto dos seus vértices
admitir uma partição {V1, V2 } de tal forma, que toda a aresta de G une
um vértice de V1 e um vértice de V2.
Um grafo planar é um grafo que pode ser desenhado no plano de forma
a que as arestas não se cruzem.
Exemplo 2:
Pretendemos ligar três casas A, B e C a três utilitários, gás (g), água
(a) e electricidade (e). Por razões de segurança convém que as ligações
não se cruzem. Será possível?
Representação do grafo:
Trata-se de um grafo regular: todos
os vértices têm grau 3;
É bipartido, basta considerar a
partição V1= {A,B,C} e V2={g, a, e};
Não é possível fazer as ligações sem estas se cruzarem. O que
pretendíamos era um grafo planar, mas pelo teorema de
Kuratowsky, um grafo K3,3 nunca é planar.
Um grafo G’ diz-se um subgrafo de um grafo G, se o conjunto dos
vértices e das arestas de G’ são subconjuntos do conjunto de vértices e
do conjunto de arestas, respectivamente, de G.
Dois grafos G1, G 2, dizem-se isomorfos se existe uma bijecção entre os
conjuntos dos vértices dos dois grafos, preservando a adjacência desses
vértices, ou seja, se dois vértices são adjacentes em G1, as suas imagens
pela referida bijecção são adjacentes em G2.
Um grafo dirigido é um grafo em cujas arestas é definido um sentido.
Exemplo 3:
Regule com semáforos a circulação automóvel de modo a evitar
colisões num cruzamento com dois sentidos e possibilidade de virar à
esquerda e à direita. Não é permitido fazer uma volta de 180º.
Resolução:
Quando os semáforos da rua 1 estão
verdes:
Quando os semáforos da
rua 2 estão verdes:
Quando o semáforo da rua 3 está
verde:
Quando o semáforo da rua 4 está
verde:
Cada situação é um subgrafo da situação global que representa todas
as possibilidades de deslocamento no cruzamento em causa;
Em cada situação os grafos subjacentes aos grafos dirigidos são
isomorfos aos restantes;
Caminho é uma sucessão de vértices e arestas tal que cada aresta liga
o vértice que a precede ao vértice que a segue, não repetindo arestas.
Passeio é um caminho onde pode haver repetição de arestas e de
vértices.
Ciclo ou circuito é um caminho fechado.
Grafo conexo é aquele onde entre qualquer par de vértices existe
sempre um caminho que os une.
Grafos Eulerianos
Leonhard Euler
1707-1783
O que é um circuito de Euler?
É um caminho fechado em que cada aresta é percorrida uma só vez.
Exemplo:
u1, u2, u3, u4, u5, u3, u1, u6, u2, u7, u3, u6, u7, u1
Trilho (caminho) euleriano
É aquele que passa por todas as arestas uma única vez.
Grafo euleriano
É um grafo que possui pelo menos um circuito de Euler.
Teorema de Euler
Um grafo G é euleriano se e somente se G é conexo e cada vértice de G
tem grau par.

Se um grafo tiver um vértice qualquer de grau ímpar então é impossível
encontrar um circuito de Euler.
Mais alguns teoremas relevantes...
Teorema:
Um grafo conexo G, é um grafo euleriano se e somente se ele pode ser
decomposto em ciclos.
Teorema:
Se um grafo G tiver mais de dois vértices de grau ímpar então não
existe nenhum trilho euleriano.
Teorema:
Se G for um grafo conexo e tiver apenas dois vértices de grau ímpar
então ele tem pelo menos um trilho euleriano (às vezes mais).Qualquer
trilho tem de começar num dos vértices de grau ímpar e terminar no
outro.
Quando sabemos que um grafo admite circuito de Euler, como
fazemos para o encontrar?
Podemos fazê-lo por:
 tentativa-erro;
 Método de Fleury.
Método de Fleury:
1. Verificar se o grafo é conexo e se todos os vértices têm grau par;
2. Começar em qualquer vértice;
3. Percorrer uma aresta se:
a) Não é uma ponte;
b) Não houver outra alternativa;
4. Numerar as arestas pela ordem que são percorridas;
5. Quando não houver mais arestas a percorrer o processo termina.
Eulerizar um grafo
Quando não temos um caminho, nem um ciclo euleriano e
pretendemos percorrer o grafo repetindo o menor número de arestas
possíveis, o melhor é eulerizar o grafo.
Eulerizar um grafo é acrescentar as arestas necessárias de forma a que
todos os vértices de grau ímpar se tornem vértices de grau par.
Nota: É de salientar, que não se pode acrescentar arestas não existentes,
apenas podemos duplicar as arestas já existentes.
 Ainda uma melhor eulerização:
Grafo inicial:
Grafo eulerizado:
Aplicações:
Problema do desenho da casa
No desenho ao lado, uma criança diz ter posto a
ponta do lápis numa das bolinhas e sem levantar o lápis
traçou as linhas que formam o desenho da casa, traçando
cada linha uma única vez e voltando ao ponto de partida.
A mãe da criança acha que ela a enganou, pois não foi
capaz de achar nenhuma sequência que pudesse
produzir tal resultado.
Quem terá razão a criança ou a mãe?
Resolução:
Este problema, consiste simplesmente, em verificar se o grafo
admite um circuito de Euler.
A resposta é negativa (e assim, a criança enganou a mãe). No
entanto, é possível encontrar um caminho de Euler:
ADCBFDECFAB.
O problema das 7 pontes de Königsberg
Como já vimos anteriormente, os habitantes de Königsberg
pretendiam arranjar uma forma de cruzar as sete pontes numa caminhada
contínua sem que passassem duas vezes por qualquer uma delas e
regressando ao ponto de partida.
Resolução:
Vamos substituir o desenho, por um grafo:
Matematicamente, o que pretendemos é um caminho que passe por
todas as arestas uma única vez, regressando ao ponto de partida, portanto
um circuito de Euler.

Atendendo ao Teorema de Euler (que nos diz que para um grafo ser
euleriano é necessário que todos os vértices tenham grau par), verificamos
de imediato que o grafo em causa não possui circuitos de Euler, logo o
problema não tem solução.
O problema do controle dos parquímetros
Precisamos de organizar um giro de um agente para o controle dos
parquímetros de uma determinada zona, de modo a verificar violações
das regras de estacionamento, evitar o vandalismo e roubo. O agente
terá de gastar o mínimo de tempo possível no seu giro, para poder
repeti-lo com mais frequência.
A nossa zona de estudo: tem ruas, um bloco residencial e uma zona
verde.
Problema:
Pretende-se procurar o percurso mais eficiente para um agente,
que anda a pé e tem a missão de vigiar os parquímetros da área.Tendo
duas finalidades em mente:
 o agente tem que cobrir todos os passeios que têm parquímetros,
sem dar mais passos do que os necessários;
 o percurso deve acabar no mesmo ponto onde começa - o local onde
estaciona o carro patrulha.
Resolução:
Para começar, consideremos que só há dois blocos que têm
parquímetros:
Suponhamos que o agente começa e acaba o seu giro no canto
superior esquerdo do bloco da esquerda.
Como esquema do nosso problema temos o seguinte grafo:
Um possível circuito a percorrer, supondo que o agente parte de A
e volta a A, é o seguinte:
Observações:
É de salientar, que o que pretendíamos era um percurso óptimo, isto
é, um circuito de Euler (circuito em que cada aresta é percorrida uma
só vez);
Logo à partida, podíamos inferir que este grafo possuía um circuito
de Euler, já que todos os vértices são de valência par (Teorema de
Euler);
O estudo em causa pode assim ser alargado a uma área com mais ruas e
outras condições, as respostas seriam dadas por um estudo análogo ao
realizado.
Existem outras profissões/tarefas em que se pode enquadrar este tipo de
problema:
 Distribuição do jornal;
 Vendedor ambulante;
 Leitura dos contadores da luz.
Grafos Hamiltonianos
Sir William Rowan Hamilton
1805-1865
No caso dos circuitos de Euler, o nosso problema consistia em
encontrar caminhos, a começar e a acabar no mesmo vértice, que
passassem por todas as arestas apenas uma vez. Mas podíamos visitar
os vértices tantas vezes quantas quiséssemos. O que acontece se
trocarmos os papéis das arestas e dos vértices?
Caminho hamiltoniano é um caminho que passa exactamente uma
vez por cada vértice de um grafo, não sendo necessário percorrer
todas as arestas.
Ciclo hamiltoniano é um caminho hamiltoniano que começa e
termina no mesmo vértice.
Um grafo G é dito hamiltoniano se contém um ciclo hamiltoniano.
Quais são as condições necessárias e
suficientes para determinar se um grafo
é hamiltoniano?
Infelizmente, não conhecemos um método para determinar se um
grafo qualquer tem ou não um circuito hamiltoniano.
Teorema de Ore:
Uma condição suficiente (mas não necessária) para que um grafo G
seja hamiltoniano é que a soma dos graus de cada par de vértices não
adjacentes seja no mínimo n, onde n é o número de vértices.
Teorema de Dirac:
Uma condição suficiente (mas não necessária) para que um grafo G
seja hamiltoniano é que o grau de todo vértice de G seja no mínimo n/2.
Exemplo:
Não são muito informativos, pois o que eles dizem intuitivamente, é que
se um grafo contém muitas arestas e estas são bem distribuídas, ele é
hamiltoniano.
Ciclos hamiltonianos em grafos completos
Grafo completo com n vértices tem n(n-1)/2 arestas.
Todo o grafo completo que contém mais de dois vértices é um grafo
hamiltoniano.
Teorema:
Num grafo completo com n vértices podem ser escolhidos (n-1)!
Circuitos de Hamilton.
Agora o problema não é saber se há um circuito de Hamilton, mas sim,
como vamos lidar com tantos!
Problema do Caixeiro Viajante (PCV)
Determinação da viagem do custo mínimo, partindo e regressando ao
mesmo local;
Principais aplicações:
- entrega de encomendas;
- recolha de objectos;
- planificação de viagens;
- leitura de contadores…
Métodos para resolver PCV
Método 1: Algoritmo da Força Bruta

Lista de todos os circuitos possíveis;

Calcula-se o custo total de cada circuito;

Escolhemos um circuito com o custo total mínimo (Circuito Óptimo
de Hamilton).
Método 2: Algoritmo do Vizinho mais Próximo
- Escolhemos um ponto de partida (casa);
- De entre as arestas adjacentes escolhemos a que tem menor peso, e
partimos para o vértice correspondente (vizinho mais próximo);
- Continuamos a construir o circuito, indo sempre para o vizinho mais
próximo, a não ser que a aresta que o liga feche um circuito e havendo ainda
vértices por visitar. E prosseguimos até que todos os vértices sejam
visitados;
-Chegando ao último vértice, regressamos a “casa”.
A, C, E, D, B, A
773 EUROS
Os resultados são diferentes;
O Algoritmo da Força Bruta é conhecido como um algoritmo ineficiente.
Restringe-se a pequenos problemas.
O Algoritmo do Vizinho mais Próximo é um exemplo de algoritmo
eficiente. Contudo o resultado pode estar longe de ser um circuito
óptimo.
Surgem então os Algoritmos Aproximados, para tentar solucionar os
problemas atrás mencionados:
- lentidão;
- solução rápida mas apenas aproximada;
O Algoritmo Repetitivo do Vizinho mais Próximo
O Algoritmo da Ligação mais Económica
Método 3: O Algoritmo Repetitivo do Vizinho mais
Próximo
-Seja X um vértice qualquer. Apliquemos o algoritmo do vizinho mais
próximo, sendo X o ponto de partida. E calculemos o custo total do
circuito;
-Repetimos o processo usando os outros vértices como “casa”;
-Dos circuitos hamiltonianos obtidos escolhemos o que tem custo
mínimo. Se à partida estiver estabelecido o vértice de partida e não
coincidir com aquele do qual partimos, basta reescrever o circuito
tomando como ponto de partida o que estava pré-estabelecido.
Pelo Algoritmo do Vizinho mais Próximo tínhamos obtido A, D, B, C,
E, A com custo total de 773 euros;
Repetindo o processo para os outros vértices obtemos:
- para o vértice B temos: B, C, A, E, D, B com custo total = 722;
- para o vértice C temos: C, A, E, D, B, C com custo total = 722;
- para o vértice D temos: D, B, C, A, E, D com custo total = 722;
- para o vértice E temos: E, C, A, D, B, E com custo total = 741;
Os vértices com circuitos óptimos têm como vértice inicial B, C ou D.
Portanto pode-se escolher qualquer um deles.
Escolhemos o que tem como vértice inicial o B. Mas tem que começar
em A, logo reordenando temos: A, E, D, B, C, A.
Método 4: Algoritmo da Ligação mais Económica
- Escolher a aresta com menor peso. Marcar a aresta correspondente
com uma cor, por exemplo vermelho;
- Escolher a ligação mais económica que se segue, e assinalar a
vermelho;
- Continuar a escolher a ligação mais económica disponível. Marcar a
aresta correspondente a vermelho excepto quando:
a)esta aresta fecha um circuito;
b)esta aresta parte de um vértice ao qual já estão ligadas
duas outras arestas anteriormente escolhidas;
-Quando não existirem mais vértices para ligar, fecha-se o circuito
que temos vindo a assinalar a vermelho.
Colorir um grafo
O número cromático de um grafo é o número mínimo necessário para
colorir os seus vértices de forma a que dois vértices adjacentes não
possam ter a mesma cor.
O número cromático das arestas de um grafo é o número mínimo de
cores necessárias para colorir as arestas de G, de forma a que as arestas
incidentes num mesmo vértice não possam ter a mesma cor.
Snark é um grafo cujo número cromático para as arestas é igual a
quatro.
Exemplo:
Uma companhia industrial deseja armazenar sete diferentes
produtos farmacêuticos C1, C2, ..., C7, mas alguns não podem ser
armazenados juntos por motivos de segurança. A tabela seguinte mostra
os produtos que não podem estar no mesmo local. Encontre o número
mínimo de localizações necessárias para colocar estes produtos.
Primeira forma de resolver (coloração dos vértices)
Resposta:
O número cromático deste grafo é 4. Precisamos de quatro gavetas
para colocar os medicamentos. Uma combinação possível dos
medicamentos compatíveis é: C2C5, C3C6, C4C7, C1.
Esta combinação não é única, pois a disposição dos produtos
compatíveis pode variar consoante a coloração do grafo.
Segunda forma de resolver (coloração das arestas)
Observação: O número
cromático das arestas deste
grafo é 4, contudo, a definição
de número cromático das
arestas diz-nos, que para colorir
um grafo devemos usar o
número mínimo de cores. Neste
caso, a aresta preta devia ser
verde. Logo o número cromático
das arestas será 3.
Resposta:
Preciso de quatro gavetas para colocar os produtos, temos três
combinações possíveis para arrumar os medicamentos compatíveis. Por
exemplo, a combinação dada pela cor verde: C1C3, C2C5, C4C7, C6.
Teorema das quatro cores
Qualquer mapa de regiões, desenhado num plano pode ser colorido
com quatro cores de modo a que as regiões adjacentes (arestas comuns
ou parcialmente comuns) fiquem com cores diferentes.
Exemplo:
Mapa da Europa
Se a cada aresta de um grafo se associar um número natural, chamado
peso, ficamos com um grafo “pesado”.
Árvore é um grafo conexo e sem ciclos.
Dado um grafo G, uma árvore geradora de G é um subgrafo G’ de G,
tal que G’ é uma árvore e possui todos os vértices de G.
Num grafo “pesado” G, a árvore geradora mínima é uma árvore
geradora de G, para a qual é mínima a soma dos pesos das arestas
envolvidas.
Exemplo:
O concelho de uma cidade, que possui um orçamento muito
limitado, quer pavimentar algumas estradas de forma a que se possa ir de
qualquer cidade para qualquer cidade só por estrada pavimentada.
Directa ou indirectamente. A autarquia quer minimizar o número total de
quilómetros a pavimentar. Procure a rede de estradas a pavimentar que
preencherá todos estes requisitos.
Algoritmo de Kruskal
1. Escolher a aresta menos pesada: AB
2. Das restantes arestas escolher a aresta
menos pesada: BD
3. Continuar sucessivamente mas sem
nunca escolher uma aresta que feche
um ciclo.
Peso total: 88Km
Algoritmo de Prim
1. Começar num vértice qualquer: A
2. Ir para o vizinho mais “próximo”: B
3. Daí para o vizinho “mais próximo” e assim sucessivamente até
chegar ao último, (sem fechar um ciclo).
Observação: Por vezes este método pode levar a um beco sem saída, que é
o que acontece se começarmos em A: AB, BD, DC. Não podemos
continuar senão fechamos o ciclo.
Uma solução poderá ser:
AB, BD, DC, BF, FE, EG.
FIM
Download

Teoria de Grafos