O problema do "produto de subconjunto" está NP-completo?


21

O problema da soma de subconjuntos é um problema NP-completo clássico:

Dada uma lista de números e um destino , existe um subconjunto de números de que soma ?k L kLkLk

Um aluno me perguntou se essa variante do problema chamada de "produto de subconjunto" está NP-completa:

Dada uma lista de números e um destino , existe um subconjunto de números de cujo produto é ?k L kLkLk

Pesquisei e não encontrei nenhum recurso que falasse sobre esse problema, embora talvez tenha sentido falta deles.

O problema do subconjunto do produto está NP-completo?


2
Respostas interessantes, mas estou me perguntando: não podemos reduzir a soma de subconjuntos apenas registrando k e todos os números? (Talvez eu devesse fazer uma pergunta separada?)
j_random_hacker

1
@j_random_hacker, sim, se você não encontrar uma resposta depois de pesquisar neste site e on-line, sugiro que você publique uma pergunta separada. É uma boa pergunta com uma boa resposta (dica: pegar logs deixa você com algo que não é um número inteiro; na outra direção, pense no que a exponenciação faz com o tamanho dos números), mas é um pouco tangente e seria melhor em sua própria pergunta.
DW

1
@ DW: Obrigado, quando tiver tempo, farei o que você sugere!
j_random_hacker

Respostas:


13

Um comentário menciona uma redução de X3C para SUBSET PRODUCT atribuída a Yao. Dado o objetivo da redução, não era difícil adivinhar qual seria a provável redução.

Definições:

COBERTURA EXATA POR 3 CONJUNTOS (X3C)

Dado um conjunto finito comum múltiplo de 3 e uma coleção de subconjuntos de 3 elementos de , contém uma capa exata para , onde e todos os elementos em ocorrem exatamente uma vez em ?| X | C X C C ' X C 'C X C "X|X|CXCCXCCXC

SUBSET PRODUTO

Dada uma lista de números e um destino k , existe um subconjunto de números de L cujo produto é k ?LkLk

Para reduzir uma instância X3C para uma instância SUBSET PRODUCT:

  1. Estabeleça um mapeamento bijetivo entre os membros de e o primeiro | X | números primos. Substitua os membros dos subconjuntos X e C pelos números primos mapeados.X|X|XC

  2. Para cada subconjunto em , multiplique seus membros; a lista de produtos resultante é L para a instância SUBSET PRODUCT. Como os números primos são usados ​​para o mapeamento na etapa 1, é garantido que os produtos sejam equivalentes se os subconjuntos forem equivalentes pelo teorema da fatoração exclusivo .CL

  3. Multiplique os membros de juntos; o produto resultante é o valor k para a instância SUBSET PRODUCT.Xk

Os fatores primos de são exatamente os membros da X . Os fatores primos dos números em L correspondem exatamente aos membros dos subconjuntos C. Assim, qualquer solução para a nova instância SUBCONJUNTO produto pode ser transformado numa solução X3C mapeando os membros de solução de L volta para os subconjuntos em C .kXLCLC

Cada uma das 3 etapas de transformação envolve operações que são polinomiais ao tamanho da entrada ou o tamanho de um membro de X . O primeiro | X | os números primos podem ser gerados no tempo O ( | X | ) usando a peneira de Eratóstenes e são garantidos que se encaixam no espaço O ( | X | 2 ln | X | ) pelo teorema do número primo .|X|X|X||X|O(|X|2ln|X|)


1
+1, mas para que a redução seja aprovada, acho que exigimos que o primeiro | X | números primos podem ser representados em um número de bits que é polinomial em | X | - Estou certo sobre isso e, em caso afirmativo, temos essa garantia?
Jrandom_hacker 26/06

1
Ponto excelente. Eu adicionei um parágrafo para resolver isso.
Kyle Jones

1
Obrigado, esse teorema o cimenta! Não para nitpick, mas de acordo com a página à qual você vinculou, o k-ésimo número primo é aproximadamente k log k, e considerando que a Peneira de Eratóstenes aparentemente calcula todos os primos até n no tempo O (n log log n) , substituindo n = k log k parece fornecer um tempo de O (k * log (k) * log (log (k log k))), em vez de O (k) (seu O (| X |)), para calcular o primeiro k inicia dessa maneira.
Jrandom_hacker

1
Kyle Jones, não é crítico que a etapa 3 crie um número de tamanho exponencial? Essa redução é realmente do tempo polinomial? k
user1742364

3
@ user1742364 Não, porque a computação não requer um número exponencial de operações ou exige o armazenamento de um número exponencial de bits. A computação k requer | X | multiplicações e multiplicação é, na pior das hipóteses, uma operação O ( n 2 ) . Enquanto k será exponencialmente maior que o maior P primo em X , o número de bits necessários para armazenar k será O ( log P ) . kk|X|O(n2)kPXkO(logP)
Kyle Jones

9

De acordo com [ 1 ]: Sim, é

Também cito a mesma referência: Comentários: Há uma distinção técnica sutil entre este e o Problema 42: o primeiro caso possui um algoritmo pseudoeficiente obtido por permitir que números sejam representados em unários; a menos que todos os problemas de NP-completos possam ser resolvidos por algoritmos rápidos, o Subconjunto do Problema do Produto não pode ser resolvido por métodos `eficientes 'usando até mesmo essa representação de entrada irracional.

dê uma olhada em [2] para uma redução. [2]: Companheiros, Michael e Neal Koblitz. "Complexidade de parâmetros fixos e criptografia." Álgebra Aplicada, Algoritmos Algébricos e Códigos de Correção de Erros (1993): 121-131.


1
Uma redução ou citação real em um artigo de jornal seria legal, se possível.
templatetypedef

3
@templatetypedef Em Garey e Johnson, a redução é de 3 sets para a cobertura exata. Devido à comunicação privada com Yao.
precisa saber é

A redução no papel de criptografia é para um problema diferente, no qual o produto alvo é substituído por congruência com um número alvo módulo a módulo fornecido na instância. (Embora se eu entendi a prova corretamente, eles só recebem dureza fraca de qualquer maneira porque o módulo é exponencial em magnitude.)
Jeffrey Bosboom
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.