Escolar Documentos
Profissional Documentos
Cultura Documentos
Teoria de Grafos
Turma : 156
Matricula : 2014102865
Introdução
Enquanto outros temas de matemática têm uma longa e gloriosa história, isto
não acontece com a Teoria de Grafos. O primeiro problema cuja solução envolveu
conceitos do que veio a ser a teoria dos grafos (séc. XVII) foi resolvido por Euler e
não passava de uma especulação matemática. Acredita-se que um dos primeiros
exemplos da utilização de grafos teria surgido devido as Pontes de Königsberg. Na
cidade de Königsberg (atual Kaliningrado), antiga capital da Prússia Oriental, o rio
Pregel circunda uma ilha e separa a cidade em quatro zonas que, no séc. XVII
estavam ligadas por sete pontes como na figura 1:
Figura 1
CONCEITOS E APLICAÇÕES BÁSICAS DA TEORIA DE GRAFOS
Grafo simples
V = { p | p é uma pessoa }
Figura 2
Digrafo (Grafo Orientado ou Direcionado)
Figura 3
A relação definida por A não é simétrica pois se <v é pai/mãe de w>, não é o
caso de <w é pai/mãe de v>. Há, portanto, uma orientação na relação, com um
correspondente efeito na representação gráfica de G.
O grafo acima é dito ser um grafo orientado (ou digrafo), sendo que as
conexões entre os vértices são chamadas de arcos.
Ordem
A ordem de um grafo G é dada pela cardinalidade do conjunto de vértices, ou
seja, pelo número de vértices de G. Nos exemplos acima:
ordem(G1) = 4
ordem(G2) = 6
Adjacência
GRAU
O grau de um vértice é dado pelo número de arestas que lhe são incidentes.
Em G1, por exemplo:
grau(Pedro) = 3
grau(Maria) = 2
grauDeEmissão(Antonio) = 1
grauDeEmissao(Alfredo) = 2
grauDeEmissao(Renata) = 0
grauDeRecepção(Antonio) = 2
grauDeRecepção(Alfredo) = 0
grauDeRecepção(Renata) = 1
Fonte
Um vértice v é uma fonte se grauDeRecepção(v) = 0. É o caso dos
vértices Isadora, Alfredo e Cecília em figura 3.
Sumidoro
Laço
Um laço é uma aresta ou arco do tipo a=(v,v), ou seja, que relaciona um vértice a
ele próprio. Em figura 4 há três ocorrências de laços para um grafo não orientado.
Figura 4
Grafo regular
Um grafo é dito ser regular quando todos os seus vértices tem o mesmo grau.
O grafo figura 5, por exemplo, é dito ser um grafo regular-3 pois todos os seus vértices
tem grau 3.
Figura 5
Grafo completo
Um grafo é dito ser completo quando há uma aresta entre cada par de seus
vértices. Estes grafos são designados por Kn, onde n é a ordem do grafo.
Um grafo Kn possui o número máximo possível de arestas para um dados n. Ele
é, também regular-(n-1) pois todos os seus vértices tem grau n-1.
Figura 6
Grafo bipartido
Um grafo é dito ser bipartido quando seu conjunto de vértices V puder ser particionado
em dois subconjuntos V1 e V2, tais que toda aresta de G une um vértice de V1 a outro
de V2.
V=HUM
A = {(v,w) | (v ∈ H e w ∈ M) ou (v ∈ M e w ∈ H)
e <v foi namorado de w>}
Figura 7
O grafo figura 8 é uma K3,3, ou seja, um grafo bipartido completo que contém duas
partições de 3 vértices cada. Ele é completo pois todos os vértices de uma partição estão
ligados a todos os vértices da outra partição.
K3,3
Figura 8
Grafo rotulado
Um grafo G(V,A) é dito ser rotulado em vértices (ou arestas) quando a cada vértice (ou
aresta) estiver associado um rótulo. G5 é um exemplo de grafo rotulado.
Grafo valorado
Um grafo G(V,A) é dito ser valorado quando existe uma ou mais funções
relacionando V e/ou A com um conjunto de números.
Figura 9
Multigrafo
Um grafo G(V,A) é dito ser um multigrafo quando existem múltiplas arestas entre pares
de vértices de G. No grafo figura 10, por exemplo, há duas arestas entre os
vértices A e C e entre os vértices A e B, caracterizando-o como um multigrafo.
Figura 10
Subgrafo
Um grafo Gs(Vs, As) é dito ser subgrafo de um grafo G(V,A) quando Vs ⊆ V e As ⊆ A. O
grafo figura 11, por exemplo, é subgrafo de figura 10.
Figura 11
Hipergrafo
Um hipergrafo H(V,A) é definido pelo par de conjuntos V e A, onde:
V - conjunto não vazio;
A - uma família e partes não vazias de V.
Seja, por exemplo, o grafo H(V,A) dado por:
V = { x1, x2, x3, x4}
A = { {x1, x2, x4}, {x2, x3, x4}, {x2, x3}}
Figura 12
Cadeia
Uma cadeia é uma sequência qualquer de arestas adjacentes que ligam dois
vértices. O conceito de cadeia vale também para grafos orientados, bastando que se
ignore o sentido da orientação dos arcos. A sequência de vértices (x6, x5, x4, x1) é um
exemplo de cadeia em figura 13.
Uma cadeia é dita ser elementar se não passa duas vezes pelo mesmo vértice.
É dita ser simples se não passa duas vezes pela mesma aresta (arco).
Figura 13
Caminho
Um caminho é uma cadeia na qual todos os arcos possuem a mesma orientação. Aplica-
se, portanto, somente a grafos orientados. A sequência de vértices (x1, x2, x5, x6, x3) é
um exemplo de caminho em figura 13.
Ciclo
Um ciclo é uma cadeia simples e fechada (o vértice inicial é o mesmo que o
vértice final). A seqüência de vértices (x1, x2, x3, x6, x5, x4, x1) é um exemplo de ciclo
elementar em figura 13.
Circuito
Um circuito é um caminho simples e fechado. A seqüência de vértices (x1, x2, x5,
x4, x1) é um exemplo de circuito elementar em figura 13.
Fecho Transitivo
O fecho transitivo direto (ftd) de um vértice v é o conjunto de todos os vértices
que podem ser atingidos por algum caminho iniciando em v. O ftd do vértice x5 do
grafo figura 19, por exemplo, é o conjunto: {x1, x2, x3, x4, x5, x6}. Note que o próprio
vértice faz parte do ftd já que ele é alcançável partindo-se dele mesmo.
O fecho transitivo inverso (fti) de um vértice v é o conjunto de todos os
vértices a partir dos quais se pode atingir v por algum caminho. O fti do vértice x5 do
grafo figura 19, por exemplo, é o conjunto: {x1, x2, x4, x5, x7}. Note que o próprio
vértice faz parte do fti já que dele se pode alcançar ele mesmo.
Grafo conexo
Um grafo G(V,A) é dito ser conexo se há pelo menos uma cadeia ligando cada
par de vértices deste grafo G.
Figura 14
Grafo desconexo
Um grafo G(V,A) é dito ser desconexo se há pelo menos um par de vértices que
não está ligado por nenhuma cadeia.
Figura 15
Figura 16
Componente conexa
Um grafo G(V,A) desconexo é formado por pelo menos dois subgrafos conexos,
disjuntos em relação aos vértices e maximais em relação à inclusão. Cada um destes
subgrafos conexos é disto ser uma componente conexa de G.
Figura 17
Figura 18
Vértice de corte
Um vértice é dito ser um vértice de corte se sua remoção (juntamente com as arestas a
ele conectadas) provoca um redução na conexidade do grafo. Os vértices x2 em figura
15 e figura 16 são exemplos de vértices de corte.
Ponte
Uma aresta é dita ser um a ponte se sua remoção provoca um redução na conexidade do
grafo. As arestas (x1, x2) em figura 15 e figura 16 são exemplos de pontes.
Base
Uma base de um grafo G(V,A) é um subconjunto B ⊆ V, tal que:
Figura 20
Anti-base
Uma anti-base de um grafo G(V,A) é um subconjunto A ⊆ V, tal que:
Raiz
Figura 21
Anti-raiz
Se a anti-base de um grafo G(V,A) é um conjunto unitário, então esta anti-base é a anti-
raiz de G.
Árvore
Uma árvore é um grafo conexo sem ciclos.
Arborescência
Uma arborescência é uma árvore que possui uma raiz. Aplica-se, portanto, somente a
grafos orientados.
Figura 23
FLORESTA
Uma floresta é um grafo cujas componentes conexas são árvores.
Figura 24
Grafo planar
Um grafo G(V,A) é dito ser planar quando existe alguma forma de se dispor seus
vértices em um plano de tal modo que nenhum par de arestas se cruze.
Ao lado aparecem três representações gráficas distintas para uma K4 (grafo
completo de ordem 4). Apesar de haver um cruzamento de arestas na primeira das
representações gráficas, a K4 é um grafo planar pois admite pelo menos uma
representação num plano sem que haja cruzamento de arestas (duas possíveis
representações aparecem nas figuras a baixo).
K4:
Já uma K5 e uma K3,3 são exemplos de grafos não planares. Estes dois grafos
não admitem representações planares.
K3,3: K5:
Coloração
Seja G(V,A) um grafo e C um conjunto de cores. Uma coloração de G é uma
atribuição de alguma cor de C para cada vértice de V, de tal modo que a dois vértices
adjacentes sejam atribuídas cores diferentes. Assim sendo, uma coloração de G é uma
função f: V → C tal que para cada par de vértices (v,w) ∈ A → f(v) ≠ f(w).
Figura 25
Número cromático
Denomina-se número cromático X(G) de um grafo G ao menor número de cores k, para
o qual existe uma k-coloração de G. O exemplo ao lado mostra uma 3-coloração para o
grafo, que é o número cromático deste grafo.
Figura 26
Isomorfismo
Sejam dois grafos G1(V1,A1) e G2(V2,A2). Um isomorfismo de G1 sobre G2 é um
mapeamento bijetivo f: V1 ↔ V2 tal que (x,y) ∈ A1 se e somente se (f(x),f(y)) ∈ A2, para
todo x,y ∈ V1.
Os grafos ao lado são isomorfos pois há a função { (a,2), (b,1), (c,3), (d,4), (e,6), (f,5) }
que satisfaz a condição descrita acima.
Figura 27
Figura 28
Agora, se dado um SCIE S não existe um outro SCIE S' tal que S' ⊂ S, então S é dito ser
um SCIE maximal. Para o grafo ao lado, são exemplos de SCIE maximais os conjuntos:
{2, 3, 4}, {1, 6} e {4, 5}
Figura 29
Agora, se dado um SCEE S não existe um outro SCEE S' tal que S' ⊂ S,
então S é dito ser um SCEE minimal. Para o grafo ao lado, são exemplos de SCEE
minimais os conjuntos
{x2, x4, x6} e {x1, x5, x3}
Este conceito também pode ser aplicado a grafos não orientados, bastando que
consideremos que todo vértice exterior a T deva ter como adjacente pelo menos um
vértice de T.
Figura 30
DEFINIÇÕES BÁSICAS
Figura 31
Note que nessa definição são permitidos laços (veja a aresta a6) e arestas
paralelas (as arestas a2 e a3, por exemplo). Um grafo que não contém nenhum laço e
nenhumas arestas paralelas é chamado grafo simples. Essa definição não impede que
um grafo seja infinito. Mas esse tipo de grafo não será estudado aqui. Um grafo que
contém no mínimo um laço é um pseudografo. Um grafo que contém arestas paralelas é
um multigrafo.
As pontes de Königsberg.
Figura 32
Para resolver esse problema, Euler o representou com o grafo ilustrado na figura 32.
Com essa representação, e considerando as propriedades do grafos que serão
apresentadas mais tarde nesse curso, é possível resolver facilmente esse problema.
Figura 33
O Problema do Carteiro Chinês O PCC busca um caminho tal que todas as ruas
devem ser visitadas e que o caminho seja mínimo (não que passe, necessariamente,
exatamente uma vez por cada rua do percurso). O estudo de grafos eulerianos é
importante, pois nos dá o melhor resultado possível para um grafo.
PCC Dado um grafo G=(V,E) conexo com pesos nas arestas, o objetivo do
Problema do Carteiro Chinês é encontrar um caminho fechado de peso mínimo
passando por cada aresta pelo menos uma vez. Como é possível esta solução para o
grafo a
Figura 34
Solução para o PCC • Solução 1: Se o grafo for de Euler, então o caminho pode
ser encontrado usando, por exemplo, o algoritmo de Hierholzer. • Solução 2: Se o grafo
não for de Euler, então algumas arestas terão que ser repetidas. A maneira clássica de
resolver este problema é acrescentando arestas artificiais ao grafo original de forma a
obter um novo grafo G’=(V,E’). Isto deve ser feito de maneira que as arestas artificiais
acrescentadas transformem todos os vértices de grau ímpar de G, em vértices de grau
par. As arestas artificiais correspondem aos eventuais percursos repetidos de custo
mínimo entre pares de vértices de grau impar.
Este algoritmo parte de uma estimativa inicial para o custo mínimo e vai
sucessivamente ajustando esta estimativa. Ele considera que um vértice estará fechado
quando já tiver sido obtido um caminho de custo mínimo do vértice tomado como raiz
da busca até ele. Caso contrário ele dito estar aberto.
Para exemplificar, considere o caminho de custo mínimo que vai de s até v, cujo
custo mínimo é 9. O vértice precendente de v na última das tabelas acima é u. Sendo
assim, o caminho é:
s ... uv
s ... x uv
s x uv
Supondo que o peso do arco (y,v) no grafo acima fosse 2, haveriam dois
caminhos de custo mínimo do vértice s para v. Esta duplicidade resulta em dois
precedentes para o vértice v:
Sendo assim, os dois caminhos são dados por: (s ... uv) e
(s ... yv). Seguindo as precedências para u e y nestes dois casos
obtemos os dois caminhos: (s x uv) e (s x yv).
“Em particular, ele reage com rapidez a boas notícias, mas reage devagar
a más notícias (TANEMBAUM, 2003, p. 381).”
Para verificar a velocidade com que o vetor de distância reage a boas notícias,
considere a uma sub-rede de cinco nós, como o exposto na Figura 6. Neste exemplo, a
unidade métrica usada é o número de hops. Suponha que A esteja inativo e que todos os
outros roteadores têm conhecimento desta noticia. Já quando A se tornar ativo, os outros
roteadores terão conhecimento dele através da troca de vetores. Na primeira troca de
vetores, B toma conhecimento de que seu vizinho da esquerda não possui mais retardo
infinito, agora possui o valor 0 até A. Na seguinte troca, C sabe que B tem um caminho
de comprimento 1 até A, com isso, C atualiza sua tabela de roteamento para indicar um
comprimento de 2 até A. Após, D e E saberão de tais caminhos, dessa forma, todos
saberão quais linhas e roteadores voltaram a ser ativos (TANEMBAUM, 2003).
Figura 35
Na próxima troca, C percebe que seus vizinhos alegam ter uma caminho até A
de comprimento 3. Dessa forma, C seleciona um desses caminhos ao acaso e torna 4 a
sua nova distância até A.
Por meio do que foi exposto no parágrafo anterior, percebe-se que as más
notícias possuem uma propagação lenta. Nenhum roteador possui um valor maior que
uma unidade a mais que o valor mínimo de todos seus vizinhos. Gradualmente, todos os
roteadores seguem o seu caminho até o infinito, mas o número de trocas necessárias
varia de acordo com o valor numérico usado para o infinito. Por causa desse motivo, é
melhor definir infinito como o caminho mais longo e mais uma unidade. Devido ao que
foi comentado, surge o nome contagem ao infinito (TANEMBAUM, 2003).
“A ideia por trás do roteamento por estado de enlace é simples e pode ser
estabelecida como cinco partes. Cada roteador deve fazer o seguinte (TANEMBAUM,
2003, p. 383)”.
Descobrir seus vizinhos e aprender seus endereços de rede;
Medir o roteador ou custo até cada um de seus vizinhos;
Criar um pacote que informe tudo o que ele acabou de aprender;
Enviar esse pacote a todos os outros roteadores;
Calcular o caminho mais curto até cada um dos outros roteadores.
Conhecendo Vizinhos
Quando um roteador é iniciado, sua primeira ação é aprender quem são seus
vizinhos. Isso é realizado enviando-se um pacote HELLO especial em cada linha ponto
a ponto. Assim, o roteador na outra ponta deve enviar de volta uma resposta,
identificando-se (TANEMBAUM, 2003)
O método por estado de enlace exige que cada roteador conheça o retardo para
cada um de seus vizinhos. Para que isso seja possível, um pacote especial ECHO é
enviado pela linha, e a outra ponta deve responder tal pacote. Dessa forma, usa a
metodologia de se medir o tempo de ida e volta e dividi-lo por dois. O roteador pode
obter uma estimativa razoável do vizinho (TANEMBAUM, 2003).
Criação de Pacotes
Sub – redes
Figura 38
Pacotes correspondentes
Distribuição de Pacotes
O algoritmo citado possui alguns problemas, mas que podem ser solucionados.
Primeiramente, se os números de sequência se repetirem, uma confusão imperará. A
solução encontrada é usar números de sequência de 32 bits. Com um pacote de estado
de enlace por segundo, seriam necessários 137 anos para um número se repetir.
Para resolver esses problemas, é incluso a idade em cada pacote após o número
de sequência e decrementá-lo uma vez por segundo. Dessa forma, quando a idade
atingir zero, as informações deste roteador serão descartadas.
Cálculo de Rotas
Dessa forma, o algoritmo Dijkstra pode ser executado no local, com a finalidade
de criar o caminho mais curto até todos os destinos possíveis. Os resultados desse
algoritmo podem ser instalados nas tabelas de roteamento e a operação normal pode ser
retomada.