Problema da Soma de Subconjuntos
Problema da Mochila
Soma de Subconjuntos
● Suponha que C1, C2, …, Cn são os cheques que você emitiu em 1 mês.
● No fim do mês, o banco debita um valor P de sua conta.
● Quais dos cheques foram debitados?
● Este é um exemplo do problema da soma de subconjuntos.
Dado um conjunto w de {1, …, n} de números naturais e um número natural B, decidir se existe um conjunto x ⊆ w tal que w(x) = B. Ou seja,
∑i∈Xw[i] = B
● Os elementos do conjunto w são chamados de “pesos” e o parâmetro B é chamado “alvo”.
● A idéia é decidir se existe algum subconjunto cuja soma dos pesos é igual ao alvo.
Soma de Subconjuntos
Soma de Subconjuntos
● A resposta obtida será de um tipo binário, ou seja, será “sim” caso representada por 1 e “não” caso
representada por 0.
● Esse tipo de problema é denominado “problema
de decisão”. No caso da soma de subconjuntos, já
é sabido que se trata de um problema
NP-completo.
Relembrando
Um problema S de decisão é NP-completo quando:
1. S está em NP.
2. Qualquer outro problema de NP pode ser reduzido
a S em tempo polinomial.
Dado um conjunto de itens, cada um com um peso, devemos determinar qual/quais poderão ser incluídos em uma determinada coleção, de maneira que a soma desses pesos seja a maior possível, porém menor ou igual a um determinado limite.
Mochila
● Esse problema geralmente surge da alocação de recursos, onde os tomadores de decisão têm que escolher entre um conjunto de projetos ou tarefas não divisíveis sob um orçamento fixo ou restrição de tempo, respectivamente.
● Os primeiros registros de estudos do problema da mochila são do início do século XX, nos trabalhos do matemático D. G. Dantzig.
Mochila
Mochila
Podemos replicar essa problemática para vários outros casos de uso reais, como encontrar a maneira menos dispendiosa de cortar matérias-primas, selecionar investimentos e carteiras, etc.
Mochila
Formalmente, dado um conjunto de itens C de {1, …, n}, um conjunto u dos valores desses respectivos itens na mesma ordem, um conjunto x que representa a presença de um item na mochila, onde cada xi∈ {0, 1}, um conjunto p contendo o peso de cada item e um valor total limitante W, devemos encontrar um subconjunto tal que:
max {∑i∈C u[i] x[i]}, sujeito a ∑i∈C p[i] x[i] ≤ W
Prova
Primeiramente, vamos mostrar que o problema da mochila booleana está em NP, apresentando um algoritmo não-determinista que resolve o problema em tempo polinomial:
Prova
Mochila (cW, uW, n, P[1..n], U[1..n], X[1..n]) 1 for (i ⟵ 1 to n)
2 X[i] ⟵ escolhe (0, 1)
3 if ((∑i∈[1..n]P[i] X[i] > cW) OR (∑i∈[1..n]U[i] X[i] < uW)) 4 return "não"
5 else return "sim"
Prova
● As linhas 1 e 2 atribuem valor 0 ou 1 para as posições do vetor solução X[i], 0 ≤ i ≤ n.
● Na linha 4 verificamos se a atribuição dos pesos é viável considerando o limite da mochila cW e se o resultado da utilidade (U) é pelo menos uW.
● Uma resposta de sucesso é obtida se as restrições são satisfeitas com complexidade de tempo O(n).
Prova
● Agora, precisamos transformar esse problema de otimização em um problema de decisão.
● Nesse caso, devemos apenas eliminar a função de maximização. A versão de decisão para o problema da mochila é:
∑i∈Sw[i] ≤ T, sujeito a c(S) = ∑i∈Sc[i] ≥ C
Onde a entrada é um conjunto de n itens, tal que todo i tem utilidade ci e peso wi, a mochila tem limite de carga T e um valor positivo C. A questão agora é se existe um subconjunto S ⊆ {1, ... , n} de itens, tais que o peso total é no máximo T e o valor da utilidade total é pelo menos C.
Prova
Para provar que a versão de decisão do problema da mochila é NP-completo, vamos fazer uma redução polinomial a partir do problema da soma de subconjuntos.
Com os resultados obtidos até aqui, podemos notar que o problema da soma de subconjuntos é um caso especial do problema da mochila booleana com ci = wi.
Prova
Prova
Dada uma instância do problema da soma de subconjuntos, vamos reduzir esta para uma instância do problema da mochila booleana da seguinte forma:
U = A, wi = ci = si, T = C = B
Prova
Esta redução é feita em tempo polinomial, pois todas as atribuições são executadas em tempo polinomial. Assim, uma resposta da instância do problema da mochila booleana é também uma resposta para o problema da soma de subconjuntos.
Prova
Dessa forma, uma resposta “sim” para uma instância do problema da mochila booleana significa que existe um subconjunto S' ∈ U tal que ∑i∈S’ w[i] ≤ T e ∑i∈S’ c[i] ≥ C. Ou seja, existe um subconjunto A' ∈ A tal que B ≤ ∑i∈A’ s[i] ≤ B, isto é, ∑i∈A’ s[i] = B. Por definição, temos que também é uma resposta “sim” para o problema da soma de subconjuntos.
Prova
Da mesma maneira, uma resposta “não” para uma instância do problema da mochila booleana, significa que o conjunto solução não existe. O que também ocorre para uma instância do problema da soma de subconjuntos.
Conclusão
Sabemos que o problema da soma de subconjuntos é NP-completo. A partir da demonstração, concluímos que o problema da mochila está em NP, assim como a existência de uma redução polinomial a partir do problema da soma de subconjuntos para o problema da mochila booleana.
Com isso, provamos que o problema da mochila booleana, um dos 21 problemas NP-completos propostos por Richard Karp em 1972, é de fato NP-completo.
Referências
1. Subset sum. 02 nov. 2020. Disponível em:
https://www.ime.usp.br/~pf/analise_de_algoritmos/aulas/mochila-su bsetsum.html. Acesso em: 27 abr. 2022.
2. Problema da Mochila Multicritério. Maio. 2018. Disponível em:
https://fenix.tecnico.ulisboa.pt/downloadFile/395137622440/Disserta
%C3%A7%C3%A3o.pdf. Acesso em: 26 abr. 2022.
3. Knapsack Problem. 19 abr. 2022. Disponível em:
https://mathworld.wolfram.com/KnapsackProblem.html. Acesso em:
26 abr. 2022.
4. The Knapsack Problem. 24 jan. 2003. Disponível em:
https://personal.utdallas.edu/~scniu/OPRE-6201/documents/DP3-Kn apsack.pdf. Acesso em: 27 abr. 2022.