Escolar Documentos
Profissional Documentos
Cultura Documentos
d
c f
2
Um circuito ser simples se nenhum vrtice aparecer mais de uma vez, exceto o
primeiro e o ltimo. Um circuito simples chamado de ciclo.
Definio: Dado um grafo, dizemos que vrtice v adjacente a vrtice w (ou aresta E) se
existe aresta (v, w) no grafo (ou e = (v, w)).
Definio: Um grafo conectado se existe um caminho entre dois vrtices quaisquer do
grafo.
Definio: Dgrafo um grafo dirigido.
Definio: O grau de um vrtice o nmero de arestas adjacentes a ele. Em um grafo
dirigido, o grau de entrada de um vrtice v o nmero de arestas (w, v) e o grau de sada
o nmero de arestas (v, w). Exemplo:
v
v possui grau de entrada 2 e grau de sada 1.
Definio: Uma fonte um vrtice com grau de entrada 0 e grau de sada 1. Um
sumidouro um vrtice com grau de sada 0 e grau de entrada 1.
Definio: Um grafo completo quando existe uma aresta entre dois vrtices quaisquer
do grafo. O grafo completo de n vrtices denotado por K
n
. Exemplos:
K
2
K
3
K
4
K
5
(a) (b) (c) (d)
Definio: Um subgrafo G = (V, E) de um grafo G = (V, E) um grafo tal que V V e E
E. Exemplos:
a b a b
G G G c d
c d c
Definio: Um grafo G = (V, E) bipartido se V pode ser dividido em dois conjuntos V
1
e
V
2
tal que toda aresta de G une um vrtices de V
1
a outro de V
2
. Exemplos:
K
2, 3
K
3, 3
3
Um grafo bipartido completo (GBC) possui uma aresta ligando cada vrtice de V
1
a
cada vrtice de V
2
. Se n
1
= |V
1
| e n
2
= |V
2
|, o GBC denotado por K
n1, n2
.
Definio: Dados dois grafos G
1
= (V
1
, E
1
) e G
2
= (V
2
, E
2
), dizemos que G
1
isomorfo a G
2
se e somente se existe uma funo f: V
1
V
2
tal que (v, w) E
1
se (f (v), f (w)) E
2
,
para todo v, w V
1
. Exemplo:
1 2 a e
5 c
3 b d
4
f = {(1, b), (5, c), (3, d), (2, a), (4, e)}
1.2 Histria
O primeiro problema de teoria dos grafos foi o das pontes de Knisberg. Como no
desenho:
terra: v
Rio x y
terra: w
Esta cidade possua um rio com duas ilhas conectadas por sete pontes como
mostra o desenho acima. O problema saber se possvel caminhar de um ponto
qualquer da cidade e retornar a este ponto passando por cada ponte exatamente um vez.
Euler resolveu este problema criando um grafo em que terra firme vrtice e ponte
aresta:
v
x y
w
Quando caminhamos por um vrtice, ns temos que entrar e sair dele (ou vice-
versa, no caso do ponto inicial), o que significa que usamos um nmero par de arestas
cada vez que passamos por um vrtice.
Como o grafo acima possui vrtices com nmero mpar de arestas, a resposta para
o problema NO.
1.3 Aplicaes de Teoria dos Grafos
4
Nos itens abaixo so detalhados alguns problemas que podem ser resolvidos
utilizando teoria dos grafos.
Existem funes inteis no programa?
Neste exemplo utilizaremos a linguagem C. Considere que funes so vrtices e existe
aresta de f para g se existe chamada a g no corpo de f:
void f (int n)
{ if (n > 5)
g ( );
}
Monta-se um grafo de todo o programa:
main
p f k
m n
g h
A execuo do programa comea na funo main que pode chamar as funes p e f. A
funo f pode chamar g e h. Claramente, funes k, m e n nunca sero chamadas e
podem ser removidas na ligao do programa.
Usando a mesma representao, podemos descobrir se um programa possui recurso
direta ou indireta. Pode existir recurso se existe ciclo no grafo:
f
h g
Um vendedor deve passar por vrias cidades e retornar ao ponto inicial. Qual o trajeto
de menor distncia possvel ?
Qual a menor distncia entre duas cidades a e c ?
b
300 200
a 100 c
50 20
30 70
Como ir da cidade "a" a "c" passando pelo nmero mnimo de cidades?
Quantas cores so necessrias para colorir um mapa no plano?
5
B
B
C D C D
A
A
E
E
Outros:
- Labirinto
- Eliminao de cdigo morto
- make do Unix
1.4 Algoritmos de Busca
Busca em profundidade (Depth-First Search DFS)
Uma DFS comea em um vrtice v chamado raiz e caminha por todos os vrtices
que podem ser alcanados a partir de v. Observe que v um parmetro passado ao
algoritmo DFS. Qualquer vrtice pode ser a raiz. Diremos que v conectado a w se
existir a aresta (v, w). Os desenhos abaixo mostram a ordem de visita aos vrtices de
acordo com buscas em profundidade comeando em v. Vrtice numerado n visitado
antes de n+1.
v v
1 1
7
2 6 2 4
3 5
5 3
4
Observe que, se executado manualmente por duas pessoas, o algoritmo DFS
pode produzir duas numeraes diferentes. Por exemplo, no grafo da esquerda acima as
numeraes 1 2 3 4 5 6 7 e 1 6 5 2 3 4 7 esto ambas corretas para DFS.
O algoritmo para busca em profundidade marca v (raiz) como visitado, pega um
vrtice w conectado a v (a aresta (v, w) existe) e continua a DFS em w. Depois que a
busca em w termina, o algoritmo toma outro vrtice z conectado a v ainda no visitado e
faz a busca em z. O algoritmo termina quando todos os vrtices ligados a v j foram
marcados (visitados). O algoritmo para DFS mostrado a seguir e incorpora cdigo para
fazer preWork e postWork, que so cdigos executados ao marcar um vrtice e aps
visitar uma aresta. PreWork e postWork dependem da finalidade para a qual DFS est
sendo utilizada.
Algorithm DFS(G, v)
6
Entrada: G = (V, E) e um vrtice v V.
begin
marque v
faa preWork sobre v
for each aresta (v, w) E do
if w no foi marcado
then
DFS(G, w);
faa postWork para (v, w)
endif
end
O algoritmo DFS pode ser usado para percorrer todos os vrtices de um grafo e
para descobrir se um grafo conectado ou no. Se, aps uma DFS, todos os vrtices
forem visitados, ento o grafo conectado.
Busca em largura (Breadth-First Search)
Uma BFS feita em um grafo G = (V, E) comeando em um vrtice v. Primeiro o
algoritmo visita v e todos os vrtices conectados a v, chamados filhos de v. Isto , o
algoritmo visita vrtices w tal que (v, w) E.
No segundo passo, o algoritmo visita todos os netos de v. Isto , os vrtices que
no esto conectados diretamente a v mas esto conectados a algum vrtice que est
conectado a v. O algoritmo prossegue deste modo at que todos os vrtices alcanveis
por v sejam visitados.
O primeiro passo do BFS visita todos os vrtices que esto a uma aresta de
distncia de v, o segundo passo visita vrtices que esto a duas arestas de distncia de
v e assim por diante. Os desenhos a seguir ilustram esta interpretao do BFS.
v v 3
1 a 1 b
b 4 a
2 3 c d e 5
5
e 6 f 7 g 4 2 6
c d f
8 h
O algoritmo dado abaixo.
Algorithm BFS (G, V)
Entrada: Grafo G = (V, E) e vrtice v.
begin
marque v
coloque v no fim da fila F
7
while F no vazia do
begin
remova o primeiro vrtice w de F
faa preWork sobre v
for each aresta (w, z), tal que Z no marcado, do
begin
marque z
insira z no fim da fila F
end
end
end
No h postWork para busca em largura.
1.5 Exerccios
Algumas recomendaes para fazer esta lista e para a prova:
todas as questes devem ser justificadas ou provadas;
voc pode fazer quaisquer algoritmos pedidos nos exerccios em linguagem de
alto nvel, a mesma empregada nos algoritmos DFS e BFS;
se voc no sabe fazer uma prova, experimente trabalhar com exemplos de
grafos at ter uma idia intuitiva de como deve ser a prova;
use e abuse de induo finita, a ser ainda estudada;
o contrrio de "todos os elementos do conjunto satisfazem P" "existe um
elemento do conjunto que no satisfaz P" e vice-versa. Esta informao
utilizada em provas por absurdo onde necessrio negar a proposio que se
quer provar;
quando provar algo por absurdo, escreva o contrrio da hiptese para deixar
claro o que voc est fazendo;
os teoremas do tipo "A vlido se e somente se B vlido" exigem duas
provas: "A implica B" e "B implica A";
uma proposio do tipo "Se A ocorrer, ento B pode acontecer" necessita
somente de um exemplo para ser provado;
O nmero entre parnteses aps o nmero do exerccio diz a importncia
relativa deste exerccio. Nmeros maiores so mais importantes.
1 Faa um grafo com trs vrtices de grau par e dois de grau mpar. Tente ficar com
apenas um de grau mpar. Acrescente uma aresta no grafo de tal forma que existam
quatro vrtices de grau par. Acrescente um vrtice no grafo original e qualquer nmero
de arestas de tal forma que o nmero de vrtices de grau mpar fique igual a trs. Pode
ser que algumas das operaes anteriores no seja possvel.
2 Prove: em um grafo qualquer, h um nmero par de vrtices de grau impar. O grau de
um vrtice o nmero de arestas adjacentes a ele. Dica: este teorema pode ser provado
apenas com informaes locais a cada vrtice. Utilize as regras da aritmtica na prova.
3 Considere uma representao por grafos de uma entrega de presentes de amigo
invisvel onde as pessoas so os vrtices e existe aresta de v para w se v ir presentear
w. Diga qual a forma geral do grafo assim formado.
4 Faa a busca em profundidade nos grafos abaixo, comeando em v.
8
v v
v a
b a
c b b
d e e d c c
d
e
f g
5 Em orientao a objetos, os mtodos de uma classe B so os mtodos definidos em B e
aqueles herdados das superclasses de B, o que pode ser representado por um grafo.
Sendo met (B) o conjunto dos mtodos definidos em uma classe (sem contar os mtodos
herdados) e super (B) o conjunto das superclasses de B, faa um algoritmo que retorne
todos os mtodos de uma dada classe usando a representao em grafos. Considere que
todas as classes definam mtodos com nomes diferentes entre si.
6 Explique como BFS pode ser usado para descobrir a distncia mnima, em nmero de
arestas, entre dois vrtices de um grafo.
7 Faa um algoritmo que elimina de um programa todas as subrotinas que nunca podero
ser chamadas em execuo.
8 Encontre um caminho entre a e j no grafo abaixo que passe por todas as arestas
exatamente uma vez.
b
c
a
j
d
h
i
e g
f
9 Faa um algoritmo que particione um grafo G em seus componentes conexos G
1
, G
2
,
G
n
.
10 Faa DFS e BFS nos grafos abaixo, comeando em v.
9
v
v
(b)
v
(a)
(c)
11 Encontre, se houver, um circuito em cada um dos grafos acima.
12 Faa um algoritmo para coleta de lixo em uma representao do programa em forma
de grafos e outras estruturas de sua escolha.
13 Um sistema de computao (banco de dados, sistema operacional) possui uma senha
de acesso para cada usurio que d direito ao uso do sistema. Um usurio pode dar a
outro o direito de usar sua rea (ou conta). Se x puder usar a rea de y e y puder usar a
de z, ento x poder usar a rea de z.
Usando uma entrada de dados de sua escolha, faa um algoritmo que retorna true
se um usurio A pode usar a rea de B.
14 Dado um grafo G = (V, E), construa um grafo G = (V, E) tal que (v, w) E se existe
caminho de v para w em G. Usando esta idia, resolva o algoritmo anterior em tempo
constante, aps pr-processar os dados de entrada.
15 Prove que, dadas seis pessoas, uma de duas coisas acontece: ou trs delas se
conhecem ou trs no se conhecem.
16 Considere o seguinte algoritmo para construir uma rvore de DFS para um grafo G:
Algoritm Build_DFS_Tree(G, v)
Entrada: G = (V, E) e v um vrtice de V
Sada: T, a rvore DFS de T, inicialmente vazia.
para cada vrtice, v.DFS inicializado com um nmero de
busca
begin
Inicialmente, DFS_number = 1;
use DFS com o seguinte preWork:
v.DFS = DFS_number;
DFS_number++;
e o seguinte postWork:
if w no estava marcada, adicione a aresta (v, w) em T
end
Um vrtice v chamado de ancestral de w em T com raiz r se v est no caminho nico
entre r e w. Ento w um descendente de v.
10
Prove que cada aresta de um grafo G = (V, E) ou pertence rvore T construda por
Build_DFS_Tree ou conecta dois vrtice de G, um dos quais um ancestral de outro
em T.
17 Prove: seja G = (V, E) um grafo dirigido e seja T = (V, F) uma rvore DFS de G. Se (v,
w) uma aresta de E tal que v.DFS < w.DFS, ento w um descendente de v na rvore
T.
18 A afirmao da questo anterior vale tambm para grafos no dirigidos ?
19 Faa um grafo dirigido de tal forma que,
a) se DFS comear em um dos vrtices, todos os demais so atingidos. Se comear em
qualquer dos outros vrtices, nenhum ser atingido;
b) se DFS comear no vrtice v, quatro dos oitos vrtices sero atingidos. Se a DFS
comear em w e z, trs vrtices sero atingidos. Se comear em t, u e z, dois vrtices
sero atingidos. Se comear em k e m, apenas o vrtice s ser atingido, que um
sumidouro.
20 Verifique se uma rvore binria balanceada. Use apenas preWork e postWork de
DFS.
21 Um subgrafo induzido de G = (V, E) um grafo H = (U, F) tal que U V e F inclui
todas as arestas (v, w) em E tal que v e w esto em U. Uma rvore de espalhamento de
G um subgrafo conectado que contm todos os vrtices e nenhum ciclo.
Seja G = (V, E) um grafo no dirigido conectado e seja T uma rvore DFS de G com raiz
em v. Prove:
a) Seja H um arbitrrio subgrafo induzido de G. Mostre que a interseo de T e H no
necessariamente a rvore de espalhamento de H;
b) Seja R uma subrvore de T e seja S um subgrafo de G induzido pelos vrtices em R.
Prove que R pode ser uma rvore de DFS de S.
22 Voc est organizando uma conferncia de cientistas de diferentes disciplinas e voc
tem uma lista de pessoas que poderia chamar. Assuma que qualquer pessoa na lista viria
para a conferncia desde que tivesse um certo nmero de pessoas da rea para trocar
idias. Para cada cientista, h uma lista de outros cientistas com quem ele poderia
conversar (trocar idias). Faa um algoritmo para convidar o nmero mximo de
cientistas possvel assumindo que qualquer um deles viria se tivesse >= 3 pessoas da
mesma rea para conversar.
11
2 Complexidade de Algoritmos
Dizemos que uma funo g (n) O (f (n)) se existem constantes c e N tal que, para
n N, g (n) c f (n).
f, g
g
f
N n
Por exemplo, 2n + 1 = O (n) pois 2n + 1 3n para n 1. Ou 2n
2
+ 5n + 10 = O (n
2
)
pois 2n
2
+ 5n + 10 50 n
2
para n 1. A igualdade g (n) = O (f (n)) diz que cf (n) supera
g (n) para todos os nmeros maiores que um certo N. Ento:
O (log
2
n) = O (log
10
n) = O (log n)
O (3n) = O (5n + 7) = O (n)
O (a
r
n
k
+ a
k - 1
n
k - 1
+ + a
1
n + a
0
) = O (n
k
)
n = O (n
2
)
A notao O usada para estimar o nmero de passos executados por dado
algoritmo considerando que sua entrada possui n bits. Como n bits implica n/8 bytes ou
n/32 (ou n/16) palavras, podemos associar n com nmero de bits, bytes ou palavras, j
que a diferena entre eles de uma constante ( 8, 32 ou 16).
Por exemplo, vamos analisar o algoritmo que, dado um vetor de tamanho n,
encontra o seu maior elemento. Os passos em que estamos interessados so as
comparaes (<, <=, >, >=, ==, !=). Isto , queremos saber quantas comparaes
teremos.
Para encontrar o maior elemento, usamos todos os elementos do vetor uma vez e
fazemos n-1 comparaes. Ento dizemos que a complexidade deste algoritmo O(n).
Um dos algoritmos para ordenar um vetor toma o maior elemento e o coloca na
ltima posio. Ento o algoritmo chama a si mesmo para ordenar os primeiros n-1
elementos do vetor. Ento, o nmero de comparaes feitas :
n-1 para encontrar o maior elemento
n-2 para encontrar o segundo maior elemento
n-3 para encontrar o terceiro maior elemento
...
1 para encontrar o maior dentre os dois ltimos elementos
Assim, o total de comparaes (n-1) + (n-2) + ... + 1 = (1 + (n-1))(n-
1)/2 = (n
2
- n)/2 = O(n
2
)
Em geral, no se especifica o significado da complexidade (nmero de
comparaes, nmero de testes, visitas a vrtices, etc) porque este significado pode ser
deduzido pelo contexto. Por exemplo, quando dizemos que um algoritmo para ordenao
O(nlog n), estamos nos referindo a nmero de comparaes.
Se um algoritmo para grafos possuir complexidade O (|E|), (considerando um
grafo G (V, E) como entrada), ento cada aresta ser visitada um nmero constante de
vezes. No interessa quantas vezes (um, dois, ), desde que seja um nmero que
12
independe do nmero de vrtices e arestas do grafo. As barras em |E| indicam a
cardinalidade do conjunto E, que o seu nmero de elementos (nmero de arestas).
Vejamos a complexidade dos algoritmos vistos at agora.
DFS: Cada aresta visitada duas vezes, uma de cada vrtice a que ela adjacente:
1
2
Se vrtices so computadores (ou processadores) e as arestas so ligaes entre
eles, um computador pode falhar e ainda sim os outros sero capazes de conversar entre
si.
Como caminhos disjuntos em vrtices implica em caminhos disjuntos em arestas,
uma ligao pode ser interrompida e ainda assim todos os computadores sero capazes
de se comunicar entre si.
Grafos bi-conectado possuem um alto grau de conectividade. Situao oposta
acontece com rvores. Elas so conectadas mas a remoo de qualquer vrtice que no
seja folha (ou mesmo uma aresta) as desconecta.
Ento, se quisermos ligar vrios computadores utilizando o menor nmero de
ligaes possvel, mas de tal forma que todos possam conversar entre si, devemos usar
uma rvore.
7.1 Ciclos
Problema: Faa um algoritmo que retorna true se um grafo no dirigido G (V, E) possui
um ciclo, false caso contrrio.
Algorithm HaCiclo (G (V, E), v): boolean
{ Faz uma busca em profundidade no grafo }
Entrada: um grafo G e um vrtice v de G
begin
marca v
Seja S o conjunto de arestas (v, w) tal que w no foi marcado
for each aresta (v, w) de S do
if w no foi marcado
then
if HaCiclo (G, w)
then
retorne true;
endif
else
{ achou um ciclo - no necessrio continuar
a busca em vrtices adjacentes a v }
return true;
endif
return false;
27
end
O algoritmo HaCiclo para grafos dirigidos, HaCicloDirig, faz uma busca em
profundidade e retorna true (h ciclo) se h aresta do vrtice corrente (v) para um outro
vrtice w que est na pilha construda pela busca em profundidade. O ciclo encontrado
formado pelo caminho de w at v e a aresta (v, w):
raiz
w
v
incio
Definio: Um circuito Hamiltoniano em um grafo conectado G um circuito que inclui
cada vrtice de G exatamente uma vez.
Encontrar um circuito Hamiltoniano (CH) claramente mais difcil que encontrar
um caminho Eureliano (CE), pois cada vez que atingimos (num percurso) um vrtice v a
partir de uma aresta "e", nunca mais podemos usar v e quaisquer de suas arestas. Em
um CE, no poderamos usar "e", mas poderamos usar v e suas outras arestas.
CH
CE
O problema Encontre um CH para um grafo G NP-completo (Veja Seo 16) e
portanto nenhum algoritmo ser estudado.
O Problema do Caixeiro Viajante (The Traveling Salesman Problem)
Um vendedor quer visitar um grupo de cidades comeando e terminando em uma
mesma cidade de tal forma que o custo da viagem (distncia percorrida) seja o menor
possvel e que cada cidade seja visitada apenas uma vez. Ou seja, o problema
encontrar um circuito Hamiltoniano de custo mnimo. Naturalmente, este problema NP-
completo.
7.4 Exerccios
50 Faa um grafo que contenha um circuito que no ciclo.
51 No Unix possvel associar um outro nome a um arquivo ou diretrio j existente
atravs do utilitrio ln:
32
ln NovoNome Arq
Aps a execuo do comando acima, NovoNome ser um alis para Arq. ln pode criar
situaes perigosas, como fazer uma associao recursiva:
$cd /A/B
$ln C /A
$ o prompt do Unix. Neste caso estamos colocando o diretrio A, com nome C, dentro
do prprio A. Crie um novo comando safeln, em linguagem de alto nvel, que usa ln e
no permite este tipo de situao.
52 Faa um algoritmo que retorna true se um programa pode ser recursivo em execuo.
Assuma que a entrada do algoritmo dada em forma de um grafo usando uma
representao de sua escolha.
53 Em um sistema operacional, um processo ter sua execuo suspendida se ele
aguardar um recurso (impressora, disco, ) que est sendo usado por outro processo.
Esta situao chamada de deadlock.
Faa um algoritmo que detecta se h deadlock entre os processos. Por exemplo,
processo A espera B liberar recurso R
1
e B espera A liberar recurso R
2
.
54 Prove: se, aps a remoo de uma aresta de um grafo, temos um ciclo, o grafo
original possui um ou mais ciclos.
55 Se A a matriz de adjacncias de um grafo, a
ij
= 1 se existe uma aresta entre vrtices
i e j; isto , se existe um caminho de uma aresta de comprimento 1 (um) entre i e j.
Prove que (a
ij
)
2
, que o elemento a
ij
de A
2
, o nmero de caminhos entre i e j de
tamanho 2. Estenda este resultado para A
k
.
56 Dois ciclos em um grafo G' possuem uma e s uma aresta em comum. Prove que o
grafo obtido pela remoo desta aresta possui pelo menos um ciclo.
57 Um istmo uma aresta tal que a sua remoo desconecta o grafo. Mostre que uma
aresta um istmo se e somente se ela no est contida em nenhum circuito.
58 Um plotter deve desenhar um certo conjunto de pontos isolados no papel de tal forma
que a cabea de impresso mova o menos possvel. Mapeie este problema para grafos.
59 Prove: Se G um grafo onde o grau de cada vrtice pelo menos dois, ento G
contm um ciclo.
60 Prove: Dois vrtices quaisquer de um grafo bi-conectado esto contidos em um ciclo.
61 Justifique: dois caminhos podem possuir vrtices em comum sem possuir arestas em
comum.
62 Seja G = (V, E) um grafo no dirigido conectado e seja F o conjunto de vrtices com
grau mpar (o grau de um vrtice o nmero de arestas ligadas a ele). Ento podemos
dividir F em pares e encontrar caminhos disjuntos em arestas conectando cada par.
63 Seja G um grafo no dirigido tal que cada vrtice possui um grau par. Projete um
algoritmo de tempo linear para direcionar as arestas de G de tal forma que, para cada
vrtice, o grau de sada igual ao de entrada.
33
8 Menor Caminho entre Vrtices
Definio: Um grafo com comprimentos (ou pesos) associa a cada aresta um
comprimento que um nmero real positivo. O comprimento de um caminho a soma
dos comprimentos de suas arestas.
Problema: Calcular o menor caminho de um vrtice v a todos os outros de um grafo
dirigido.
A idia considerar os vrtices do grafo na ordem dos comprimentos de seus
menores caminhos de v. Primeiro, tomamos todas as arestas saindo de v. Seja (v, x) a
aresta de menor comprimento entre elas. Ento o menor caminho entre v e x a aresta
(v, x) por que qualquer outro caminho envolveria outra aresta (v, w), w x que sozinha j
possui comprimento maior que (v, x).
v
2
x 3
6 5
Se quisermos encontrar o vrtice y que o segundo mais perto de v, devemos
considerar apenas as arestas (v, y) e os caminhos (v, x), (x, y).
Para resolver este problema por induo, o caso base encontrar x dado acima,
isto , encontrar o vrtice mais prximo de v. A hiptese de induo :
HI: Dado um grafo G = (V, E), sabemos como encontrar os K vrtices que esto
mais prximos de v e os comprimentos dos caminhos de v a estes vrtices.
O nosso problema agora como estender a HI para mais de um vrtice. Isto ,
admitindo a HI para K, que vrtice devemos acrescentar para provar a hiptese para K +
1.
Seja V
k
o conjunto contendo v e os K vrtices mais prximos de v no grafo.
Queremos encontrar um vrtice w que o mais prximo de v entre os vrtices G - V
k
e
encontrar o menor caminho de v a w.
O menor caminho de v a w s pode passar por vrtices de V
k
. Ele no pode incluir
um vrtice y que no est em V
k
por que ento o caminho (v, y) seria menor que (v, w) e
y seria mais prximo de v que w.
V
k
V
k
v v
G - V
k
' y w w
34
Ento w ligado a um elemento de V
k
por uma nica aresta. Considere agora
todas as arestas (u, z) tal que u V
k
e z G - V
k
.
V
k
v
u
G - V
k
' z
Cada aresta (u, z) define um caminho v u, z. Um dos vrtices z w, o vrtice mais
prximo de v dentre todos aqueles fora de V
k
. Ns tomaremos todos estes caminhos e
escolheremos o menor dentre eles. Deste modo podemos acrescentar um vrtice a V
k
estendendo a HI de K para K + 1. O vrtice escolhido o w.
Segue do raciocnio acima que o vrtice w adicionado a V
k
o K + 1 mais prximo
de V. O conjunto resultante V
k+1
que realmente contm os (K + 1) vrtices mais
prximos de V.
O algoritmo comea com V
1
= {v} e a cada passo adiciona a V
k
o vrtice w tal que
f(w) o menor valor dentre f (y), y G - V
k
. A funo f dada por:
f (y) = distncia (v, u) + comprimento (u, y)
onde u e y so vrtices da fronteira entre V
k
e G - V
k
sendo que u V
k
e y G - V
k
.
Exemplo:
V
1
V
2
v v
5 8 5 8
a c a c
2 10 8 2 10 8
d 9 d 9
1 f 1 f
12 3 b 12 12 3 b 12
g e g e
f(d) = dist (d, a, v) = 7
f(e) = dist (e, a, v) = 14
f(c) = dist (c, v) = 8
f(b) = dist (b, v) = 10
35
V
3
V
4
v v
5 8 5 8
a c a c
2 10 8 2 10 8
d 9 d 9
1 f 1 f
12 3 b 12 12 3 b 12
g e g e
f(g) = dist (g, d, a, v) = 19 f(g) = dist (g, d, a, v) = 19
f(e) = dist (e, a, v) = 14 f(e) = dist (e, a, v) = 14
f(c) = dist (c, v) = 8 f(b) = dist (b, v) = 10
f(b) = dist (b, v) = 10 f(f) = dist (f, c, v) = 16
V
5
V
6
v v
5 8 5 8
a c a c
2 10 8 2 10 8
d 9 d 9
1 f 1 f
12 3 b 12 12 3 b 12
g e g e
V
7
V
8
v v
5 8 5 8
a c a c
2 10 8 2 10 8
d 9 d 9
1 f 1 f
12 3 b 12 12 3 b 12
g e g e
36
9 Planaridade
Um grafo planar aquele que pode ser desenhado no plano de tal forma que duas
arestas quaisquer no se interceptam. Exemplo:
(a) (b) (c)
Observe que, apesar de duas arestas de (a) cruzarem, este grafo planar porque
ele pode ser transformado no desenho (b).
Teorema de Jordan: Dada uma curva fechada no plano e dois pontos, um interior e
outro exterior a ela, qualquer curva ligando os dois pontos intercepta .
interseo
Teorema: k
5
e k
3,3
no so planares.
Prova: Provaremos apenas que k
5
no planar. Usando a representao
2
3 4
1
o plano fica dividido em quatro regies. Em qualquer regio que coloquemos o quinto
vrtice, uma aresta que o liga a algum outro vrtice cruzar outra aresta (pelo teorema de
Jordan).
Definio: A subdiviso de uma aresta uma operao que transforma a aresta (v, w) em
um caminho v, z
1
, z
2
, z
k
, w sendo k 0, onde os z
i
so vrtices de grau 2 adicionados
ao grafo.
Um grafo G
2
ser uma subdiviso do grafo G
1
quando G
2
puder ser obtido de G
1
atravs de uma seqncia de arestas de G
1
. Exemplo:
G
1
b b
a d subdiviso
c de G
1
a d
c
37
Teorema de Kuratowski: Um grafo planar se e somente se ele no contm nenhum
subgrafo que uma subdiviso de K
5
ou K
3,3
.
A prova deste teorema est alm do alcance deste curso.
Um circuito eletrnico pode ser considerado um grafo onde as junes so vrtices
e as arestas so os fios ligando as junes. Se o grafo correspondente ao circuito
planar, todos os fios podem ser gravados na prpria placa. Se o grafo no planar por
causa de apenas uma aresta, esta um fio normal que deve passar por cima da placa.
Isto equivale a colocar esta aresta acima do plano contendo o restante do grafo:
fio normal
fio gravado na
placa
Teorema: Todo grafo planar admite uma representao plana em que todas as linhas so
retas.
Definio: Um grafo pode ser embebido em uma superfcie S se ele pode ser colocado
em S de tal forma que quaisquer duas de suas arestas no se cruzam.
Teorema: Para cada superfcie S, existe um grafo que no pode ser embebido em S.
Definio: Uma superfcie uma curva descrita por 2 dimenses, no necessariamente
no plano. Ex.:
esfera
Torus
pneu
Nota: K
5
pode ser embebido no Torus:
38
K
3,3
pode ser embebido na fita de Mbius
Teorema: Um grafo pode ser embebido na esfera S se ele pode ser embebido no plano.
Existe um algoritmo O (n) para determinar se um grafo planar ou no, feito por Hopcroft
e Tarjan.
Teorema: Qualquer grafo pode ser colocado em um espao de trs dimenses.
Prova: Coloque os vrtices do grafo em uma reta X. Ento, para cada aresta, faa um
plano que contm X. Arestas distintas devem corresponder a planos distintos.
Para cada aresta desenharemos um semicrculo ligando os dois vrtices. As
arestas no se interceptaro porque elas estaro em planos diferentes.
d
c
b
a
X
a (b, d)
(a, d)
c b
d (a, b)
(a, c)
39
9.1 Exerccios
64 Prove: Se G planar, qualquer subgrafo de G planar.
65 Prove que K
3, 3
no planar.
66 Desenhe um grafo no planar com oito vrtices com um nmero mnimo de arestas.
40
10 Emparelhamento
Dado um grafo, um emparelhamento um conjunto de arestas t tal que duas delas
no possuem vrtice em comum. Ex.:
significa uma aresta do
emparelhamento
Pela definio, um vrtice no incidente a mais de uma aresta do
emparelhamento:
Errado
Emparelhamento Bipartido
Seja G = (V, E, U) um grafo bipartido tal que V e U so os conjuntos de vrtices
disjuntos.
V
U
Problema: Encontre um emparelhamento de cardinalidade mxima em G.
V pode representar um conjunto de trabalhadores e U um conjunto de habilidades
ou profisses (eletricista, secretria, telefonista, digitador, mecnico). Uma aresta liga um
trabalhador a todas as profisses a que ele est habilitado.
Joo Pedro Ana
V
U
Digitador Secretrio (a) Telefonista Mecnico
O problema ento dar empregos ao mximo nmero de pessoas respeitando
suas habilidades. Para o grafo acima, uma soluo seria:
J P A
d s t m
emparelhamento = M = {(J, t), (P, m), (A, s)}
41
Um caminho alternante P para um emparelhamento M um caminho de um vrtice
u em U para v em V, ambos no emparelhados em M, tal que as arestas de P esto
alternativamente em E - M e M. Ex.:
1 2 3
M:
a b c
1 a 2 b um caminho alternante para M:
1 2
U
V
a b
Um caminho alternante sempre ser da forma
v u
A primeira e a ltima aresta no pertencem a M. Se o caminho comeasse em V e
terminasse em V, ele teria um nmero par de arestas. Como ele comea em V e termina
em U, ele possui um nmero mpar. Ex.:
VU
VU
Um caminho alternante ter sempre uma aresta que no pertence a M a mais que
o nmero de arestas em M. Ento, podemos inverter as arestas pertencentes a M / no
pertencentes criando um emparelhamento M que possui uma aresta a mais que M:
V U
V U
Sempre que existir um caminho alternante, o emparelhamento M no ser o
mximo em G. O contrrio tambm verdadeiro, resultando em
Teorema: Um emparelhamento M em G um emparelhamento mximo se e somente se
G no contm nenhum caminho alternante para M.
Construiremos agora um algoritmo para encontrar o emparelhamento mximo em
G baseado neste teorema. Utilizaremos o fato de que qualquer emparelhamento que no
mximo possui um caminho alternante e este pode estender o emparelhamento.
Grande parte dos algoritmos de teoria dos grafos so feitos desta forma: toma-se um
teorema e constri-se um algoritmo baseado nele.
42
O algoritmo faz uma primeira aproximao escolhendo aleatoriamente arestas
para o emparelhamento. Ento ele procura caminhos alternantes, modificando o
emparelhamento apropriadamente at que no existam mais caminhos alternantes.
Ento, pelo teorema, o emparelhamento resultante mximo.
Para encontrar os caminhos alternantes, criamos um grafo dirigido G a partir de G
= (V, E, U) tal que G' possui os mesmos vrtices e arestas que G. Cada aresta de G'
possui uma direo (afinal, G' dirigido) que depende da aresta correspondente de G:
se a aresta de G pertence ao emparelhamento, a direo da aresta de G' de
V para U;
se no pertence, a aresta de G' aponta de U para V.
No exemplo abaixo so mostrados G e G:
1 2 3 4 5 6
V
U
A B C D E F
G
1 2 3 4 5 6
} V
} U
A B C D E F
G
Em G, um caminho qualquer comeando em um vrtice no acasalado em U e
terminando em um vrtice no acasalado em V corresponde exatamente a um caminho
alternante em G.
Como exemplo, encontraremos um emparelhamento mximo para o grafo abaixo.
1 2 3 4
} V
} U
A B C D
Primeiro, fazemos uma primeira tentativa para M, colocando tantas arestas quanto
possvel:
43
1 2 3 4
} V
G
} U
A B C D
G
Um caminho em G conforme descrito anteriormente D3B2A1. Invertendo as
arestas de M em G, temos
1 2 3 4
A B C D
G resulta em
1 2 3 4
V
U
A B C D
que no possui mais nenhum vrtice no acasalado por onde comear um novo caminho
alternante. Portanto o emparelhamento resultante mximo.
10.1 Exerccios
67 Encontre um emparelhamento mximo para os grafos abaixo.
V V
a) b)
U U
Utilize o algoritmo dos caminhos alternantes. Mostre a execuo de cada passo do
algoritmo.
68 Explique porque um caminho alternante possui um nmero par de arestas do
emparelhamento M e um nmero mpar de arestas do conjunto E - M.
44
11 Fluxo em Redes
Seja G = (V, E) um grafo dirigido com um vrtice s chamado fonte com grau de
entrada 0 e um vrtice t chamado sumidouro com grau de sada 0. A cada aresta e
associada uma capacidade c (e) > 0. A capacidade da aresta e mede a quantidade de
fluxo que pode passar atravs dela.
Um fluxo uma funo f nas arestas de G tal que:
1. 0 f (e) c (e). O fluxo atravs de uma aresta no excede sua capacidade;
2. Para todo v V - {s, t}
f (u, v) = f (v, w)
u
w
Isto , o total de fluxo que entra em v o mesmo que sai.
Podemos imaginar os vrtices como junes e as arestas como canos dgua. Cada cano
possui uma capacidade dada em m
3
/s alm da qual ele arrebenta.
As arestas tambm podem ser consideradas estradas, os vrtices cruzamentos e o
fluxo a capacidade de automveis por minuto da estrada.
Um exemplo de um grafo com os fluxos e capacidades mostrado abaixo. 4/3
significa c (e)/f (e); isto , capacidade 4 e fluxo 3.
4/3
5/5 3/2 3/3
7/5 4/4 7/7
s
4/1
6/5 1/1 6/5
5/5
Claramente, h um fluxo mximo que pode se originar em s e chegar em t
respeitando-se as capacidades de cada aresta.
Definio: Um corte um conjunto de arestas dirigidas ligando um vrtice de um conjunto
A de vrtices a vrtice de um conjunto B. A contm s e B = V - A.
Um corte um conjunto de arestas que separa um conjunto contendo s de um
conjunto contendo t. Ex.:
S t
A
B C D
Os cortes so as linhas
Teorema: O valor do fluxo mximo em uma rede igual capacidade do corte de menor
capacidade.
45
A capacidade de um corte a soma das capacidades de suas arestas. Claramente
o fluxo mximo no pode ser maior que a capacidade de algum corte da rede:
B
A 3
2
4
De outra forma, o fluxo excederia a capacidade das arestas do corte. A prova de que o
fluxo mximo igual mnima capacidade de um corte utiliza caminhos alternantes e no
ser feita aqui.
Definio: Uma seqncia aumentante (SA) em G dado um fluxo f uma seqncia de
arestas que ligariam s a t se as arestas no fossem dirigidas:
e
1
e
2
e
3
e
4
e
5
s t
Cada uma das arestas (a, b) da SA deve satisfazer uma das condies abaixo:
1. se (a, b) for dirigida de s para t, ento f (a, b) < c (a, b). Isto , as arestas que
apontam na direo de t podem ter o seu fluxo aumentado. Veja as arestas e
1
, e
2
e e
5
.
2. Se (a, b) for dirigida de t para s, ento f (a, b) > 0. Isto , as arestas que
apontam de t para s podem ter o seu fluxo diminudo. Veja e
3
e e
4
.
Considere o vrtice:
e
1
c
1
/f
1
5/3 7/1
e
3
e
4
e
2
c
2
/f
2
onde 5/3 significa fluxo 3 e capacidade 5. Como todo o fluxo que entra sai, 3 + 1 = f
1
+ f
2
= 4. Claramente podemos aumentar em 1 o fluxo em e
3
e diminuir de 1 em e
4
:
(3 + 1) + (1 - 1) = f
1
+ f
2
= 4
Estamos admitindo que os fluxos do restante do grafo podem ser ajustados para
que isto acontea.
Considere agora a S A
5/3 7/4 3/1 10/1 3/0
s t
a b c d
de um grafo G (no representado acima). Ento podemos aumentar o fluxo no caminho s
- a - b - c de 2, pois as arestas possuem capacidade para tanto. Isto , a menor diferena
c (e) - f (e) no caminho 2:
46
2 { 3 { } 2
s
a b c
Em c, temos que reduzir o fluxo de d para c de 2, j que o fluxo b c foi
aumentado de 2. Como f (d, c) = 1, isto no possvel.
Ento voltamos SA e aumentamos o fluxo em s - a - b - c de 1. Agora f (d, c)
diminui de 1 e consequentemente f (d, t) aumenta de 1.
No caso geral, o fluxo em uma SA pode ser aumentado do menor entre os valores:
1. min (c (e) - f (e)) entre as arestas que apontam para t.
2. min f (e) entre as arestas que apontam para s.
Este valor maior que zero j que, por definio, c (e) - f (e) > 0 no caso 1 e f (e) > 0 no
caso 2. Um exemplo real :
4/3
5/5 3/2 3/3
7/3 a 4/2 b 7/7
s t
4/3
6/5 1/1 6/3
5/5 c
onde existe uma seqncia aumentante s - a - b - c - t:
7/3 4/2 4/3 6/3
s t
a b c d
O mnimo das arestas t min (4, 2, 3) = 2
O mnimo das arestas s 3.
Ento o fluxo pode ser aumentado de 2 nesta SA:
4/3
5/5 3/2 3/3
7/5 a 4/4 b 7/7
s t
4/1
6/5 1/1 6/5
5/5 c
Observe que nenhum fluxo fora da SA alterado.
47
Teorema: Um fluxo f mximo se e somente se ele no admite nenhuma seqncia
aumentante.
11.1 Exerccios:
69 Maximize o fluxo do grafo abaixo.
4/3 1/1
s 8/2 t
3/3 1/1
3/1
4/4
fluxo mximo: 6
70 Encontre o fluxo mximo do grafo abaixo utilizando o teorema do corte.
2
5 3 7 5 1
6 2
4
71 Em uma rede, prove que a quantidade de fluxo que sai de s a mesma que chega em
t.
72 Utilize o algoritmo de encontrar o fluxo mximo em uma rede para resolver o problema
de encontrar um emparelhamento mximo. Dica: acrescente dois vrtices, fonte e
sumidouro.
48
12 Mais Aplicaes Prticas de Teoria dos Grafos
12.1 Data-Flow
Em linguagens data-flow, qualquer instruo pode ser executada desde que os
valores que ela usa estejam disponveis. Por exemplo,
a) a = 2*b + c;
pode ser executado to logo b e c sejam inicializados.
b) if a > b then
pode ser executado to logo a e b sejam inicializados.
Dado um procedimento
procedure P (a, b : integer)
var c, d, e : integer;
begin
d = c*a;
e = d + 1;
c = a + b;
if a > c
then
writeln (e);
endif
end
podemos montar um grafo de dependncias entre as instrues:
c = a + b
d = c * a
if a > c
e = d + 1
true
false
writeln (e)
end
Uma instruo pode ser executada se e somente se todas as que apontam para
ela j o foram. Observe que podemos colocar as instrues no procedimento em qualquer
ordem.
49
Os caminhos do grafo que so independentes entre si podem ser executados em
paralelo, como
d = c*a
e = d + 1 e if a > c
Esta propriedade pode ser usada para compilar programas escritos em uma
linguagem seqencial (ex.: FORTRAN) para um computador paralelo. Os caminhos
independentes seriam executados por diferentes processadores.
As ordenaes topolgicas do grafo descrito acima fornecem as possveis
execues seqenciais do programa. Lembre-se de que podem existir (em geral existem)
diversas ordenaes topolgicas (OT) para um mesmo grafo.
Dentre estas OT, o compilador pode selecionar uma que seja mais fcil de
otimizar. Por exemplo, suponha que diversas instrues que utilizam a varivel i estejam
espalhadas por um procedimento:
'I
k
) i : = 1;
'I
e
) a : = 2 * i + j;
'I
m
) b : = sqrt (i) + sqr (i);
O que significa que todos eles podem ser executados ao mesmo tempo. E em
for i = 1 to n do
v [i + 1] = v [i] + 1;
no h caminhos independentes, significando que paralelismo no possvel.
50
12.2 Make
O programa make do Unix toma como entrada um arquivo texto contendo
comandos da forma
Nome : d
1
d
2
d
n
Comandos
Nome o nome de um arquivo que depende dos arquivos d
1
d
2
d
n
.
Make l este texto e executa Comandos se a data de ltima atualizao de algum
arquivo d
i
for mais nova que de Nome. Ou seja, se algum d
i
for mais novo que Nome, ele
executa Comandos, que so comandos para o Unix que possivelmente devero atualizar
arquivo Nome. Ex.:
prog : a.obj b.obj c.obj
ln -o prog a.obj b.obj c.obj
a.obj : a.c prog.h
cc -c a.c
b.obj : b.c prog.h
cc -c b.c
c.obj : c.c
cc -c c .c
ln o linker e cc o compilador. Se, por exemplo, b.c for modificado, make ir
compil-lo novamente (Comando "cc -c b.c"), porque ele ser mais novo que
"b.obj". Ento "b.obj" ser mais novo que prog que ser linkado por "ln -o prog
a.obj b.obj c.obj ".
As relaes de dependncias do make pode ser colocada em forma de um grafo.
12.3 Eliminao de Cdigo Morto
Podemos representar um procedimento como um grafo onde as instrues so
vrtices e existe aresta dirigida de v para w se w executado aps v (ou pode ser
executado, no caso de ifs e whiles). A funo
void f(
{
if (i > 0)
{
j = 1;
goto L1;
a = 10;
}
else
j = 10;
return 1;
L1;
}
seria transformada no grafo
51
if (i >0)
j = 1 j = 10
goto L
1
a = 10
return 1
L
1
fim da funo
Para descobrir o cdigo morto, fazemos uma busca a partir da primeira instruo
do procedimento marcando todos os vrtices visitados. As instrues correspondentes
aos vrtices no visitados nunca sero executados e podem ser removidos pelo
compilador.
Note que com este mesmo grafo pode-se descobrir se a instruo return ser
executada por todos os caminhos que ligam o vrtice inicial ao vrtice "fim da funo". A
resposta para o grafo acima : no.
52
13 Compresso de Dados Algoritmo de Huffman
Problema: Temos um texto usando caracteres ASCII e queremos comprimi-lo para uma
seqncia menor de caracteres.
A tcnica que utilizaremos representar cada carter por uma seqncia de bits.
Ento tomaremos o texto original substituindo cada carter pela seqncia de bits
correspondente.
Como existe 128 caracteres ASCII, precisamos de 7 bits para cada carter se
representarmos todos eles usando o mesmo nmero de bits.
O algoritmo de Huffman representa os caracteres que aparecem mais no texto por
uma seqncia menor e os que aparecem mais por uma seqncia maior. Assim ele
comprime o texto. Ex.:
Comprimir DABAABCAA assumindo que s usamos caracteres A, B, C e D.
A 1
B 00
C 010
D 011
DABAABCAA 011100110001000 15 bits
Se representssemos cada carter com 2 bits (A = 00, B = 01, C = 10, D = 11)
usaramos 9 2 = 18 bits.
Poderia haver ambigidades na representao. Por exemplo, se A = 1 e B = 10,
no saberamos se 1010 AC ou BB.
Em geral, o cdigo de um carter no pode ser prefixo de outro.
x x x x x x x x
A
B
Esta restrio implica que colocar menos bits para alguns caracteres significa mais
bits para outros.
A compresso de dados utilizando esta tcnica implica em encontrar uma relao
caracteres/bits que satisfaa a restrio de prefixos e que minimize o nmero total de bits
para codificar o texto.
Para saber que caracteres aparecem mais ou menos no texto, calculamos
inicialmente a freqncia de cada carter. Assuma que, em um texto F, os caracteres c
1
,
c
2
, c
n
aparecem com freqncias f
1
, f
2
, f
n
. Uma codificao E associa cada c
i
a uma
string S
i
de bits cujo tamanho s
i
. O nosso objetivo encontrar codificao E que
satisfaa a restrio de prefixo e minimize
n
L (E, F) = s
i
. f
i
i=1
que o tamanho do texto comprimido. No exemplo anterior, E = { (A, 1), (B, 00), (C, 010),
(D, 011) } e s
1
= 1, s
2
= 2, s
3
= 3, s
4
= 3 e L (E, F) = 5 . 1 + 2 . 2 + 1 . 3 + 1 . 3 = 15
53
Considere uma rvore binria dirigida em que cada vrtice possui grau de sada 0
ou 2 e as arestas da esquerda e direita esto associados os nmeros 0 e 1,
respectivamente:
0 1
0 1 1
A
00
B 0 1
010 011
C D
Associamos as folhas aos caracteres e a seqncia de bits da raiz at a folha
como a codificao do carter. Para decodificar um texto codificado, percorremos a
rvore at encontrar o 1. carter. Depois fazemos outra busca para o 2. carter e assim
por diante. Observe que, como os caracteres so folhas, a restrio de prefixo
obedecida.
Uma seqncia de bits s poderia ser prefixo de outra se o carter correspondente
estivesse no meio da rvore:
0 1 A = 1
B B = 0
0 1 0 C = 00
A D = 01
C D
Agora temos que construir uma rvore que minimize L (E, F). Usamos induo
finita para reduzir o problema de n para n - 1 caracteres. O caso base n = 2 e trivial.
HI: Sabemos como construir a rvore descrita acima para n - 1 caracteres.
Para resolver o problema, tomaremos n caracteres e combinaremos 2 deles em um
n, resultado em n - 1 caracteres. Aplicamos a HI para n - 1 obtendo uma rvore na qual
os dois caracteres combinados so introduzidos:
54
0 1
reintroduzindo
0 os 2 caracteres
c 0 1
obtido p / n - 1
c = caracteres c
1
c
2
combinados
Os caracteres a serem combinados (c
1
e c
2
) so os ns com menor freqncia.
Ns podemos assumir que c
1
e c
2
so filhos de um mesmo vrtice porque cada vrtice
possui um ou dois filhos.
Obs.: No provamos que a rvore obtida desta forma minimiza L (E,F).
Como exemplo, codificaremos DABAABCAA, onde as seqncias so A = 5, B = 2,
C = 1, D = 1.
Combinando C e D, obtemos X com freqncia 2 {A = 5 / B = 2 / X = 2 }. Combinando B e
X, obtemos Y com freqncia 4 {A = 5 / Y = 4 }. Este o caso base, que resulta na rvore
0 1
Y A
Desdobrando Y, temos
0 1
0 1 A
B X
Desdobrando X, temos
0 1
0 1
B 0 1
C D
Ento, A = 1, B = 00, C = 010, D = 011
DABAABCAA = 011100110001011
Observe que este algoritmo no um algoritmo de grafos, embora o uso de grafos facilite
a sua compreenso.
55
14 rvore de Espalhamento de Custo Mnimo
Uma rvore de espalhamento de um grafo G uma rvore contendo todos os
vrtices de G. Para um dado grafo, podem existir vrias rvores de espalhamento
diferentes. Se associarmos um peso a cada aresta, uma destas rvores ter um custo
menor do que as outras.
2
Esta seo apresenta um algoritmo que encontra a rvore de
espalhamento de custo mnimo (AECM) de um grafo. Note que, dentre todos os
subgrafos conectados que possuem todos os vrtices de G, o que possui custo mnimo
uma rvore. Se tivesse um ciclo, poderamos retirar a aresta de maior custo e
continuaramos a ter um subgrafo conectado, que ainda teria um custo menor.
b
2 4
a 3 d
G: 3 5
1
c
6 e
Para o grafo acima, teramos a AECM
b
2 4
d
3 1
c e
Para encontrar a AECM de um grafo G, usaremos a seguinte HI:
HI: Dado um grafo dirigido G = (V, E), ns sabemos como encontrar um subgrafo T
de G com K arestas tal que T uma rvore que um subgrafo da AECM de G.
Analisando a HI de uma perspectiva dinmica, ela comea com uma rvore T
vazia e vai acrescentando arestas nesta rvore at obter uma rvore que contm todos
os vrtices de G. Considerando o grafo
2
Naturalmente, o custo de uma rvore a soma dos custos de suas arestas.
56
b
2 4
a 3 d
3 5
1
c
6 e
os passos da execuo do algoritmo correspondente HI seriam:
b b
d 4 d
a a
1
c e c e
b b
2 4 d 2 4 d
a a 3
1 1
c e c e
O caso base para a HI K = 1. Ento precisamos escolher a primeira aresta a ser
colocada em T. Afirmamos que esta aresta a de custo mnimo dentre todas as arestas
do grafo. Para provar este ponto, suponha que tenhamos a AECM e ela no possui a
aresta de custo mnimo. Ento podemos acrescentar esta aresta AECM produzindo um
ciclo. Retirando uma outra aresta qualquer do ciclo, obtemos uma rvore que possui um
custo menor do que a AECM, o que contradiz a hiptese de que a AECM possui custo
mnimo. Logo, a suposio inicial de que a AECM no possui a aresta de custo mnimo
est errada.
No caso geral, j encontramos uma rvore T que subgrafo da AECM e queremos
estender T de uma aresta. A unio de T com a nova aresta deve ser uma rvore e ser
subgrafo da AECM. O problema qual aresta escolher.
Sendo T um subgrafo da AECM, deve haver pelo menos uma aresta da AECM
ligando T a vrtice no em T:
AECM
T
esta
aresta existe
57
No caso geral, existe mais de uma aresta nesta situao. Seja E
k
o conjunto de
todas as arestas ligando vrtices em T a vrtices fora de T. Afirmamos que a aresta de
menor custo de E
k
pertence AECM.
G
T
agora
G e no
AECM
E
k
Para provar este ponto, assuma que (v, w) a aresta de menor custo em E
k
tal que
v T e w T.
v T G
2 w
Suponha que (v, w) AECM, temos a configurao
T
v
x w G
3
y
onde apenas as arestas da AECM so mostradas. Como a AECM contm todos os
vrtices do grafo, existe uma aresta ligando um vrtice de T a outro no em T. Suponha
que esta aresta seja (x, y), que diferente de (v, w) j que estamos admitindo que (v, w)
AECM.
Existe um caminho entre v e w na AECM que contm (x, y), j que esta aresta
conecta T com G - T, v T, w G - T. Acrescentando (v, w) na AECM, criamos um ciclo
formado pelo caminho entre v e w e a aresta (v, w). Removendo a aresta (x, y) deste
ciclo, a AECM continua sendo uma rvore e possui custo menor que a anterior, pois o
custo de (v, w) menor do que (x, y), pois estamos admitindo que o custo de (v, w) o
menor dentre todos os custos de arestas ligando T a G - T (menor custo em E
k
).
Acima ns admitimos que a aresta de menor custo em E
k
no est na AECM e
encontramos uma contradio que a AECM no ter custo mnimo. Isto , acrescentando
(v, w) e retirando (x, y), encontramos uma rvore em um custo menor ainda.
58
Ento a suposio inicial de que (v, w), aresta de menor custo em E
k
, no est na
AECM, est errada. Isto ,
(v, w) AECM
O algoritmo correspondente HI comea com T = { aresta de menor custo } e vai
acrescentando arestas a T at que T possua todos os vrtices do grafo. As arestas
acrescentadas so as de menor custo que ligam T a G - T.
Algorithm AECM( G (V, E) )
begin
T = aresta de G com menor custo
while T1 < V1 do
T = T U { aresta (v, w) de menor custo tal que v T e
w G - T }
return T;
end
Um exemplo completo mostrado a seguir.
8
9 7 1
5
10
4 2
3
8
T
9 7 1
5
10
4 2
3
acrescenta min (8, 10, 5, 2)
59
8
T
9 7 1
5
10
4 2
3
acrescenta min (8, 10, 7, 3)
8
T
9 1
7
5
10
4 2
3
acrescenta min (8, 7, 4)
8
T
9 7 1
5
10
4 2
3
acrescenta min (9, 7, 8)
a rvore resultante
1
7
4 2
3
60
14.1 Exerccios
73 (4) Prove ou mostre um contra-exemplo: A rvore de Espalhamento de Custo Mnimo
de um grafo G (V, E) possui as |V| - 1 arestas de menor custo de G.
74 (4) Encontre a AECM do grafo abaixo.
12
20
2 7 3
10 7
1
8
Mostre as rvores obtidas em cada passo do algoritmo.
75 (3) Prove que a aresta de menor custo em um grafo G pertence AECM de G.
61
15 Colorao
Seja G (V, E) um grafo e C = 'C
i
1< i < n) um conjunto de cores. Uma colorao
de G a atribuio de cores de C para todos os vrtices de G de tal forma que vrtices
adjacentes tenham cores diferentes. Ex.:
C = 'v (ermelho), a (zul), p (reto))
v v
a p
p a
Uma K-colorao uma colorao que utiliza K cores.
Definio: O nmero cromtico de um grafo G, indicado por X (G), o menor nmero de
cores K para o qual existe uma K - colorao de G.
No grafo acima, X (G) = 3, pois o tringulo
v
a p
impede que X (G) seja 2.
Um grafo completo de n vrtices, tambm conhecido por K
n
necessita de n cores,
j que cada vrtice est ligado a todos os outros:
1 1
3
2 3 2
4
Ento, X (K
n
) = n. Obviamente, se um grafo G possuir K
n
como subgrafo, ento X (G) X
(K
n
) ou X (G) n.
Um grafo bipartido pode ser dividido em dois conjuntos U e V tal que no existam
arestas dentro de cada conjunto:
U
V K
n
)
Ento, todo grafo bipartido pode ser colorido com apenas duas cores.
62
O Problema das Quatro Cores: Dado um mapa qualquer (no plano), podemos colori-lo
com apenas quatro cores? Por colorir queremos dizer que regies adjacentes so
coloridas com cores diferentes:
4
3 2
1 1 3
2
De fato, quatro cores podem colorir qualquer mapa no plano, o que conhecido
por cartgrafos a sculos. Contudo, este teorema s foi provado em 1976 usando teoria
dos grafos e um computador.
Este problema pode ser transformado em um problema de grafos associando-se
cada regio a um vrtice. Existe uma aresta entre dois vrtices se as duas regies
correspondentes forem adjacentes (fazem fronteira) no mapa. Por exemplo, o mapa da
esquerda transformado no grafo da direita.
1 4 1 4
5
2 3 5
2 3
O problema agora provar que qualquer grafo construdo desta forma pode ser
colorido com no mximo quatro cores.
Todo grafo obtido de um mapa planar. Se no fosse, haveria fronteira entre duas
regies que no fazem fronteira no plano seria uma fronteira no espao. Veja figura
abaixo, onde a ligao preta indica uma ponte acima do papel.
Lembre-se de que um grafo no planar pode ser colocado em um plano desde que
algumas arestas liguem alguns vrtices no espao:
63
K
5
256 exemplo
32
16
2 1
Os nmeros ordenados podem ser obtidos em tempo linear (O (n)) percorrendo-se
a rvore.
Deste ponto em diante ns estudaremos apenas os problemas que retornam
apenas sim ou no. A maioria dos problemas pode ser facilmente convertida para este
tipo de problema.
Definio: Um problema P polinomialmente redutvel a Q se possvel transformar a
entrada de P em entrada para Q em tempo polinomial e Q retorna sim (ou no) se e
somente se P retorna sim (ou no) com a mesma entrada. Isto , a resposta dada por Q
pode ser usada como a resposta para P.
65
resposta sim / no
P Q
entrada convertida
em tempo polinomial
Se a converso da entrada de P para Q tomar tempo O (f (n)) e o algoritmo para Q
possuir complexidade O(g(n)), ento o algoritmo para P dado pela reduo possui
complexidade
O(f(n)) + O(g(n)) = O(f(n) + g(n))
Em particular, se g (n) for exponencial, O(f(n) + g (n)) ser O (g (n)). Se g(n) for
polinomial, o algoritmo para P dado pela reduo tambm ser polinomial. Exemplos:
O(n
3
+ 2
n
) = O (2
n
)
O(n
2
+ n) = O(n
2
)
P e Q so polinomialmente equivalentes se cada um pode ser reduzido ao outro
em tempo polinomial. Todos os problemas que podem ser resolvidos em tempo
polinomial so equivalentes polinomialmente entre si (PROVE !).
A classe de todos os Problemas que podem ser resolvidos em tempo polinomial
chamada de P. A classe dos problemas para os quais uma dada soluo pode ser
conferida em tempo polinomial chamada de NP.
Por exemplo, o problema ordene um vetor pertence a NP por que, dado um vetor
(supostamente ordenado), podemos conferir se ele est mesmo ordenado em tempo O
(n).
O problema encontre um subgrafo completo em um grafo G pertence a NP.
subgrafo encontrado
Dado o subgrafo encontrado, podemos facilmente descobrir se ele completo.
Aparentemente, a classe NP possui problemas muito mais difceis que a P, j que para
um problema pertencer a NP temos apenas que conferir uma dada soluo em tempo
polinomial, enquanto que em P precisamos resolver o problema em tempo polinomial.
Voltaremos a esta questo adiante.
16.1 Problema da Satisfabilidade
Uma expresso booleana S estar na forma normal conjuntiva (FNC) se ela for o
produto de sub-expresses que so somas.
Produto "e" lgico e soma "ou" lgico. Exemplo:
_ _ _ _ _
66
S = (a + b + c) (a + b + c) (a + b + c)
Qualquer expresso booleana pode ser transformada em FNC. Uma expresso booleana
S satisfazvel se suas variveis podem receber valores 0 ou 1 de tal forma que S seja 1.
No exemplo acima, S satisfazvel: se a = 1, b = 1 e c = 0, ento S = 1.
O problema SAT determinar se dada expresso S satisfazvel ou no.
Encontrar os valores da variveis para os quais S = 1 no faz parte do problema SAT.
Este problema est claramente em NP porque, dados valores para as variveis, podemos
facilmente descobrir o valor de S. Se S for 1, ser satisfazvel.
Definio: Um problema X chamado de NP-completo se
1. X pertence a NP.
2. Cada problema em NP polinomialmente redutvel a X. Isto , com a
soluo para X temos a soluo para qualquer outro problema.
Teorema de Cook (1971): SAT NP - completo
Este um dos resultantes mais importantes da computao terica, seno o mais
importante. Ele implica que, se o problema SAT pode ser resolvido em tempo polinomial,
todos os outros problemas NP-completos o sero. Como exemplo, considere que X
1
NP-completo, como mostra a figura:
Y
2
W
2
SAT X
1
X
2
Y
1
W
1
Ento a complexidade de X
1
igual complexidade do polinmio que transforma a
entrada de X
1
para SAT mais a complexidade do SAT, que estamos assumindo ser
polinomial. Como O(polinmio) + O(polinmio) = O(polinmio), X
1
tambm polinomial.
Ento, se SAT puder ser resolvido em tempo polinomial, todos os problemas em NP
tambm podero, implicando P = NP. Infelizmente, ningum conseguiu ainda provar que
SAT pode ou no ser resolvido em tempo polinomial. Isto , ningum sabe se P = NP ou
P NP, embora ningum acredite que P = NP.
Em 1972, Richard Karp descobriu outros 24 problemas NP-completo. A lista hoje
contm 4000 problemas. Se uma soluo polinomial for encontrada para um deles,
automaticamente teremos a soluo polinomial para todos os demais. Se algum provar
que um desses problemas no pode ser resolvido em tempo polinomial, nenhum deles
poder.
Todos os problemas NP-completo so polinomialmente equivalentes entre si, o
que indica que eles tm uma estrutura em comum.
Definio: Clique de um grafo um subgrafo completo deste grafo.
O problema do clique : determine se o grafo contm um clique de tamanho K. Clique
NP - completo, pois SAT redutvel ao problema do clique:
67
Y
2
W
2
SAT X
1
X
2
Y
1
clique
Dado um problema qualquer em NP, digamos X
1
, podemos reduzi-lo a SAT e
ento reduzir SAT ao problema do clique. Resolvendo clique, resolvemos X
1
. Ento,
qualquer problema em NP redutvel ao clique.
Em uma figura, como a acima, representando relaes de reduo, um problema X
ser NP-completo se existir um caminho de X para SAT. Como X tambm pertence a NP,
existir seta de SAT para X, pois qualquer problema em NP pode ser reduzido a SAT. Em
geral, no se prova que SAT redutvel a um problema X, mas sim que algum problema
NP-completo redutvel a X. No desenho abaixo mostrando as relaes de reduo,
suponha que foi provado que clique redutvel a A. Como o problema do clique NP-
completo, A tambm o .
Y
2
W
2
SAT X
1
X
2
Y
1
clique
A
C
B NP - completo
Observe que todos os problemas NP - completo so polinomialmente
equivalentes, pois um pode ser reduzido a outro em tempo polinomial. Dados dois
problemas NP-completo X e Y, existe sempre um caminho de X para Y e outro de Y para
X, pelo menos um deles passando por SAT. Por exemplo, podemos usar a soluo de A
para resolver C usando o caminho A clique SAT C.
16.2 Exerccios
78 (3) Dados os problemas
(a) Dado um vetor de elementos x
1
, x
2
, x
n
, encontre um elemento x dentre eles tal que x
maior ou igual que n/2 elementos.
(b) Ordene o vetor descrito em (a).
68
(c) Encontre o menor e o maior elementos do vetor.
Reduza:
(a) a (b).
(a) a (c).
(c) a (b).
79 (5) Assuma que um problema P polinomialmente redutvel a Q e:
(a) A Entrada de P pode ser transformada em entrada para Q em tempo O (n log
n).
(b) Um algoritmo AQ que resolve o problema Q pode ser Executado em tempo O
(n
2
).
Explique como podemos fazer um algoritmo para P usando AQ. Qual a complexidade
deste algoritmo ?
80 (5) Um problema P toma um vetor de n inteiros qualquer como entrada e no
conhecemos nenhum algoritmo para resolv-lo. Contudo, descobrimos que P pode ser
reduzido a um problema Q, que tem como entrada um vetor ordenado de inteiros.
Admitindo que exista um procedimento
procedure ProcQ (vet, n) : boolean;
que resolva o problema Q, faa um procedimento ProcP para resolver o problema P.
Admita a existncia de um procedimento Ordene (vet, n) que ordena vetor vet de n
inteiros.
Qual a complexidade de ProcP se a de ProcQ :
O (n
2
) ?
O (n) ?
O (2
n
) ?
81 (5) Assumindo que N e NP so conjuntos, qual a relao entre eles (, =, , etc) ?
82 (1) A expresso
S = (a + b) (a + b + c) (a + b + c) c
satisfazvel?
83 (2) Quais dos problemas abaixo pertencem a NP ?
(a) Encontrar um elemento em um vetor que maior do que todos os outros.
(b) Associar cores aos vrtices de um grafo de tal forma que dois vrtices
adjacentes possuam cores diferentes.
69
(c) Encontrar a AECM de um grafo.
(d) Encontrar um caminho hamiltoniano de um grafo.
84 (5) Sejam A e B dois problemas NP-completos e P(n) o polinmio que a
complexidade da converso da entrada de A para B. Se algum encontrar um algoritmo
de complexidade f (n) para resolver B, ento, aplicando a reduo, teremos um algoritmo
de complexidade f (n) + P (n) para A. Isto :
Complex (Alg. A) = P (n) + f (n)
Suponha que:
(a) f (n) polinomial. Podemos afirmar que existe algoritmo para A com
complexidade polinomial ? Se existe, mostre-o!
(b) f (n) exponencial. Podemos afirmar que existe algoritmo para A com
complexidade exponencial ?
(c) f (n) exponencial. Podemos afirmar que no exise algoritmo para A com
complexidade polinomial ?
85 (3) Suponha que SAT no seja NP-completo. Como poderamos provar que o
problema do clique NP-completo ?
86. (50) Suponha que todos os problemas NP existentes estejam representados na
Figura abaixo.
Y
O (n
3
) O (n)
W O (n
2
)
X
SAT
O (n
2
)
O (n) O (n
2
log n)
K O (n) S
Uma seta de Q para P indica que P pode ser reduzido a Q. A seta em linhas
pontilhadas mostra a complexidade da transformao da entrada de P para a entrada de
Q. Baseado nesta Figura, responda:
(a) Se for encontrado um algoritmo de complexidade O(n
2
) para resolver SAT, qual a
complexidade dos algoritmos para resolver cada um dos problemas acima se estes
algoritmos forem obtidos pela reduo dos problemas a SAT ?
(b) Se for encontrado um algoritmo de complexidade O(n
2
) para resolver R, qual a
complexidade dos algoritmos para resolver cada um dos problemas acima se estes
algoritmos forem obtidos pela reduo dos problemas a R ?
70
(c) Se um algoritmo para S tiver complexidade O(n
2
), qual seria a complexidade de um
algoritmo para R obtido pela reduo a S ?
(d) Explique porque R e S so NP-completos.
71