A resposta abaixo observa que um caso especial do problema é solucionável em tempo polinomial. Isso não responde totalmente à pergunta no post, mas pode fornecer algumas dicas sobre o que pode ser necessário para uma prova de dureza NP e provocar um interesse adicional no post ...
Observação. O problema no post tem um algoritmo que, dada qualquer instância em que cada é um número inteiro, é executado no polinômio do tempo em e . n D = Σ i c icinD=∑ici
Esboço de prova.
Corrija qualquer entrada que e (WLOG)
. Reformulando um pouco o problema, o objetivo é encontrar de tamanho maximizando .w , c ∈ R n + S = { 1 , 2 , … , n } M ⊆ S K ∑ i ∈ M w i c i(S,w,c,K)w,c∈Rn+S={1,2,…,n}M⊆SK∑i∈Mwici∑i∈Mci−∑i∈Mwi
Considere o seguinte programa dinâmico. Para quaisquer números inteiros com , e , defina
A solução desejada é .(d1,d2,k,m)0≤d1≤d2≤D0≤k≤Kk≤m≤n
ϕ(d1,d2,k,m)=max{∑i∈Mwi(ci/d1−1) : M⊆[m],|M|=k,∑i∈Mci=d2}.
maxdϕ(d,d,K,n)
Particionando as possíveis soluções para naquelas que contêm e naquelas que não contêm , obtemos a recorrência
Deixamos os casos de fronteira como um exercício.ϕ(d1,d2,k,m)m
ϕ(d1,d2,k,m)=max{ϕ(d1,d2−cm,k−1,m−1)+wm(cm/d1−1)ϕ(d1,d2,k,m−1).
O número de sub-problemas é , e para cada lado da mão direita da recorrência pode ser avaliada em tempo constante, de modo que o algoritmo é executado em tempo polinomial em e . O(n2D2)nD □
Corolário. A menos que P = NP, qualquer redução que mostre a dureza NP será reduzida para instâncias em que não é polinomial em .Dn
Observação. A menos que eu esteja enganado, também há um PTAS para o problema no post, com base no arredondamento dos 's e usando programação dinâmica. No entanto, a existência de um PTAS não tem relação direta com a dificuldade do NP, conforme solicitado no post.wi
Também estou curioso --- alguém sabe se o caso especial quando (para cada ) tem um algoritmo de poli-tempo? (EDIT: sim, pelo comentário de Willard Zhan, isso parece ser otimizado ao usar para conter os maiores elementos.)wi=ciiMk