Você está na página 1de 6

PROJETO E ANÁLISE DE ALGORITMOS

Trabalho Extra - Tratabilidade


Alice Cabral1 e Juliana Silvestre1
1
Instituto de Ciências Exatas e Informática –
Pontifı́cia Universidade Católica de Minas Gerais (PUCMG)
Belo Horizonte – MG – Brasil

alicecamarques@gmail.com, acmsilverio@sga.pucminas.br, leo.mvm@hotmail.com

1. Questão 1
O problema da Mochila consiste em: dado um conjunto A de n itens, cada um deles
estando associado a um peso A e um valor C, ambos inteiros positivos, e um inteiro B, o
problema é encontrar um subconjunto dos itens tal que o peso seja no máximo B e possua
valor máximo.

1.1. Problema de Decisão


Considerando o problema acima e uma variável V, podemos formular o problema de de-
cisão correspondente da seguinte maneira: é possı́vel encontrar um subconjunto N per-
tencente a A, tal que a soma dos pesos dos itens desse conjunto seja no máximo igual a B
e a soma dos valores maior ou igual a V?

1.2. Mochila ∈ NP
Um problema NP (não determinı́stico polinomial) é aquele que possui um certificador efi-
ciente, ou seja, dado um certificado, que é uma solução para o problema, e uma instância,
pode-se provar que o certificado está em tempo polinomial.
Para o problema da Mochila, temos que a instância do problema corresponde ao
conjunto A, com seus respectivos itens com pesos e valores, e os inteiros B e V. A partir
disso, utiliza-se a estratégia abaixo para determinar se o certificado N, o qual corresponde
à um subconjunto de A, é uma solução verdadeira:
1. Verifique se a quantidade de elementos presentes em N é <= B
2. Percorrer o subconjunto N somando os valores de cada item
3. Verificar se tal soma possui valor >= V
O algoritmo acima leva tempo linear de acordo com o tamanho do subconjunto
N’, permitindo assim concluir que o certificado está em tempo polinomial e, portanto, tal
problema pertence à classe NP.

1.3. Subset Sum ≤p Mochila


Para provar que o problema da mochila pertence a classe NP-completo, será feita uma
redução em tempo polinomial a partir do problema Subset Sum, o qual consiste em: dado
um conjunto Sj (j = 1, 2, ...,s) de números e um número t, verificar se existe um subcon-
junto T de S tal que a soma de T seja igual a t.
A fim de demostrar a redução, deve-se considerar que
• Cada inteiro pertencente ao conjunto S em Subset Sum, corresponde a um item A
do problema da Mochila com tamanho Aj = Sj e valor Cj = Sj;
• Os valores B e V do problema da mochila corresponderam ao valor t.
Dessa maneira, podemos demonstrar que existirá uma solução para a instancia de
Subset Sum apenas se existir uma solução para instancia do problema da Mochila em que
o valor é maior ou igual a V. Considerando um subconjunto T de {1, 2, ..., s} tal que:
X
Sj = t,
j∈T

Fazendo a atribuição de tais valores para o problema da Mochila temos que:


X X X X
Aj Sj = t = Be Cj Sj = t = V
j∈T j∈T j∈T j∈T

Logo, temos que tal solução é uma solução verdadeira para o problema da
Mochila. Convém destacar anda que, uma vez que encontramos uma solução verdadeira
para o problema da Mochila, temos um subconjunto {1, 2, ..., t}, logo:
X X X X
Aj Sj <= B = te Cj Sj >= V = t
j∈T j∈T j∈T j∈T

Concluı́mos, portanto, que tal solução também é verdadeira para o problema Sub-
set Sum. A partir disso, foi possı́vel demonstrar a redução de Subset Sum para o problema
da Mochila, o qual pertence a classe NP-completo.

2. Questão 2
Considerando um grafo não direcionado G = (V, E), uma cobertura de vértices é um
subconjunto de vértices de um grafo em que todas as arestas do grafo são incidentes
em pelos um dos vértices deste subconjunto. Desta forma, o problema da Cobertura de
Vértices é: dado um determinado grafo G = (V, E) e um inteiro k, G possui uma cobertura
de vértices de no máximo k vértices? Por exemplo, no grafo ilustrado abaixo, a cobertura
de vértices é >= 2.

Figure 1. Exemplo de Cobertura de Vértices


2.1. Cobertura de Vértices ∈ NP
Um problema NP (não determinı́stico polinomial) é aquele que possui um certificador efi-
ciente, ou seja, dado um certificado, que é uma solução para o problema, e uma instância,
pode-se provar que o certificado está em tempo polinomial.
Dessa maneira, para demostra que o problema da Cobertura de Vértices é um
problema pertencente a classe NP, podemos utilizar a estratégia apresentada abaixo, em
que a instância do problema é representada por um grafo G (V, E) e um inteiro k e o
certificado é um subconjunto V’ de V, que contém os vértices na cobertura de vértices:
1. Criar variável count = 0
2. Para cada vértice v em V’
3. Remover todas as arestas adjacente à v do conjunto E
4. Incrementar count em 1
5. Se count = k e o conjunto E estiver vazio, então a solução está correta
6. Se não, a solução é falsa
O algoritmo acima leva tempo linear de acordo com o tamanho do subconjunto V’, per-
mitindo assim concluir que o certificado está em tempo polinomial e, portanto, tal prob-
lema pertence à classe NP.

2.2. Independent Set ≤p Cobertura de Vértices


A fim de provar que o problema de Cobertura de Vértices pertence à classe NP-completo
a partir de uma redução de Conjunto Independente, deve-se considerar uma instância que
seja verdadeira para o Conjunto Independente.
O Conjunto Independente é um subconjunto s de vértices de um determinado grafo
não direcionado G (V,E), tal que dois vértice pertencentes a este subconjunto não são
conectados por qualquer aresta, ou seja, é um subconjunto de vértices que não possui
arestas entre si. Dessa maneira, dado um inteiro k podemos buscar se G contém um con-
junto independente com tamanho no mı́nimo igual a k.No grafo ilustrado, por exemplo,
temos que o Conjunto Independente é <= 3 e está representado pelos vértices A, C e E.

Figure 2. Exemplo de Conjunto Independente

Para demonstrar a redução polinomial de Conjunto Independente para Cobertura


de Vértices, deve-se considerar um grafo G (V, E), de modo que um determinado subcon-
junto S será um Conjunto Independente em G se V – S for uma Cobertura de Vértices em
G. Para provar isso temos que:
• Prova 1
1. Seja o subconjunto S um Conjunto Independente
2. Considerando uma aresta aleatória (u,v)
3. Se S é um Conjunto Independente, então u não pertence à S e v também
não pertence à S, logo tais vértices pertencem à V -S.
• Prova 2
1. Seja V – S uma Cobertura de Vértices
2. Considerando dois vértices u e v pertencentes à S.
3. Teremos que a arestas (u,v) não pertence a E.
4. Logo, dois vértices em S não possuem aresta entre eles, ou seja, S é um
conjunto independente.

Dessa maneira, temos que um grafo G possui um Conjunto Independente de tamanho no


mı́nimo igual a k, se G’ possui uma Cobertura de Vértices com tamanho no máximo igual
a k’, em que G = G’ e k’ = n – k. Logo, concluı́mos que o Conjunto Independente pode
ser reduzido para Cobertura de Vértices e que este é NP-completo.

3. Questão 3
O problema Profit Schedulling, explicitado no enunciado da questão, é NP, tendo em
vista que é fácil verificar em tempo polinomial se um determinado cronograma atende às
condições. Ele pode ser provado ser NP-completo por meio de uma redução do problema
Subset Sum.

3.1. Subset Sum ≤p Profit Schedulling


Supõe-se uma instância do Subset Sum na forma de: um conjunto finito A, um tamanho
s (a) ∈ Z + para cada a ∈ A, e um número inteiro positivo P B, o problema sendo de-
terminar se há um subconjunto A′ ⊆ A, de tal modo que a∈A , s (a) = B. Então, o
problema de Schedulling correspondente possui pj = wj = s (a) e dj = B. Uma vez
que a instância é verdadeira para o Subset Sum, ela também é verdadeira para o Profit
Schedulling, concluindo que este é NP-completo.

4. Questão 4
O problema dos dois caminhões descrito nesta questão consiste em: dado um número V
de endereços e dois caminhões disponı́veis ara realizar as entregas, encontrar dois ciclos
que começam em s, sendo que s pertence à V, de modo que toda localização em V esteja
em pelo menos um dos ciclos e ambos tenham tamanho menor ou igual a k.
Para demostrar que tal problema pertence a classe NP-completo será utilizada
uma redução polinomial do problema do Ciclo Hamiltoniano, o qual corresponde a um
caminho feito em um grafo G (V, E) que passa uma única vez em cada vértice e o vértice
inicial é igual ao vértice final.
Dessa maneira, deve-se provar que uma solução verdadeira para o problema dos
Dois Caminhões corresponde também a uma solução verdadeira para o Ciclo Hamiltoni-
ano. Para isso o problema é modelado em um grafo G (V, E), no qual os vértices repre-
sentam as localizações e as arestas a distância entre elas. Em seguida devemos manter o
segundo motorista ocupado e para isso será adicionado um novo vértice com distância k/2
do vértice s e distância k + 1 para todos os demais.
Assim teremos a seguinte redução polinomial: dada uma instância de Ciclo Hamil-
toniano com n vértices iremos montar um grafo de modo que cada distância d (v, w) será
igual a 2 se houver uma aresta no grafo original e igual 4, caso contrário. Além disso será
adicionado um vértice 0 tal que d(s, 0) = d(0, s) = n e d(v, 0) = d(0, v) = 2n + 1 para todo
vértice diferente de s, nesse caso k terá valor igual a 2n.
A partir da modelagem feita acima concluı́mos que o Ciclo Hamiltoniano pode
ser reduzido para o problema dos dois caminhões, o qual pertence a classe NP-completo.

5. Questão 5
O problema Subset Sum consiste em: dado um conjunto S de números e um número t,
decidir se existe um subconjunto T de S tal que a soma de T seja igual a t. O problema
de Partição consiste em determinar se um conjunto S qualquer contém dois subconjuntos
(partições), com ambos tendo exatamente a mesma soma entre seus elementos.

5.1. Partição ∈ NP
Um problema é NP quando, dado um certificado, que é uma solução para o problema, e
uma instância, pode-se provar que o certificado está em tempo polinomial. No caso do
problema de Partição, a instância será um conjunto S e duas partições A e A’. A prova de
que este problema pertence à classe NP pode ser feita da seguinte maneira:
1. Para cada elemento x em A e x’ em A’, verifique se todos os elementos perten-
centes a S estão cobertos.
2. Seja S1 = 0 e S2 = 0.
3. Para cada elemento x em A adicione esse valor a S1.
4. Para cada elemento x’ em A’ adicione esse valor a S2.
5. Verifique se o valor de S1 é igual ao valor de S2.
O algoritmo acima leva tempo linear de acordo com o tamanho do conjunto de números,
portanto, o certificado está em tempo polinomial e o problema de Partição pertence à
classe NP.

5.2. Subset Sum ≤p Partição


Para provar que o problema de Partição é NP-completo a partir de uma redução do Subset
Sum, deve-se considerar uma instância que seja verdadeira para o Subset Sum.
O problema Subset Sum fornece como entrada um conjunto de números S e uma
soma alvo t. Assumindo que S tem um subconjunto T cuja soma é igual a t, há três casos
a serem considerados:
1. Se t é igual à metade da soma de todos os elementos de S
2. Se t é maior que a metade da soma de todos os elementos de S
3. Se t é menor que metade da soma de todos os elementos de S
Para o desenvolvimento dos casos, considerou-se uma adição ao conjunto S, for-
mando um novo conjunto S’, com o propósito teórico de ajudar na redução. No primeiro
caso, representado na Figura 3 pela cor vermelha, pode-se assumir que S ′ = S, ou seja, o
conjunto se mantém e, portanto, S’ pode ser dividido em dois subconjuntos cujas somas
são iguais.
Figure 3. Representação da redução do Subset Sum ao problema de Partição

No segundo caso, representado na Figura 3 pela cor azul, pode-se assumir que
( )
X
S ′ = S ∪ 2t − n ,
n∈S

ou seja,
X X X
n= n + 2t − n = 2t.
n∈S ′ n∈S n∈S

Dessa forma, comprova-se que S’ pode ser dividido em dois subconjuntos cujas somas
são iguais.
Por fim, no terceiro caso, representado na Figura 3 pela cor verde, pode-se assumir
que ( )
X
S′ = S ∪ n − 2t ,
n∈S

ou seja, !
X X X X
n= n+ n − 2t = 2 ∗ n−t .
n∈S ′ n∈S n∈S n∈S

Como o a soma do subconjunto é igual a


X X
t+ n − 2t = n − t,
n∈S n∈S

também é possı́vel concluir que S’ pode ser dividido em dois subconjuntos cujas somas
são iguais. A instância é verdadeira para o ambos os problemas, provando que o Subset
Sum é redutı́vel ao problema da Partição e que este é NP-completo.

Você também pode gostar