Você está na página 1de 6

Introdução à Teoria dos Grafos

Representações

Matriz de Adjacências

Introdução à Teoria dos Grafos v1 0


v1 v2 v3 v4
1 0 0 1 1 1
v5 v6 v7
Temos mij = 1
  se e somente
v2 1 0 1 0 0 0 1
0 se vi e vj são
v3 1 0 1 0 1 1
  vizinhos.
M= v4 0 0 1 0 1 1 1
v5
1 0 0 1 0 1 0 
e5
v1


e1
Instituto Multidisciplinar v5 e12
e6
e7

v6 1 0 1 1 1 0 1 e4
v6 e13
v7
e14 v2

Universidade Federal Rural do Rio de Janeiro  


e11

e10 e8
1 1 1 1 0 1 0 e2
v7 v4 e9

e3 v3

Introdução à Teoria dos Grafos Introdução à Teoria dos Grafos

Representações Definições

Listas de Adjacências
Um caminho de um vértice s para um vértice t em um grafo G é
uma seqüência v1 , K , vk de vértices tal que s = v1 , t = vk e
v1 v2 v5 v6 v7
e5
v1
e1
(v j , v j +1 ) pertence a E(G) , para 1 ≤ j < k . (Ver [1].)
v2 v1 v3 v7 v5 e12
e6
e7

e13 e14

v3 v2 v4 v6 v7
e4 e11
v6
v7
v2
O caminho é dito simples se todos os vértices v1 , K , vk forem
v4 e10 e9
e8 e2
distintos. O comprimento do caminho v1 , K , vk é o seu número
e3
v4 v3 v5 v6 v7 v3
de arestas (i.e. dado por k - 1).
v5 v1 v4 v6
Um ciclo é um caminho no qual v1 = vk .
v6 v1 v3 v4 v5 v7
v7 v1 v2 v3 v4 v6 Um grafo é completo se entre cada par de vértices existe uma aresta
(ver familias de grafos).

Introdução à Teoria dos Grafos Introdução à Teoria dos Grafos

Definições Exemplos:

v6 v2
Um grafo G = ( V, E ) é dito ser uma árvore se for acíclico (i.e. não v1
v5 Não é árvore pois
possuir ciclos) e conexo (i.e. existir um caminho entre qualquer par de possui um ciclo.
vértices). v8 v7

v4 v3
G
Um grafo G = ( V, E ) é dito ser uma floresta se for acíclico (i.e. não G v1

possuir ciclos). v2 v3

Não é árvore pois v4 v5 v6 v7


Ex.:
não é conexo. v8

T F
Um grafo G = ( V, E ) é ponderado quando cada aresta possui um
árvore floresta peso associado a ela, dado por uma função.

1
Introdução à Teoria dos Grafos Introdução à Teoria dos Grafos

Definições Definições

O grafo complemento do grafo G = (V, E) é grafo denotado por G Se G ≡ G então G é dito auto-complementar.
com V(G) = V(G) e E(G) = { (x, y) | x, y ∈ V e (x, y) ∉ E(G) }.
Ex.:
Ex.: (Ver Cogis e Robert [2].)

a b a b a b a b

e c e c e c e c

d d d d
G G G G

Introdução à Teoria dos Grafos Introdução à Teoria dos Grafos

Definições Definições

Dizemos que G = (V, E ) é um grafo bipartido se temos uma partição Questão: Quantos grafos com 3 vértices existem?
de seu conjunto de vértices V = V1 ∪ V2 , com V1 ∩ V2 = ∅ , de
forma que toda aresta de G possui um extremo em V1 e outro Uma primeira resposta é apresentada pelos grafos abaixo.
extremo V2 . (Ver Cogis e Robert [2].)

Ex.:
G a
e
b
f
c
Mas imagine 3 casas a, b e c com 3 caminhos de terra interligando
g
V1 d V2 elas. Desejamos asfaltar dois dos 3 caminhos para conectá-las. (Ver
Cogis e Robert [2].)

Introdução à Teoria dos Grafos Introdução à Teoria dos Grafos

Definições Definições

Os três grafos abaixo são, de uma certa maneira o mesmo grafo. Dizemos que dois grafos G = (V, E) e G’ = (V’, E’) são isomorfos se
existe uma bijeção f de V em V’ tal que, para todos os vértices x e
a a a
y de G , x é adjacente a y em G se, e somente se, f(x) é adjacente
a f(y) em G’.
b c
c é apresentada
b b c
Uma primeira resposta pelos grafos abaixo.

a a a
Mas se a, b e c representam as 3 casas, para seus moradores estes
grafos certamente não são o mesmo grafo. b c b c b c

A questão do número de grafos com n vértices pode, portanto, receber Grafos Isomorfos (Dois a Dois)
duas respostas, dependendo se os ‘nomes’ dos vértices possuem
importância ou não.

2
Introdução à Teoria dos Grafos Introdução à Teoria dos Grafos

Definições Definições

Neste caso, dizemos que f é um isomorfismo de G sobre G’. Os dois grafos a seguir são auto-complementares (são isomorfos a
seus complementares).
Se existe uma bijeção f de V nele mesmo tal que x é adjacente a y
se, e somente se f(x) é adjacente a f(y), dizemos que f é um Exemplo:
automorfismo de G.
G1 G2
Exemplo:
a A aplicação f tal que f(a) = a,
G e b f(b) = e, f(e) = b, f(d) = d, f(c) = c
define um automorfismo do
d c grafo G.
Definremos, a seguir, algumas familias de grafos especiais com n
vértices. (Ver [2].).

Introdução à Teoria dos Grafos Introdução à Teoria dos Grafos

Definições Definições

O grafo completo Kn em que todos os vértices são adjacentes entre si. O grafo bipartido completo Kp,q em que podemos particionar seu
conjunto de vértices em duas classes de cardinalidades p e q, de
forma que cada vértice de uma classe seja adjacente a cada vértice da
Exemplos: outra classe e somente a eles.

Exemplo:

K1 K2 K3 K4 K5

K2,3

Introdução à Teoria dos Grafos Introdução à Teoria dos Grafos

Definições Definições

O grafo caminho Pn em que podemos organizar seu conjunto de O grafo ciclo Cn em que podemos organizar seu conjunto de vértices
vértices em uma sequência tal que todo vértice seja adjacente a seu em uma sequência tal que todo vértice seja adjacente a seu
predecessor e a seu sucessor, e somente a estes, salvo o primeiro e o predecessor e a seu sucessor, e somente a eles, exceto o primeiro e o
último com apenas um vizinho. último que são adjacentes entre si.

Exemplos: Exemplos:

P7

P4
C8 C5

3
Introdução à Teoria dos Grafos Introdução à Teoria dos Grafos

Definições Definições

A estrela Sn de ordem n em que um vértice é adjacente a todos os Questão: Quantos grafos com 4 vértices existem? E se não
outros e é o único vizinho de tais vértices. (Ver [2].) consideramos isomorfismos?
Dizemos que um grafo é regular se todos os seus vértices possuem o
Exemplos:
mesmo grau.

Exemplos:

S9 S6
C5 G K2

Introdução à Teoria dos Grafos Introdução à Teoria dos Grafos

Definições Definições

Em particular, se todos os vértices de um grafo G possuem grau r, Nos multigrafos as duas extremidades de uma aresta podem ser
dizemos que G é r-regular. (Abaixo, um grafo 3-regular.) idênticas, e duas arestas distintas podem ter extremidades comuns.

Exemplo:
Exemplo:

Grafo de Petersen
G

Definimos ∆ = max {d (v)} e δ = min {d (v )} .


v∈V ( G ) v∈V ( G )

Introdução à Teoria dos Grafos Introdução à Teoria dos Grafos

Definições Algoritmos de Busca

Teorema 1 Em qualquer grafo G = (V, E) a soma dos graus de todos Busca em Largura
os seus vértices é igual a duas vezes o seu número de arestas, isto é,
Um dos algoritmos mais simples de busca em grafos.
 d (v ) = 2 | E | .
v∈V
(Os algoritmos de Prim e Dijkstra utilizam idéias similares.)

Dado um grafo G = (V, E) e um vértice fonte s o


Para vermos este fato, como cada aresta possui dois extremos, então algoritmo sistematicamente explora as arestas de G para
cada aresta contribui com 2 unidades para a soma dos graus. Logo o “descobrir” todo vértice que for alcançável a partir de s.
resultado segue.
Calcula a distância ― ou seja, o menor número de arestas
Corolario 1 Em qualquer grafo a soma dos graus de todos os seus
vértices é par e o número de vértices de grau ímpar é par. (Ver [2].) ― de s a todo vértice alcançável. (Ver Cormen et al. [1].)

4
Introdução à Teoria dos Grafos Introdução à Teoria dos Grafos

Calcula a árvore de busca em largura. Um vértice cinza pode ter vértices brancos adjacentes.
Descobre todos os vértices a uma distância k de s antes A árvore da busca em largura inicialmente contém apenas a
de descobrir vértices com distância k + 1. sua raiz s.
Para o acompanhamento de cada etapa, o algoritmo irá Quando um vértice branco v é descoberto pela leitura da
colorir os vértices com branco, cinza ou preto. lista de adjacências de um vértice já descoberto u , o
vértice v e a aresta (u, v) são adicionados à árvore.
Inicialmente, todos os vértices possuem a cor branca.
O vértice u é dito predecessor do vértice v .
Um vértice descoberto torna-se cinza ou preto.
Adicionalmente ao grafo G = (V, E), representado por listas
Se (u , v) ∈ E e o vértice u é preto, então ou o vértice v é de adjacências, o algoritmo de busca em largura mantém
cinza ou preto. Isto é, todos os vértices adjacentes a um outras estruturas de dados.
vértice preto são descobertos. (Ver apresentação em [1].)

Introdução à Teoria dos Grafos Introdução à Teoria dos Grafos

Busca_em_Largura ( G, s )
A cor de cada vértice u ∈ V é armazenada no array cor[u], 1. para cada vértice u ∈ V[G] - {s} faça
2. cor[u] = branco
e o predecessor de u é armazenado em pred[u]. 3. d[u] = ∞
4. pred[u] = -1
Se u não possui predecessor, então pred[u]= -1. (Como 5. cor[s] = cinza
6. d[s] = 0
exemplo, podemos ter u = s ou u ainda não ter sido 7. pred[s] = -1
descoberto.) 8. Q = ∅
9. enfileira(Q,s)
10. enquanto Q ≠ ∅ faça
A distância entre a fonte s e o vértice u calculada pelo 11. u = desenfileira(Q)
algoritmo é armazenada em d[u]. 12. para cada v ∈ Adj[u] faça
13. se cor[v]==branco então
14. cor[v] = cinza
O algoritmo também faz uso de uma fila Q ( FIFO = first 15. d[v] = d[u] + 1
16. pred[v] = u
in first out ), para o gerenciamento dos vértices de cor cinza 17. enfileira(Q,v) (Ver Cormen et al. [1].)
e requer tempo O(n + m). 18. cor[u] = preto

Introdução à Teoria dos Grafos Introdução à Teoria dos Grafos

Algoritmos de Busca Se existirem vértices não descobertos remanescentes, então


um deles é selecionado como nova fonte e a busca é
Busca em Profundidade repetida a partir de tal fonte.
Na busca em profundidade, são exploradas as arestas do Este procedimento é repetido até que todos os vértices
vértice mais recentemente descoberto v que ainda possui tenham sido descobertos.
arestas não exploradas.
Como na busca em largura, um vértice é descoberto durante
Quando todas as arestas de v tiverem sido exploradas, a a leitura de uma lista de adjacências de um vértice já
busca “volta” para explorar as arestas do vértice a partir do descoberto u. Assim, u é o predecessor de v , isto é, temos
qual v foi descoberto. pred[v] = u.

O método prossegue até que todos os vértices alcançáveis a Diferentemente da busca em largura, o subgrafo de
partir de v tenham sido descobertos. predecessores da busca em profundidade pode ser uma
floresta, ao invés de uma árvore. Requer tempo Θ(V+E ).

5
Introdução à Teoria dos Grafos Introdução à Teoria dos Grafos

O subgrafo predecessor da busca em profundidade é Ao término, o vértice torna-se preto, isto é, quando sua lista
definido como sendo o grafo Gπ= (V,Eπ ), onde de adjacências tiver sido examinada completamente.

Eπ = {(pred[v], v) : v ∈ V e pred[v] ≠ −1} Além da floresta de busca em profundidade, o método


imprime duas marcas de tempo para cada vértice. A
O subgrafo predecessor forma uma floresta de busca em primeira marca d[v] registra quando o vértice v foi
profundidade formada por várias árvores de busca em primeiramente descoberto (tornando-o cinza). A segunda
profundidade. marca f[v] registra quando a busca termina a leitura da
lista de adjacências de v (tornando-o preto).
Como na busca em largura, os vértices são coloridos
durante a busca, indicando seus estados. Tanto d[v] quanto f[v] são inteiros variando entre 1 e 2n.

Cada vértice é inicialmente branco, tornando-se cinza Além disso, para todo vértice u, temos
quando é descoberto na busca. d[u] < f[u].

Introdução à Teoria dos Grafos Referências

Busca_em_Profundidade ( G )
1. para cada u ∈ V[G] faça
2. cor[u] = branco [1] T.H. Cormen, C.E. Leiserson, R.L. Rivest, Introduction to Algorithms, MIT Press, 1990.
3. pred[u] = -1
4. tempo = 0 [2] O. Cogis, C. Robert. Théorie des Graphes – Au-delà des Ponts de Königsberg –
5. para cada u ∈ V[G] faça Problèmes, Théorèmes, Algorithmes, Vuibert, 2003.
6. se cor[u]==branco então
7. visita(u)

visita ( u )
1. cor[u] = cinza
2. d[u] = tempo = tempo + 1
3. para cada v ∈ Adj[u] faça
4. se cor[v]==branco então
5. pred[v] = u
6. visita(u)
7. cor[u] = preto
8. f[u] = tempo = tempo + 1 (Ver Cormen et al. [1].)

Você também pode gostar