UNIVERSIDADE FEDERAL DE MINAS GERAIS 
INSTITUTO DE CI

ENCIAS EXATAS 



DEPARTAMENTO DE CIENCIA DA COMPUTACAO 
ALGORITMOS E ESTRUTURAS DE DADOS III 

Professores: Wagner Meira Jr e Jussara Almeida 
TerceiroTeste: 12.5pontos 

Aluno: 


Avaliador: 


 Duracao do teste: 50 minutos. 
 Prova individual e sem consulta. 
 Faz parte da prova a interpretacao das questoes. Caso voce ache que falta algum detalhe 
nas explicacoes faca as suposicoes que achar necessarias e documente-as na resolucao das 
questoes. 
1a 
Questao 
(6.0 pontos) 

1. Seja o problema de decisao da Cobertura de Vertices definido como: Dados um grafo 
G 
=(V, 
E) nao direcionado e um inteiro k, G contem um subconjunto de vertices V 
0 
(V 
0  V 
)de tamanho no maximo k 
talque se(u, 
v)2 E 
entao u 
2 V 
0 ou v 
2 V 
0 , ou 
ambos? 
ProvequeoproblemadaCoberturadeVertices eNP-Completo,partindodapremissa 

que o Problema da Clique e NP-Completo. 
O Problema da Clique e definido como: Dados um grafo G 
=(V, 
E)nao direcionado e 
um inteiro k, existe um subconjunto de vertices V 
0 (V 
0  V 
)de tamanho no mnimo k 
tal que para quaisquer dois vertices u 
e v 
em V 
0 , u 
e v 
sao adjacentes? 


Para provar que um problema e NP-Completo, e preciso: 

(1)Provar que ele pertence a NP 
(2)Fazer uma reducao polimonial de um outro problema conhecidamente NP-
Completo para o problema em questao. 
ParaprovarqueCV(CoberturadeVertices) eNP,oalunodeve: 

a) Apresentar um algoritmo polinomial nao determinista que o resolva, ou 
b) Apresentar um algoritmo polinomial determinista que verifica uma dada 
solucao. 

A seguir apresentamos possveis solucoes para a) e b). Na prova, o aluno deve 
escolher uma dentre as duas opcoes. 

a) 
algoritmo 
resolveCV(V,E) 


{ 
S 
= 
conjunto 
vazio; 
// 
inicializa 
conjunto 
solucao 
for 
i=1 
to 
|V| 
do 
{ 


flag 
= 
escolhe(V[i]); 
// 
escolhe 
retorna 
se 
vertice 
V[i] 
// 
fara 
parte 
do 
conjunto 
solucao 
if 
(flag 
== 
TRUE) 
S 
= 
S 
+ 
V[i]; 
} 



if 
|S| 
<= 
k 
return 
sucesso; 
return 
insucesso; 


} 


b) 
algoritmo 
verificaCV(V,E,S) 


{ 
if 
(|S| 
> 
k) 
return 
false; 
//solucao 
tem 
no 
maximo 
k 
elementos. 
for 
i=1 
to 
|E| 
do 
{ 
Seja 
(u,v) 
a 
aresta 
sendo 
processada 
Se 
(u 
nao 
pertence 
a 
S) 
e 
(v 
nao 
pertence 
a 
S) 
return 
false; 
} 
return 
true; 


} 


O algoritmo resolveCV tem ordem de complexidade O(|V 
|), assumindo escolhe 
tem ordem de complexidade O(1). Ja o algoritmo verificaCV tem ordem de 
complexidade O(|E|). Ambos sao polinomiais. 

O proximo passo consiste em reduzir polinomialmente o problema da Clique 
(Cq) para o CV. Isto e, precisamos provar que Cq 
/ CV 
. 

SejaG(V,E),kumainstanciadaCq, iremos construir umainstanciaG(V,E), 



k do CV fazendo G 
0 = G 
(grafo complementar)e k 
0 = |V 
|k. 

Agora prove: 
1) Se G 
tem Cq de tamanho  k, entao G 
0 tem CV de tamanho  k 
0 = |V 
|k. 


De fato, seja a solucao de Cq dada por V 
0 . Quaisquer dois vertices em V 
0 tem 
que ser adjacentes em G. Consequentemente, eles nao podem ser adjacentes 



em G. Assim, para toda e qualquer aresta (u, 
v) em G, ou u 
ou v 
ou ambos 
estao no subconjunto V 
V 
0 . Este subconjunto e portanto solucao do CV 
em 
G
. Como V 
0 tem no mnimo k 
vertices, V 
V 
0 tem no maximo |V 
|k 
vertices. 

2) Se G
tem CV de tamanho  k 
0 = |V 
|k, entao G 
tem Cq de tamanho  k. 

Neste caso, seja a solucao do CV dada por V 
0 . Entao temos que, para toda 
e qualquer aresta (u, 
v) 2 G
, ou u 
ou v 
ou ambos estao em V 
0 . Portanto, 
seja quaisquer dois vertices p 
e q 
que pertencem ao subconjunto V 
V 
0 . Por 



construcao p 
e q 
nao podem ser adjacentes em G 
e, consequentemente, tem 
que ser adjancementes em G. Logo V 
V 
0 e solucao do Cq. Como V 
0 tem no 
maximo k 
0 = |V 
|k 
vertices, V 
V 
0 tem no mnimo k 
vertices. 

Nota Criterio S/N 
1.5 Provou que Cobertura de Vertices pertence a NP 
1.5 Fez a transformacao do Cq para CV 
1.5 Provou que solucao do Cq leva a solucao do CV 
1.5 Provou que solucao do CV leva a solucao do Cq 

2a 
Questao 
(2.0 + 2.0 + 1.0 + 1.5 pontos) 

Seja o problema de determinar a cobertura de vertices em grafos. Pede-se: 

1. Apresente uma heurstica gulosa para o problema da cobertura de vertices. Qual a 
complexidade do seu algoritmo? 
Umaestrategiagulosaseriaadicionar osverticesemordemdecrescentedegrau 


ate que todas as arestas estejam coberta. A complexidade dele e O(|V 
|log|V 
|) 
se for preciso ordenar os vertices em ordem decrescente de grau. 

Nota Criterio S/N 
1.5 Apresentou algoritmo correto 
0.5 Complexidade do algoritmo e correta 

2. Apresente um algoritmo aproximado com razao de aproximacao nao maior que 2 para 
o problema da cobertura de vertices. 
1) Inicie o conjunto solucao S 
como um conjunto vazio. 
2) Enquanto houver arestas no grafo G 
faca: 
a) escolha uma aresta qualquer (i, 
j)do grafo, 
b) inclua i 
e j 
a S, 
c) remova todas as arestas incidentes a i 
ea j 
de G. 
Ao final, retorne S. 


Nota Criterio S/N 

2.0 Algoritmo correto 
3. Quala complexidade do seu algoritmo? Justifique. 
O algoritmo tem complexidade O(|E|)onde |E|e o numero de arestas nografo. 

Nota Criterio S/N 

1.0 Complexidade correta 
4. Quala razao de aproximacao do seu algoritmo? Justifique. 
Seja C 
o conjunto de arestas selecionadas no passo 2a). Note que nenhuma 
destas arestas compartilha um mesmo vertice. Uma cobertura de v

ertices otima 
S deve conter pelo menos um vertice ligado a cada uma das arestas de C, 
senao nao seria uma cobertura. Entao |S 
||C|. 
A solucao S 
retornada pelo algoritmo contem os dois vertices de cada aresta 
de C. Logo |S|=2|C|. 

S 
2|C|

Portanto, a razao de aproximacao RA 
=  . Ou seja, RA 
 2.

S C 


Nota Criterio S/N 

1.5 Razao de aproximacao correta 

Item Nota Observacoes 
1.1 
2.1 
2.2 
2.3 
2.4 


