Você está na página 1de 61

Introduo

Um grafo G = (V, E) um conjunto V de vrtices e um conjunto E de arestas


(edges) onde cada aresta um par de vrtices (Ex.: (V, W)). Um grafo representado
graficamente usando bolinhas para vrtices e retas para arestas.
Ex.: A

B C D

E F
Este grafo possui V = {A, B, C, D, E, F} e E = {(A, B), (B, C), (B, E), (C, E), (C, D),
(D, F)}.
Considere que uma aresta (V, W) onde V = W proibida.
Um grafo pode ser dirigido ou no dirigido. Em um grafo dirigido, a ordem entre os
vrtices de uma aresta (V, W) importante. Esta aresta diferente da aresta (W, V) e
representada com uma flecha de V para W:
V
W V = {V, W, Z} E = {(V, W), (V, Z), (W, Z)}
Z
Em um grafo no dirigido, (V, W) = (W, V).
Um caminho (path) uma seqncia de vrtices V
1
, V
2
, ., V
n
conectados por
arestas (V
1
, V
2
), (V
2
, V
3
), . (V
n - 1
, V
n
). As arestas so tambm consideradas como parte
do caminho. Ex.:
V
X caminhos: V, X, W, Y
Z V, X
W Y, W, Z
Y
Um circuito um caminho onde V
1
= V
n
, como B, C, D, E, F, D, B.
A B E

D
C F
Um circuito simples se nenhum vrtice aparece mais de uma vez, exceto o
primeiro e o ltimo. Um circuito simples chamado de ciclo.
Histria
O primeiro problema de teoria dos grafos foi o das pontes de Knisberg. Como no
desenho:
Cidade V

Rio X Y

Cidade W
A cidade possua um rio com duas ilhas conectadas por sete pontes. 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 onde 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.
Ex.: B
C
A
J
D
H

E G
F
Encontre caminho entre A e J que passe por todas as arestas exatamente uma
vez.
Questo: Como saber se estamos ou no desprezando dados importantes abstraindo o
problema em grafo.
Motivao
Existem funes inteis no programa?
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
f k
m n
g h
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 que passar por vrias cidades, retornando ao ponto inicial, usando 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?
B
B
C D C D
A
A
E
E
Outros:
- Labirinto
- Eliminao de cdigo morto
- make do Unix
Buscas
Busca em profundidade (Depth - First search DFS)
Uma DFS feita em um grafo comeando em um vrtice V chamado raiz da
rvore.
V V
1 1
7
2 6 2 4
3 5
5 3
4
O algoritmo para busca em profundidade marca V (raiz) como visitado, pega um
vrtice W conectado a V (aresta (V, W) existe) e continua o DFS em W. Depois que a
busca em W termina, toma-se outro vrtice Z conectado a V e faz-se a busca em Z.
O algoritmo termina quando todos os vrtices ligados a V j foram marcados.
O algoritmo para DFS :
Algoritmo DFS (G, V)
Entrada: G = (V, E) e um vrtice v V.
Sada: G
incio
marque V
para cada aresta (V, W) E faa:
procure W mais esquerda no marcado
DFS (G, W)
fim
Faa a busca em profundidade nos grafos abaixo:
V
1 V 1 4 1
2 8
5 5 2
3 4 3 2 6 3
4
7
5 6
O algoritmo DFS pode ser usado para percorrer todos os vrtices de um grafo e
para descobrir se um grafo conectado ou no. Um grafo conectado se existe um
caminho entre dois vrtices quaisquer do grafo.
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. sto , o
algoritmo visita vrtices W tal que (V, W) E.
No segundo passo, o algoritmo visita todos os netos de V. sto , os vrtices que
no esto conectados diretamente a V mas, ento conectados a algum vrtice e 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. O algoritmo dado abaixo:
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
Algoritmo BFS (G, V)
Entrada: Grafo G = (V, E) e vrtice V.
begin
marque V
coloque V no fim da fila F
while F no vazia do
Remova o primeiro vrtice W de F
para cada aresta (W, Z), tal que Z no
marcado, faa:
marque Z
insira Z no fim da fila F.
Induo Finita
nduo finita uma tcnica de provar teoremas que tambm usado no projeto
de algoritmos, suponha que queiramos provar um teorema T.
1 - T vlido quando n = 1
2 - Se T vlido para n = 1, ento T vlido para n.
1 chamado de base. A prova de que
1 e 2 so vlidos T vlido para n 1
bvio. A suposio de que T vlido para n - 1 chamada "Hiptese de nduo (H).
Vejamos alguns exemplos:
Hiptese: Sendo S
n
= 1 + 2 + 3 + . + n, ento
S
n
= n (n + 1)/2
Prova: Para n = 1, S
1
= 1 e 1 (1+ 1)/ 2 = 1 o que prova a hiptese.
Suponha que a hiptese vlida para n - 1, isto ,
S
n
- 1 = (n - 1) (n - 1 + 1)/2 = (n - 1) n/2.
Provemos que ela vlida para S
n
.
Sendo S
n
= S
n
- 1 + n
ento S
n
= (n - 1) n + n = n
2
- n + 2n =
2 2
= n (n + 1), o que prova a hiptese.
2
Hiptese: X
n
- Y
n
divisvel por X - Y para todos os nmeros naturais X, Y, n.
Para n = 1, x
1
- y
1
trivialmente divisvel por x - y. Suponha que a hiptese vlida
para n - 1, isto , x - y divide x
n - 1
- y
n - 1
x, y.
Reescrevendo X
n
- Y
n
, temos:
X
n
- Y
n
= (X
n - 1
- Y
n - 1
) (X + Y) - XY (X
n - 2
- Y
n - 2
)
divisvel por divisvel por
X - Y X - Y
Como o lado direito divisvel por X - Y por hiptese, o lado esquerdo tambm .
Exerccios:
Prove que:
1. (1 + x)
n
1 + nx
2. 1 + 1 + . + 1 > 13
n + 1 n + 2 24
3. possvel colorir as regies formadas por qualquer nmero de linhas no plano com
somente duas cores. Duas regies vizinhas devem ter cores diferentes.
At agora utilizamos o seguinte princpio de induo:
Se uma hiptese T, com um parmetro n, verdadeiro para n = 1 e para cada
n > 1, a verdade de T para n - 1 implica que T verdadeiro para n, ento T verdadeiro
para todo n .
De fato, existem vrios tipos de induo diferentes destes:
1 - Pode-se considerar que T verdade para 1 k < n e ento provar a validade para n.
2 - Pode-se considerar um caso base quando n = m, m uma constante, assumir que T
vlido para n e ento provar a validade para n - 1.
1 m 1 . n = m
2 . n n - 1
3 - Pode-se entender o caso base para mais de um valor como n = 1 e n = 2. Assumindo
que T verdade para n - 1 e n - 2, prova-se que T verdade para n.
4 - Pode-se assumir que T vlido apenas para um subconjunto de n, como os nmeros
pares (ou primos, ou divisveis por 5). O caso base seria n = 2 e a hiptese de induo
seria "T vlido para n - 2, n par.
Outro caso seria "T vlido para potncias de 2, que so 1, 2, 4, 8,. A hiptese
de induo seria "T vlido para n/2 = 2
k - 1
e ento tentaramos provar T para n = 2
k
.
Neste caso poderamos aplicar outra induo para provar que T vlido entre 2
k - 1
e 2
k
.
Projeto de Algoritmos por Induo
Construiremos um algoritmo para calcular o valor de um polinmio num dado
ponto. sto , calcular P
n
(x), dado x, assumindo P
n
(x) = a
n
x
n
+ a
n - 1
x
n - 1
+ . + a
1
x + a
0
.
Usaremos a tcnica indutiva que admitir que sabemos como resolver um
problema menor e ento usaremos este resultado para resolver o problema completo.
A hiptese de induo (H) para o problema de calcular P
n
(x) :
H: Sabemos como calcular P
n - 1
(x) sendo
P
n - 1
(x) = a
n - 1
x
n - 1
+ a
n - 2
x
n - 2
+ . + a, x + a
0
.
O caso base n = 0 que resulta em P
0
(x) = a
0
que trivial. Para calcular P
n
(x)
usando P
n - 1
(x) temos apenas que adicionar a
n
x
n
.
P
n
(x) = P
n - 1
(x) + a
n
x
n
Esta frmula resulta no algoritmo abaixo
_
Algoritmo Pol (a, n, x)
_
Entrada: a = (a
0
, a
1
, ., a
n
), n e x
Sada: S = a
n
x
n
+ . + a, x + a
0
begin
S: = a
0
for i: = 1 to n do
S: = S + ai x
i
end.
ou
begin
_
if a = a
0
then
S: = a
0
_
else S: = Pol (a - {a
n
}, n - 1, x) + a
n
x
n
end.
Este algoritmo no eficiente pois ele faz
n + (n - 1) + (n - 2) + . + 2 + 1 = n (n + 1)|2 multiplicaes e n adies. Usaremos uma
H diferente para conseguir um resultado melhor. Para isto definimos
P'
n - 1
(x) = a
n
x
n - 1
+ a
n - 1
x
n - 2
+ . + a
1
H: Sabemos como calcular P'
n - 1
(x)
O caso base n = 0 que o caso trivial. Para calcular P
n
usando P
n - 1
usamos a
seguinte frmula:
P
n
(x) = x P'
n - 1
(x) + a
0
O nmero total de multiplicaes n e o nmero de somas n. O algoritmo final :
_
Algoritmo Pol (a, n, x)
_
Entrada: a = (a
0
,

a
1
, . a
n
), n e x
Sada: (a
n
x
n
+ a
n - 1
x
n - 1
+ . + a
1
x + a
0
begin
_
if a = a
0
then S: = a
0
else S: = x Pol ((a
1
, a
2
, ., a
n
), n - 1, x) + a
0
end.
Aula 1
Problemas
Um outro problema interessante o chamado "problema da celebridade. H um
conjunto de n pessoas e queremos descobrir uma celebridade entre elas. Uma
celebridade uma pessoa que no conhece as outras n - 1 pessoas e conhecida por
todas elas. Ns s podemos perguntar a cada pessoa se ela conhece alguma outra.
Assim, o nmero total de perguntas que podemos fazer n (n - 1).
Podemos representar este problema usando um grafo dirigido onde existe uma
aresta de V para W se V conhece W. O objetivo seria encontrar um vrtice com n - 1
arestas de entrada e 0 de sada.
Exerccio: prove que existe no mximo um vrtice com n - 1 arestas de entrada e 0
de sada em um grafo de n vrtices.
Para resolver este problema, tentaremos reduzir o tamanho do problema para n - 1
eliminando uma pessoa que no celebridade. Tomando duas pessoas A e B quaisquer
e perguntando se A conhece B, podemos eliminar:
A se a resposta for sim, pois uma celebridade no conhece ningum.
B se a resposta for no, pois todo mundo conhece a celebridade.
Deste modo podemos tomar duas pessoas A e B quaisquer, eliminar uma delas
(Digamos A, que no celebridade) e resolver o problema para as restantes n - 1
pessoas. Neste caso h duas possibilidades:
1. A celebridade est entre as restantes n - 1 pessoas.
2. No h celebridade.
Se no h celebridade entre as restantes n - 1 pessoas, no h celebridades entre
as n pessoas porque a no celebridade.
Se h celebridade X entre as n - 1 pessoas, temos que verificar se:
A conhece X.
X no conhece A.
Se a resposta para estas duas questes sim, X uma celebridade tambm entre
as n pessoas.
O caso base para este problema acontece quando n = 2, que trivial. A H :
H: Sabemos como encontrar uma celebridade entre n - 1 pessoas.
A resoluo do problema para n pessoas usando a soluo para n - 1 j foi dada
acima.
Em cada um dos n - 1 passos do algoritmo, h:
Um teste para descobrir quem no celebridade entre A e B.
Dois testes para descobrir se a celebridade encontrada para n - 1 tambm
celebridade para n.
Ao todo temos 3 (n - 1) teste. Ou seja, para resolver este problema usamos
apenas uma pequena parte de sua entrada, que n (n - 1).
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)).
Estruturas de ados para !ra"os
Um grafo G = (V, E) usualmente representado por
1. Matriz de adjacncia.
Sendo n o nmero de vrtices de G, uma matriz de adjacncia para G uma
matriz A = (a
ij
)
n n tal que a
ij
= 1 se (v
i
, v
j
)

E.
V
1
V
1
V
2
V
3
V
4
V
1
0 1 1 0
V
2
V
3
A = V
2
0 0 0 1
V
3
0 0 0 0
V
4
V
4
1 1 1 0
A desvantagem desta representao que ela ocupa muito espao se h poucas
arestas, a maior parte da matriz intil. A vantagem que podemos saber se uma aresta
existe ou no em tempo constante.
2. Lista de Adjacncias.
H um vetor de n posies cada um apontando para uma lista. A posio i do vetor
aponta para uma lista contendo nmeros j tal que (V
i
, V
j
) E.
Para o grafo anterior temos:
V
1
2 3 nil
V
2
4 nil
V
3
nil
V
4
1 2 3 nil
#rvores
Definio: uma rvore um grafo conectado que no contm um ciclo. Exemplos:


Definio: uma floresta um conjunto de rvores.


rvores possuem vrias propriedades interessantes. Elas so dadas abaixo e
admitimos que o nmero de vrtices maior ou igual a 2.
Proposio 1: H um nico caminho ligando dois vrtices quaisquer de um grafo.
Prova: Suponha que haja dois caminhos distintos ligando vrtices V e W no grafo.
Caminhos distintos possuem pelo menos um vrtice no comum a ambos.
V
1
W
1

V W
Se isto acontece, haver um par de vrtices V
1
e W
1
que ligado por dois
caminhos que no possuem vrtices em comum (exceto V
1
e W
1
) e portanto haver um
ciclo, o que contradiz a hiptese de que o grafo uma rvore.
Proposio 2: Existe pelo menos um vrtice que ligado a apenas uma aresta.
Prova: Suponha o contrrio, isto , cada vrtice ligado a mais de uma aresta. Tomando
um vrtice V qualquer, construimos um caminho comeando em V. Entramos em um dado
vrtice e samos por outro. sto sempre possvel j que cada vrtice ligado a pelo
menos duas arestas.
Como o nmero de vrtices finito, em algum momento estaremos em um vrtice
W e a nica opo ser ir para um vrtice Z que j est no caminho. Neste ponto temos
um ciclo formado pelo caminho de Z a W (subconjunto do caminho de V a W) e pela
aresta (W, Z). Como rvores no possuem ciclos, a hiptese est errada, o que prova a
proposio.
Z
V
W
Proposio 3: A remoo de qualquer aresta da rvore cria exatamente duas novas
rvores.
Prova: Suponha que podemos remover uma aresta (V, W) da rvore e ela continue
conectada. Ento existe um caminho entre V e W que no envolve aresta (V, W), o que
significa que existe um ciclo no grafo original formado por este caminho e (V, W).
W
V (V, W)
Assim, quando uma aresta (V, W) removida, o grafo se desconecta formando
uma rvore que contm V e outra que contm W.
Proposio 4: Uma rvore com n vrtices possui n - 1 arestas.
Prova: Usaremos a prpria proposio como H. O caso base n = 2 e trivial.
Removendo uma aresta da rvore temos duas rvores G
1
e G
2
de acordo com a
proposio 3. Assumindo que G
1
possui k vrtices e G
2
m vrtices, pela H temos que G
1
e G
2
possuem k - 1 e m - 1 arestas, respectivamente. Logo, o grafo original possui (k - 1)
+ (m - 1) + 1 = (k + m) - 1 arestas. Como o nmero de vrtices da rvore original k + m,
a hiptese est provada.
k vrtices m vrtices
G
1
G
2
k - 1 m - 1
arestas arestas
Proposio 5: A adio de uma aresta na rvore cria exatamente um ciclo.
Prova: A adio de uma aresta (V, W) cria pelo menos um ciclo que aquele formado
pelo caminho ligando V e W na rvore (Proposio 1) e pela aresta (V, W).
Agora provaremos que a adio de uma aresta cria um e s um ciclo. Suponha
que mais de um ciclo criado pela adio de (V, W):
V W
Neste caso existem dois caminhos diferentes ligando V a W que no possuem
aresta (V, W), o que contradiz a proposio 1.
$rdenao %opolgica
Suponha que existam um conjunto de tarefas que precisam ser executadas, uma
por vez. Algumas tarefas dependem de outras e no podem ser comeadas antes que
estas outras sejam completadas. Todas as dependncias so conhecidas e ns
queremos fazer um esquema de execuo das tarefas que respeite a dependncia entre
elas. Este problema chamado ordenao topolgica.
Para resolv-lo, usamos um grafo dirigido onde os vrtices so as tarefas e existe
uma aresta de V para W se W s pode ser executado aps a execuo de V. O grafo
evidentemente deve ser acclico (por que?).
Problema: Dado um grafo acclico dirigido (Direct Acyclic Graph - DAG) G = (V, E) com n
vrtices, numere os vrtices de 1 at n tal que, se V possui nmero K, ento todos os
vrtices que podem ser atingidos de V por um caminho dirigido possuem nmeros > K.
Deste modo a execuo das tarefas pode ser feita na ordem 1, 2, 3, . n. Um
exemplo :
1
2 3 4
5
6 7
A hiptese de induo :
H: Ns sabemos como numerar um grafo com < n vrtices de acordo com as restries
acima.
O caso base n = 1 que trivial. Considerando o caso geral, grafo com n vrtices,
removemos um vrtice ficando com n - 1 e aplicamos a hiptese de induo.
O vrtice a ser removido aquele que no possui dependentes, isto , nenhuma
aresta "chega a ele. Este vrtice possui grau de entrada 0. De acordo com lema 1
(provado adiante) este vrtice sempre existe.
Aps encontrar este vrtice, numeramos ele com 1 e removemos do grafo ele e
suas arestas adjacentes. Ento aplicamos a H para os n - 1 vrtices restantes usando
nmeros de 2 a n.
Ns podemos aplicar a H nos n - 1 vrtices restantes por que este grafo tambm
satisfaz a hiptese inicial, isto , ele tambm um grafo acclico dirigido.
Lema 1: Um grafo acclico dirigido sempre contm um vrtice com grau de entrada 0, isto
, um vrtice sem dependncias.
Prova: Suponha o contrrio, isto , todos os vrtices possuem grau de entrada > 0 o que
significa que existe pelo menos uma aresta que leva a cada vrtice do grafo.
Neste caso, tomando um vrtice qualquer, poderamos caminhar no sentido oposto
direo das arestas sem nunca ter que parar, j que sempre existe aresta que chega a
cada vrtice. Como o nmero de vrtices finito, em algum momento chegaremos a um
vrtice em que j passamos antes. Neste caso teremos um ciclo, o que impossvel j
que o grafo acclico.
Aula &
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 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:


V
2, 2
K
2, 3
K
3, 3
Um grafo bipartido completo (GBC) possui uma aresta ligando cada vrtice de V
1
a
cada vrtice de V
1
. Se n
1
= |V
1
| e n
2
= |V
2
|, o GBC denotado por K n
1
, n
2
.
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)}
No h algoritmo em tempo polinomial para descobrir se dois grafos so isomorfos
ou no.
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 :
H: 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 extender a H para mais de um vrtice. sto ,
admitindo a H 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 G que no est em V
k
por que ento o caminho (V, G) seria menor que (V, W)
e G seria mais prximo de V que W.
V
k
V
k
V V


G - V
k
' G W W
Ento W ligado a um elemento de V
k
por uma nica aresta. Seja (U, Z) tal que U
V
k
e Z G - V
k
.
V
k
V

U
G - V
k
' Z
Esta aresta est associada ao caminho de V at U mais a aresta Z: V . U, Z. Ns
tomaremos todos estes caminhos e escolheremos o menor dentre eles. Deste modo
podemos acrescentar um vrtice a V
k
extendendo a H de K para K + 1.
Segue do raciocnio acima que o vrtice 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)
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 l g l
dist (d, a, V) = 7
dist (e, a, V) = 14
dist (c, V) = 8
dist (b, V) = 10
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 l g l
dist (g, d, a, V) = 19 dist (d, a, V) = 7
dist (e, a, V) = 14 dist (e, a, V) = 14
dist (c, V) = 8 dist (c, V) = 8
dist (b, V) = 10 dist (b, V) = 10
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 l g l
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 l g l
Teorema: Cada 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 semi-crculo ligando os dois vrtices. As
arestas no se interceptam porque elas esto em planos diferentes.
d
c
b
a
X

a (b, d)
(a, d)
c b

d (a, b)
(a, c)
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: Dada uma curva fechada no plano e dois pontos, um interior e outro exterior
a ela, qualquer curva ligando os dois pontos intercepta . (Este teorema chamado
teorema de Jordan)


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
primeiro teorema).
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.
G
1
b b
a d subdiviso
c de G
1
a d

c
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
.
Prova: Deixada como exerccio.
Um circutito eletrnico pode ser considerado um grafo onde as junes so
vrtices e as aarestas 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. sto 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.
'ista de E(erc)cios
1. No Unix possvel associar um outro nome a um arquivo ou diretrio j existente
atravs do utilitrio 1n:
1n NovoNome Arq
Aps a execuo do comando acima, NovoNome ser um alis para Arq. 1n pode criar
situaes perigosas, como fazer uma associao recursiva:
$cd /A/B
$1n C /A
$ o prompt do Unix. Neste caso estamos colocando o diretrio A, com nome C, dentro
do prprio A. Crie um novo comando safe1n que usa 1n e no permite este tipo de
situao.
2. 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.
3. 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.
4. Faa um algoritmo que elimina de um programa todas as subrotinas que nunca
podero ser chamadas em execuo.
5. Faa um algoritmo que faa coleta de lixo em uma representao do programa em
forma de grafos e outras estruturas de sua escolha.
6. 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 pode usar a rea de Y e Y pode usar a
de Z, ento X pode 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.
7. 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.
8. Em um banco de dados, o ABD (administrador de banco de dados) concede permisso
de uso do BD aos usurios. Se usurio A possui permisso de uso, ele pode conceder
esta permisso a usurio B.
Faa um algoritmo TemPermissao que retorne true se o seu parmetro X tem
permisso de uso do BD. Use as estruturas de dados que achar necessrio.
Admitindo que o ABD pode remover permisso de usurios, cite um exemplo onde
o algoritmo abaixo no funciona.
Algoritmo Tem Permissao(X)
if Alguem concede permissao a X
then
return true
else
return false
endif
9. Em um sistema operacional, um processo tem sua execuo suspendida se ele
aguarda um recurso (impressora, disco, .) que est sendo usado por outro processo.
Faa um algoritmo que detecta se h uma situao de deadlock entre os
processos. Por exemplo, processo A espera B liberar recurso R
1
e B espera A liberar
recurso R
2
.
10. Um grafo G dirigido e uma rvore com uma raiz com grau de entrada 0 (nenhuma
aresta incidente) e onde todos os vrtices possuem grau de sada 0 ou 2. Calcule o
nmero de vrtices com grau 0 em funo do nmero n de vrtices com grau 2. Prove por
induo.
Observao: A verso no dirigida de uma rvore dirigida no pode possuir ciclos.
11. Qual o nmero mnimo de bits em que pode ser colocada a forma de uma rvore
binria de n vrtices?
12. 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. Extenda este resultado para A
k
.
13. 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 de nomes diferentes entre si.
14. Refaa todas as provas de teoremas, proposies e lemas dadas em aula.
15. Prove: Se, aps a remoo de uma aresta de um grafo, temos um ciclo, o grafo
original possui um ou mais ciclos.
16. Prove: A remoo de um vrtice e suas arestas adjacentes de uma rvore pode
resultar em duas ou mais rvores.
17. Faa DFS e BFS nos grafos abaixo, comeando em V.
V

V
(b)
V
(a)

(c)
18. Encontre, se houver um circuito em cada um dos grafos acima.
19. Faa um grafo que contenha um circuito que no ciclo.
20. Explique como BFS pode ser usado para descobrir a distncia mnima, em nmero de
arestas, entre dois vrtices de um grafo.
21. Prove por induo: 2
n
< n! para n 4.
22. Represente um grafo no dirigido de n vrtices usando apenas metade de uma matriz
n n.
23. Seja G uma floresta com n vrtices e k rvores. Quantas arestas possui G?
24. Dois ciclos em um grafo possuem uma e s uma aresta em comum. Prove que o grafo
obtido pela remoo desta aresta possui pelo menos um ciclo.
25. 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.
26. Prove: Se G um grafo onde o grau de cada vrtice pelo menos dois, ento G
contm um ciclo.
27. Prove: Se G um grafo onde o grau de cada vrtice pelo menos quatro, ento G
contm pelo menos dois ciclos.
28. Um grafo Eureliano se existe um circuito que inclui cada aresta do grafo. Prove que
um grafo conectado Eureliano se e somente se o grau de cada vrtice par.
29. Prove: Dois caminhos podem possuir vrtices em comum sem possuir arestas em
comum.
30. Faa um algoritmo que diga se um grafo uma rvore ou no.
31. Prove: Se um grafo G contm um subgrafo no planar, G no planar.
32. Prove: Se G planar, qualquer subgrafo de G planar.
33. O grafo da figura abaixo mostra o mapa rodovirio de um pas. Os vrtices
representam cidades e os arcos, estradas. Em cada cidade, o governo espera construir
uma das seguintes obras: um teatro, um centro de esportes, uma piscina. Decidiu-se que
duas cidades ligadas por uma estrada no devem possuir obras semelhantes. possvel
atribuir obras a cidades de acordo com essa restrio?

Aula *
Emparel+amento ,Matc+ing-
Dado um grafo, um emparelhamento um conjunto de arestas t 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:

Erro

Emparel+amento 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 garotas e U um conjunto de garotos. As arestas
indicam as possveis combinaes.
Ou V pode representar um conjunto de trabalhadores e U um conjunto de
habilidades / profisses (eletrecista, secretria, telefonista, digitador, mecnico). Uma
aresta de um trabalhador o liga 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 :
J P A


d s t m
emparelhamento = M = {(J; t), (P; m), (A; s)}
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 pertence 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.:
V U (3 - 1) =
V U 2
Um caminho alternante ter sempre uma aresta que no pertence a M a mais que o
nmero de arestas de M.
sto , |P - M| = |M| + 1.
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 existe um caminho alternante, o emparelhamento M no 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.
Construimos agora um algoritmo (para encontrar o emparelhamento mximo em G)
baseado neste teorema. Por ele, qualquer emparelhamento que no mximo possui um
caminho alternante e este pode extender o emparelhamento.
O algoritmo faz uma primeira aproximao do emparelhamento mximo colocando
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
tal que:
Arestas do emparelhamento apontam de V para U; e,
Arestas no pertencentes ao emparelhamento apontam 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.
Um exemplo: encontrar 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:
1 2 3 4
} V
G
} U
A B C D
G'
Um caminho em G' conforme descrito anteriormente D3B2A1. nvertendo 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.
Planaridade ,.ontinuao-
Teorema: Para cada superfcie S, existe um grafo que no pode ser embebido em S.
Definio: Uma superfcie uma curva em 2 dimenses, no necessariamente no plano.
Ex.:
esfera
Torus
"pneu
Definio: Um grafo pode ser embebido em uma superfcie S se ele pode ser desenhado
de tal forma que suas arestas no se cruzam (exceto nos vrtices).
Nota: K
5
pode ser embebido no Torus:

K
3,3
pode ser embebido na fita de Mobius
Teorema: Um grafo planar pode ser embebido na esfera S se ele pode ser embebido no
plano.
Hopcroft e Tarjan fizeram um algoritmo O (n) para determinar se um grafo planar
ou no.
Flu(o em /edes
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), que > 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 e V - {s, t}
f (u, v) = f (v, w)
u

w
sto , o total de fluxo que entra em v o mesmo que sai.
Podemos imaginar os vrtices como junes e as arestas como canos d'gua.
Cada cano possui uma capacidade dada em m
3
/s alm da qual ele arrebenta.
Ou as arestas podem ser estradas, os vrtices cruzamentos e o fluxo a capacidade
de automveis por minuto da estrada.
Exemplo:
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
4/3 significa c (e)/f (e), isto , capacidade 4 e fluxo 3.
O objetivo maximizar o fluxo.
Exerccio: 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
Definio: Um corte um conjunto de arestas dirigidas ligando um vrtice de A a vrtice
de B. A um conjunto de vrtices qualquer que 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.
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: Um grafo no dirigido biconectado se existe pelo menos dois caminhos
disjuntos em vrtices ligando dois vrtices quaisquer do grafo.
Exemplos:





Se vrtices so computadores (ou processadores) e arestas 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 biconectados possuem um alto grau de conectividade. Situao oposta
acontece com rvores. Elas so conectadas mas a remoo de qualquer vrtice (ou
mesmo uma aresta) as desconecta.
Ento, se quizermos ligar vrios computadores utilizando o menor nmero de
ligaes possvel, mas de tal forma que todos possam conversar entre si, devemos usar
uma rvore.
Encontre o mximo fluxo do grafo abaixo utilizando o teorema do corte.
2

5 3 7 5 1

6 2
4
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.
R Z

Explique porque um caminho alternante possui um nmero par de arestas do
emparelhamento M e um nmero mpar de arestas E - M.
Em uma rede, prove que a quantidade de fluxo que sai de S a mesma que chega
em t.
Faa um algoritmo que particione um grafo G em seus componentes conexos G
1
,
G
2
, . G
n
.
Prove: Dois vrtices quaisquer de um grafo biconectado esto contidos em um ciclo.
Prove: Em uma rvore, a remoo de um vrtice desconecta o grafo.
Aula *01
,.ontinuao de Flu(o em /edes-
Definio: Uma seqncia aumentante (S A) 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 S A deve satisfazer uma das condies abaixo:
1. Se (a, b) dirigida de s para t, ento f (a, b) < c (a, b).
sto , 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) dirigida de t para s, ento f (a, b) > 0.
sto , as arestas que "apontam de t para s podem ter o seu fluxo diminudo.
Veja e
1
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 capaciadade para tanto. sto , a menor diferena c (e) - f (e) no caminho 2:
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 S A e aumentamos o fluxo em s - a - b - c de 1. Agora f (d, c)
diminui de 1 e conseqentemente f (d, t) aumenta de 1.
No caso geral, o fluxo em uma S A 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 S A:
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 S A alterado.
Teorema: Um fluxo f mximo se e somente se ele no admite nenhuma seqncia
aumentante.

Aula 2
Algumas aplica3es pr4ticas da %eoria dos !ra"os
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) i a > b then .
pode ser executado to logo a e b sejam inicializados.
A partir de um procedimento como
procedure P (a, b : integer);
var c, d, e : integer;
begin
d : = c a;
e : = d + 1;
c : = a + b;
i a > c
then
writeln (e)
end;
podemos montar um grafo de dependncias entre as instrues:
c : = a + b
d : = c a
ia >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.
Os caminhos do grafo que so independentes entre si podem ser executados em
paralelo, como
d : = c a
e : = d + 1 e i a > c
Esta propriedade pode ser usada para compilar programas escritos em uma
linguagem sequencial (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 sequenciais do programa. Lembre-se 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:
'
k
) i : = 1;
.
'
e
) a : = 2 i + j;
.
'
m
) b : = sqrt (i) + sqr (i);
.
Poderia haver uma OT tal que as instrues
k
,
e
e
m
aparecessem juntas:
.
k

e

m
.
Deste modo o compilador poderia colocar i em um registrador, o que aumentaria a
velocidade de execuo do programa. Se as instrues
k
,
e
,
m
esto espalhadas pelo
procedimento (ou OT) e um registrador associado a i, ento as instrues entre
k
,
e
,
m
no poderiam utilizar este registrador.
No cdigo
for i : = 1 to n do
v [i] : = w [i] * w [i] + 1;
h n caminhos independentes no grafo:

v [1]: = . v [2]: = . v[n]: = .

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;
Um programa se inicia em um ponto v e termina em um ponto (vrtice) w. Todas as
instrues entre v e w tem que ser executadas para que o programa termine (**assuma
isto). Ento, independente da quantidade de paralelismo que possamos colocar no
programa, ele no executar mais rpido que a execuo sequencial do maior caminho
entre v e w.
.ompresso de ados
Algoritmo de Huffman
Problema: Temos um texto usando caracteres ASC e queremos comprim-lo para uma
seqncia menor de caracteres.
A tcnica que utilizaremos representar cada caracter por uma seqncia de bits.
Ento tomaremos o texto original substituindo cada caracter pela seqncia de bits
correspondente.
Como existe 128 caracteres ASC, precisamos de 7*** bits para cada caracter se
representarmos todos eles usando o mesmo nmero de bits.
O algoritmo de Huffman representa os caracteres que aparecem mais no texto por
uma seqcia 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 caracter com 2 bits (A = 00, B = 01, C = 10, D = 11)
usaramos 9 2 = 18 bits.
Poderia haver ambiguidades na representao. Por exemplo, se A = 1 e B = 10,
no saberamos se 1010 AC ou BB.
Em geral, o cdigo de um caracter 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.
O problema ento :
Problema: Dado um texto, encontre 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 a
freqncia de cada caracter.
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
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
L (E, F) = 5 . 1 + 2 . 2 + 1 . 3 + 1 . 3 = 15
Considere uma rvore binria em que cada vrtice possui grau de sada 0 ou 2 e
s 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 caracter.
Para decodificar um texto codificado, percorremos a rvore at encontrar o 1.
caracter. Depois fazemos outra busca para o 2. caracter e assim por diante.
Observe que o fato de que os caracteres so folhas, implica em que a restrio de
prefixo obedecida.
Uma seqncia de bits s poderia ser prefixo de outra se o caracter
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.
H: 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 H
p / n - 1
obtendo uma rvore na qual os
dois caracteres combinados so introduzidos:

0 1
reintroduzindo
0 os 2 caracteres

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, codificamos 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 seu uso
facilite a sua compreenso.
Make
O programa make do Unix toma como entrada um arquivo texto contendo
comandos da forma
Nome : d
1
d
2
. d
n

Comandos
que significa que Nome, que o nome de um arquivo, depende dos arquivos d
1
d
2
. d
n
.
Make l este texto e executa Comandos se a data de ltima atualizao de algum
di for mais nova que de Nome. Ou seja, se algum di for mais novo que Nome, ele executa
comandos, que so comandos para o Unix. 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, porque ele mais novo que b . obj. A b . obj ser mais novo que
prog e prog ser linkado.
A relao de dependncias do make pode ser colocada em forma de um grafo.
As instrues apontadas pelas setas nunca sero executadas. Em geral, no so
executadas instrues em label que aparecem aps um desvio como return ou goto.
Podemos representar o 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 if's e while's)
O cdigo dado como exemplo seria representado como
i (i > 0)
j = 1 j = 10
goto L
1

a = 10
return 1
L
1

Fim
do procedimento
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.
Aula 1
Problema: Faa um algoritmo que retorna true se um grafo no dirigido G (V, E) possui
um ciclo, false caso contrrio.
Algoritmo HaCiclo (G (V, E), V): boolean
'Faz uma busca em profundidade no grafo)
marca V
para cada aresta (V, W) E V faa:
se W no foi marcado
ento
se HaCiclo (G, W)
ento
'termina esta chamada do algoritmo e
retorna para quem chamou)
retorne true
fim-se
seno
'achou um ciclo - no necessrio continuar
a busca em vrtices adjacentes a V)
retorne true
fim-se
retorne false
fim - algoritmo
Problema: Faa um algoritmo que retorna true se um grafo dirigido G (V, E) possui um
ciclo, false caso contrrio.
Observe que o algoritmo anterior no funciona se o grafo dirigido, como no exemplo
abaixo:
V

no h ciclo e ele retorna true.
O algoritmo para grafos dirigidos faz uma busca em largura 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

Algoritmo HaCicloDirig (G (V, E), V, S) : boolean


marca V
empilha V na pilaha S.
para cada aresta (V, W) V faa:
se W no foi marcado
ento
se HaCicloDirig (G (V,E), W, S) ento retorne true fim-se
seno
se W est na pilha S
ento
retorne true
fim-se
fim-se
retorne false
fim - algoritmo
Antes de chamar este algoritmo, S deve estar vazia.
Note que claro que se os algoritmos retornam true h ciclo no grafo (embora ns
no provamos isto). Tambm verdade que se h ciclo no grafo, os algoritmos retornam
true, embora o raciocnio para chegar a esta concluso no seja to simples.
#rvore de Espal+amento de .usto M)nimo
Suponha que temos uma rede de computadores e queremos enviar uma
mensagem de um computador qualquer para todos os outros. Existe um custo associado
ao envio de uma mensagem que, digamos, proporcional distncia entre dois
computadores:
b

2 4
a 3 d
G: 3 5
1
c
6 e
O problema acima pode ser representado por um grafo onde os vrtices so os
computadores e existe aresta (V, W) se V ligado a W. O que queremos encontrar um
subgrafo conectado de G contendo todos os vrtices tal que a soma dos custos
associados a cada aresta mnima.
Para o exemplo acima teramos
b

2 4
d
3 1

c e
Como o subgrafo conectado, uma mensagem lanada a partir de um vrtice
qualquer alcanaria todos os outros vrtices.
Claramente o subgrafo descrito acima 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.
A rvore que satisfaz os requerimentos acima (contm todos os vrtices do grafo e
possui custo mnimo dentre todos os subgrafos conectados que contm todos os vrtices
do grafo) chamada de rvore de espalhamento de custo mnimo (minimum - cost
spanning tree) - AECM.
Para encontrar a AECM de um grafo G, usaremos a seguinte H:
H: 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 H de uma persectiva 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
b

2 4
a 3 d
3 5
1
c
6 e
os passos da execuo do algoritmo corresponde H 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 H K = 1. sto , queremos escolher a primeira aresta a ser
colocada em T. Ns 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
novamente que possui um custo menos 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
extender T de uma aresta. A unio de T com a nova aresta deve ser uma rvore e ser
subgrafo da AECM (por H). O problema qual aresta escolher.
Sendo T um subgrafo da AECM, deve haver pelo menos uma aresta da AECM
ligando T a vrtices no em T:
AECM
T

esta
aresta existe
No caso geral, existe mais de uma aresta nesta situao. Seja E
k
o conjunto de
todas as arestas ligando vrtices 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.
U T G

2 W
Suponha que (V, W) AECM, temos a configurao
T
U
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 e 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 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. sto , acrescentando
(V, W) e retirando (X, Y), encontramos uma rvore em um custo menor ainda.
Ento a suposio inicial de que (V, W) - menor custo em E
k
- no est na AECM
est errada. sto , (V, W) AECM.
O algoritmo corresponde H comea com T = 'aresta de menor custo) e vai
acrescentando arestas a T at que T1 = V1. As arestas acrescentadas so as de menor
custo que ligam T a G - T.
Algoritmo AECM (G (V, E))
T = 'aresta de G com menor custo)
enquanto T1 < V1 faa:
T = T U 'aresta (V, W) de menor custo tal que V T e W G - T)
retorne T
fim algoritmo.
Um exemplo completo :

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)

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
.olorao
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


impede que X (G) seja 2.
Um grafo completo de n vrtices (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 possui K
n
como subgrafo, ento X (G) X (K
n
) ou
X (G) n.
Um grafo bipartido podem ser divididos em dois conjuntos U e V tal que no
existem arestas dentro de cada conjunto:
U

V K
n
)
Ento, todo grafo bipartido pode ser colorido com apenas duas cores.
O Problema das Quatro Cores: Dado um mapa qualquer (no plano), podemos color-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 1977 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
3
5 1
2 3 5 2 4
3
1
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 fronteirra entre
duas regies que no fazem fronteira no plano - seria uma fronteira no espao. Veja
figura abaixo.
Lembre-se que um grafo no planar pode ser colocado em um plano desde que
algumas arestas no espao liguem alguns vrtices:

K
5

a aresta pontilhada uma aresta no espao.


Aula 5
.omple(idade de Algoritmos
Dizemos que uma funo g (n) O (f (n)) - g (n) = O (f (n)) - se existem constantes
C e N tal que, para n N, g (n) c f (n).
f, g
f
g
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 C f (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.
Se um algoritmo para grafos possui complexidade O (|E|), (considerando G (V,
E), ento cada aresta visitada um nmero constante (um, dois, . no interessa, desde
que seja constante) de vezes.
Vejamos a complexidade de alguns algoritmos de grafos:
DFS: Cada aresta visitada duas vezes, uma de cada vrtice a que ela adjacente:

1
2

Ento, o nmero de visitas 2 |E| e o algoritmo O (|E|).


BFS: O mesmo raciocnio do DFS. Complexidade O (|E|).
Ordenao Topolgica: A grosso modo podemos dizer que cada vrtice e cada aresta
usada (o) um nmero constante de vezes. Ento, a complexidade O (|E| + |V|).
Os algoritmos cuja complexidade so da forma O (n
k
), k constante, so chamados
de polinomiais e so considerados eficientes. Algoritmos com complexidade O (k
n
), k
constante, so chamados exponenciais. Ex.:
O (1), O (n
2
), O (n
3
), O (|V|
3
+ |E|
3
), O (n) polinomiais
O (2
x
), O (3
x
) exponenciais
Em geral, algoritmos exponenciais so muito lentos para serem usados na prtica.
Veja a tabela abaixo que mostra o tempo em segundos para executar diversos algoritmos
(cujas complexidades so dadas) considerando-se n = 1000 e que o computador executa
1000 passos do algoritmo por segundo.
.omple(idade log2 n n n log2 n n
1 - 5
n
2
n
3
1 . 1
n
tempo ,seg- 0 . 01 1 10 32 1000 1000000 10
38
Algoritmos Probabilsticos
Problema: Dado um conjunto de nmeros X
1
, X
2
, . X
n
, selecione um elemento que
maior ou igual a n/2 elementos do conjunto.
Uma opo para resolver este problema ordenar o conjunto e a tomar o mximo
elemento, o que pode ser feito em O (n log n). Outra possibilidade mais barata seria ir
selecionando o mximo elemento do conjunto at termos usado n/2 elementos. No
difcil de ver que nenhum algoritmo melhor, j que obrigatoriamente n/2 elementos
devem ser usados (pela definio).
Contudo, existe um algoritmo melhor se no exigirmos que a soluo esteja 100%
correta.
Tomemos dois elementos X e Y quaisquer do conjunto. Assuma X Y. A
probabilidade de que X maior ou igual a n/2 elementos . A probabilidade de que X
menor do que n/2 elementos < . Ento, a probabilidade de que X e Y sejam
menores que n/2 elementos < . J que X Y, esta probabilidade a mesma que X ser
menor que n/2 elementos. Logo, a probabilidade de X ser n/2 elementos .
Tomando k nmeros e selecionando o mximo dentre eles, digamos W, a
probabilidade de que W seja maior ou igual a n/2 elementos 1 -
k
. Se usarmos k =
100, a probabilidade de W no estar na metade superior do conjunto quase 0. Observe
que precisamos fazer k - 1 comparaes para achar W, o que independe de n.
Este tipo de algoritmo chamado algoritmo de Monte Carlo. Ele pode dar o
resultado errado mas a probabilidade mnima.
Outro tipo de algoritmo chamado de Las Vegas. Este tipo sempre retorna um
resultado correto e possui um tempo de execuo (Complexidade) esperado (leia-se
mdio) baixo. Contudo, ele pode demorar um tempo arbitrariamente longo para executar.
/eduo
Um problema (no algoritmo) P pode ser reduzido a um problema Q se, conhecido
um algoritmo para Q, ento podemos encontrar um algoritmo para P. ndicaremos que P
pode ser reduzido a Q por
P Q
a direo da flexa indica para onde a soluo vai.
O algoritmo "encontre o maior elemento de um vetor pode ser reduzido a "ordene
um vetor. Aps ordenar o vetor, podemos simplesmente pegar o ltimo elemento, que
o maior.
Note que a transformao do resultado de "ordene um vetor para "encontre o
maior. feito em tempo O (1).
O problema de multiplicar duas matrizes A e B pode ser reduzido ao problema de
elevar uma matriz ao quadrado usando a seguinte frmula:
O B_
2
O B_ O B_ BA O_
A O, A O, A O, O AB,
Tendo A e B, construmos a matriz O B_ e invocamos o algoritmo
A O,
SQR (X) que retorna X
2
. Do resultado tomamos BA e AB. Concluso: A complexidade da
multiplicao de matrizes no maior do que a complexidade do problema "Eleve matriz
X ao quadrado.
O problema da ordenao dos nmeros X
1
, X
2
, . X
n
pode ser reduzido
compresso de dados pelo mtodo de Huffman da seguinte forma:
Construa a rvore de Huffman para 2
X1
, 2
X2
. 2
Xn
.
Pelo algoritmo, a rvore ter a forma


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 reduzvel 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). sto , a resposta dada por Q pode ser usada como a
resposta para P.
resposta sim / no
P Q
entrada convertida
em tempo polinomial
Se a converso da entrada de P para Q toma tempo O (f (n)) o algoritmo para Q
possui complexidade O (g (n)), ento o algoritmo para P dada pela reduo possui
complexidade
O (f (n)) + O (g (n)) = O (f (n) + g (n))
Em particular, se g (n) exponencial, O (f (n) + g (n)) O (g (n)
X : O (n
3
+ 2
n
) = O (2
n
).
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.
Uma expresso booleana S est na forma normal conjuntiva (FNC) se ela o
produto de subexpresses que so somas.
Produto e lgico e soma ou lgico. Exemplo:
_ _ _ _ _
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, S acima satisfazvel pois se a = 1, b = 1, c = 0, 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.
Definio: Um problema X chamado de NP - completo se
1. X pertence a NP.
2. Cada problema em NP polinomialmente reduzvel a X. sto , 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, seno o mais
importante. Ele implica que, se o problema SAT pode ser resolvido em tempo polinomial,
todos os outros o sero,
Y
2
W
2

SAT X
1
X
2
Y
1
W
1
pois a complexidade de X
1
, por exemplo, igual complexidade do polinmio que
transforma a entrada de X
1
para SAT mais a complexidade do SAT, que estamos
assumindo ser polinomial. Como polinmio + polinmio = polinmio, X
1
tambm
polinomial. Ento, se SAT pode ser resolvido em tempo polinomial, todos os problemas
em NP tambm podem, implicando P = NP. nfelizmente ningum conseguiu ainda provar
que SAT pode ou no ser resolvido em tempo polinomial. sto , 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 temos 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 reduzvel ao problema do clique:
Y
2
W
2

SAT X
1
X
2
Y
1
clique
Dado um problema qualquer em NP, digamos X
1
, podemos reduz-lo a SAT e
ento reduzir SAT a clique. Resolvendo clique, resolvemos X
1
. Ento, qualquer problema
em NP reduzvel a clique.
Montando um desenho como o acima, um problema X NP - completo se existe
um caminho de X para SAT. Como X tambm pertence a NP, existe seta de SAT para X,
pois qualquer problema em NP pode ser reduzido a SAT.
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, 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.
Aula 6
Definio: Um grafo G no dirigido Eureliano se existe um caminho fechado (circuito)
que inclui cada aresta de G. Este caminho chamado de "caminho Eureliano.
Arestas em um circuito no se repetem. Assim, um caminho Eureliano contm
cada aresta do grafo exatamente uma vez.
Exemplo:
4 1

G: Caminho 8 5 3 2
Eureliano:
7 6

Teorema: Um grafo conectado G Eureliano se e somente se o grau de cada vrtice de
G par.
Prova: Exerccio.
O algoritmo para encontrar um caminho Eureliano (CE) em um grafo G que
satisfaz o teorema acima o seguinte:
A partir de um vrtice V qualquer, comece a percorrer o grafo sem passar por
nenhuma aresta duas vezes.
Como o grau de cada vrtice par, podemos sempre entrar em um novo vrtice
por uma aresta e sair por outra:

Como o nmero de vrtices de G finito, em algum momento retornaremos a V.
Como nenhuma aresta foi usada duas vezes, temos um circuito P. Note que este circuito
pode no conter todos os vrtices do grafo:

1
G: Circuito:
4
P
2 3
Agora contruimos G' retirando de G as arestas do circuito encontrado acima. O
grau de cada vrtice em G' par pois o nmero de arestas removidas de cada vrtice
par. G' pode no ser conectado. Sejam G'
1
, G'
2
, . G'
k
os componentes anexos de G'.
Cada grafo G'
i
conectado e o grau de cada vrtice par (pois o grau de cada vrtice de
G' par). Sejam P
1
, P
2
, . P
k
os circuitos Eurelianos encontrados pela aplicao
recursiva deste algoritmo a G'
1
, . G'
k
.
Para encontrar um Caminho Eureliano para G, comeamos percorrer o circuito P a
partir de um vrtice qualquer. Quando encontramos um vrtice V que pertence a um
caminho P
i
, percorremos P
i
, retornamos a V e continuamos a percorrer P novamente.
Deste modo, quanto chegarmos ao vrtice inicial de P, teremos percorrido P, P
1
, P
2
, .
P
k
.
sto , teremos um circuito Eureliano. Veja a ilustrao abaixo.
P
1
P
2
P
4
P

P
3
O desenho acima mostra o circuito P (grande) e os circuitos P
1
, P
2
, P
3
. obtidos
aps a remoo de P do grafo. O desenho abaixo mostra como todos estes circuitos
podem ser conectados para formar um CE para o grafo.
P
1
P
2
P
4
P P
3

incio
Dica: No se preocupe em aprender todas as formalidades do algoritmo acima (P
1
, P
2
,
G'
k
, etc), mas aprenda como ele funciona. sto , saiba aplic-lo na prtica.
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 outras de suas arestas.




CH




CE
O problema "Encontre um CH para um grafo G NP - completo 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.
'ista de E(erc)cios de %eoria de !ra"os
O nmero entre parnteses aps o nmero do exerccio diz a importncia relativa deste
exerccio. Nmeros maiores so mais importantes.
1. (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.
2. (0) (Opcional - no essencial) Qual a complexidade da funo abaixo, no pior caso?
int f (int n, int a)
/ / n > 0, 1 a n
{
int b = n/a; i = );
while ( -- a > 0 && -- b > 0)
i ++;
return i;
}
3. (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.
4. (3) Prove que a aresta de menor custo em um grafo G pertence AECM de G.
5. (4) Mapeie o problema abaixo para grafos, especificando precisamente o que vrtice,
aresta e qual seria o problema a ser resolvido. No se esquea de dizer os parmetros
do problema. Por exemplo, uma resposta poderia ser "Encontre um clique com k
vrtices.
Uma companhia manufatura os produtos qumicos C
1
, C
2
, . C
n
. Alguns destes
produtos podem explodir se colocados em contato com outros. Como precauo contra
acidentes, a companhia quer construir k armazns para armazenar os produtos qumicos
de tal forma que produtos incompatveis fiquem em armazns diferentes. Qual o menor
nmero k de armazns que devem ser construdos?
6. (4) Um plotter deve desenhar um certo conjunto de pontos isolados no papel de tal
forma que a cabea de impresso mova o menos possvel. Como este problema pode ser
mapeado em grafos?
7. (4) Calcule a complexidade dos algoritmos abaixo em funo de n.
1. i = 1;
while (i n) and (v [i] < m) do
i : = i + 1;
2. for i : = 1 to n do
for j : = 1 to n do
begin
soma : = 0;
for k : = 1 to n do
soma : = soma + A [i, k] B [k, j];
C [i, j] : = soma
end
8. (4) Simplifique:
(a) O (n) + O (n
2
) + O (n
3
)
(b) O (n
2
) + O (nlog n)
(c) O (1) + O (n)
(d) O (n
2 . 81
) + O (2
n
)
9. (1) Simplifique:
(a) O (2
2n
) + O (n
3
) + O (2
n
)
(b) O (n!) + O (2
n
)
10. (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).
(c) Encontre o menor e o maior elementos do vetor.
Reduza:
(a) a (b).
(a) a (c).
(c) a (b).
11. (5) Assuma que um problema P polinomialmente reduzvel a Q e:
(a) A Entrada de P pode ser transformada em entrada para Q em tempo O (nlog 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?
12. (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
) ?
13. (5) Assumindo que N e NP so conjuntos, qual a relao entre eles (, =, , etc) ?
14. (1) A expresso

S = (a + b) (a + b + c) (a + b + c) c
satisfazvel?
15. (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.
(c) Encontrar a AECM de um grafo.
(d) Encontrar um caminho hamiltoniano de um grafo.
16. (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 encontra um algoritmo
de complexidade f (n) para resolver B, ento, aplicando a reduo, temos um algoritmo
de complexidade f (n) + P (n) para A. sto : 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 polinoamial?
17. (3) Suponha que SAT no fosse NP - completo. Como poderamos provar que o
problema do clique NP - completo?
18. (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 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?
(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) Usando a definio de NP - completo, explique porque R e S so NP - completos.

Você também pode gostar