Uma cadeia de adição é uma sequência de números inteiros positivos que e cada índice , temos para alguns índices . O comprimento da cadeia de adição é ; o alvo da cadeia de adição é .x 1 = 1 i ≥ 2 x i = x j + x k 1 ≤ j , k < i
O que se sabe sobre a complexidade do seguinte problema: Dado um número inteiro , qual é o comprimento da cadeia de adição mais curta cujo destino é ? É NP-difícil?N
A Wikipedia aponta para um artigo de 1981 de Downey, Leong e Sethi que prova que o seguinte problema relacionado é NP-difícil: Dado um conjunto de números inteiros, qual é o comprimento mínimo de uma cadeia de adição que inclui todo o conjunto? Aparentemente, vários autores afirmam que este artigo prova que o problema de alvo único é NP-difícil, mas não é.
Respostas:
O problema é mencionado como aberto na tese de doutorado de Eric Lehman "Algoritmos de aproximação para compressão de dados baseados em gramática" em 2002. Na pág. 35 da tese:
"No entanto, uma solução exata para o problema da cadeia de adição permanece estranhamente ilusória. O método M-ary é executado no tempo polylog (n) e fornece uma aproximação de 1 + o (1). No entanto, mesmo que exponencialmente mais tempo seja permitido, poly ( n), nenhum algoritmo exato é conhecido. "
fonte
E no artigo principal da tese de Lehman, há uma boa visão geral do problema (seção VB) com referências.
fonte
Eu gostaria de documentar algum progresso parcial - aparentemente promissor até agora - em direção a um algoritmo de tempo polinomial. UPDATE : Adicionados alguns detalhes para explicar uma falha apontada por @David (obrigado!).
A abordagem é reduzir isso a uma instância de MIN-ONES EVEN-3 CSPs (MOEC), que passa a ser um problema solucionável em tempo polinomial. A prova da redução é um pouco confusa, mas espero que exista!
Uma instância do MOEC é uma família de subconjuntos de tamanhos de um universo de variáveis e um número . A questão é se existe uma atribuição de peso satisfatória no máximo , onde uma atribuição é uma função do universo para , o peso de uma atribuição é o número de variáveis que ele atribui uma e um a atribuição é satisfatória se, para cada subconjunto de variáveis , a atribuição (digamos ) tiver a propriedade de:k k { 0 , 1 } { x , y , z } f3 k k { 0 , 1 } { x , y, z} f
Você pode visualizar isso como 3-SAT com uma noção diferente de satisfação - escolha nenhuma ou escolha duas. Ficarei um pouco relaxado sobre a instância do MOEC, pois permitirei, além dos comuns, implicações, disjunções de comprimento dois e a restrição . Acredito que essas simples adições manterão o tempo polinomial do problema.( x = 1 )3 (x=1)
Digamos que estamos reduzindo o problema da cadeia de adição para o número . A variável definida para essa redução é a seguinte:n
Para cada , a variável N i . Vou re-escrever a variável N N como N . Para cada par i , j , de modo que 1 ≤ i , j ≤ k , introduza as variáveis P i j e Q i j .1≤i≤n Ni Nn N i,j 1≤i,j≤k Pij Qij
Introduza os seguintes subconjuntos, para cada , de modo que k = i + j :i,j,k k=i+j
e as seguintes implicações:
e P i j ⇒ N jPij⇒Ni Pij⇒Nj
e as seguintes restrições:
.(N1=1),(N=1)
Finalmente, precisamos adicionar restrições que garantam que pelo menos uma das variáveis seja selecionada quando uma variável N "correspondente" (perdoe o abuso de notação) for atribuída. Isto pode ser feito adicionando o habitual ou restrição sobre toda P i j tal que i + j soma para o N -variável em questão. Porém, precisamos encontrar uma maneira de recodificar isso na estrutura do MOEC.P N Pij i+j N
Então, deixe-me descrever uma maneira geral de dizer, considerando um conjunto de variáveis:
,(X,l1,l2,…,lt)
como a restrição "se uma atribuição é gratificante e conjuntos a um, em seguida, exatamente um dos l i 's deve ser definido como um pela atribuição", podem ser codificados com a sintaxe MOEC. Observe que isso é suficiente para nossos requisitos, simplesmente introduzimos as restrições:X li
.(Nk,{Pij | i+j=k})
A codificação é feita da seguinte maneira. Seja a árvore binária completa enraizada nas folhas t . Introduzir uma nova variável t d i para todos 1 ≤ d ≤ log t e 1 ≤ i ≤ G ( d ) , em que G ( d ) indica o número de nodos de T X em profundidade d .TX t Tdi 1≤d≤logt 1≤i≤L(d) L(d) TX d
Para cada nó , se p e q ser seus filhos na árvore, introduzir o mesmo 3-restrição:Tdi p q
Isso significa que, se uma variável correspondente a um nó estiver configurada como true, exatamente um de seus filhos também deverá ser configurado como true. Agora adicione as implicações:
e ( d log t , j ) ⇒ l j (vírgula para maior clareza).(X⇒T11) (dlogt,j)⇒lj
Essa combinação de restrições e implicações do EVEN-3 é equivalente à restrição que desejamos codificar.
Intuitivamente, o que está acontecendo é que as duas últimas restrições acionam exatamente as reações necessárias para construir uma cadeia de adição. Em particular, vamos olhar para a 's que são atribuídos um por uma atribuição satisfazendo - a alegação é de que eles vão formar uma cadeia de adição para N : uma vez que a atribuição é forçado a definir N para um, deve haver pelo menos um P i j que foi definido como um, e as implicações forçam N i e N jNi N N Pij Ni Nj ser atribuído um, e isso vai até o fim (tenho certeza de que isso pode ser formalizado com indução, embora ainda não tenha elaborado esse nível de detalhe). Observe que uma atribuição de saturação que é ideal no número de atribuídas não ajustará true para dois pares ( r , s ) e ( r ′ , s ′ ) , pelo motivo de as variáveis P virem com o adicional bagagem das implicações, e as variáveis Q não (elas existem para garantir a satisfação do MESMO-3 - em uma cláusula em que N i é verdadeiro e PPij (r,s) (r′,s′) P Q Ni não é verdade, ainda precisamos escolher algo para satisfazer essa cláusula, e por razões que são fáceis de ver, isso não pode ser uma variável universal através cláusulas).Pij
Portanto, acredito que uma cadeia de adição corresponde a uma tarefa satisfatória e vice-versa. Deixe-me descrever uma parte disso formalmente: dada uma cadeia de adição, construímos uma tarefa que é satisfatória. Para começar, f sets tudo N i é o recurso na cadeia para um, e o outro N i 's para zero. Além disso, se k apresenta na cadeia de adição, em seguida, para cada N k , deixe de i k , j k ser os elementos da cadeia de tal modo que i k + j k = j . Então f definef f Ni Ni k Nk ik,jk ik+jk=j f para um (e Q i k j k a zero), e todos ( i , j ) de tal forma que i ≠ i k e j ≠ j k e i + j = k , f conjuntos Q i j para uma (e P i j para zero). Para todos os k que não aparecem na cadeia de adição, para todos os i , j de modo que iPikjk Qikjk (i,j) i≠ik j≠jk i+j=k f Qij Pij k i,j , defina todas as Q i j e P i j como zero (observe que a consistência decorre do fato de que dois números são somados de apenas uma maneira). Cada cláusula envolvendo um N i na cadeia é satisfeita porque, quer uma P-variável ou Q-variável que corresponde ao que foi definido como um (e aviso que exactamente um deles são definidos para um para cada par ( i , j ) ). Para todas as outras cláusulas, tudo é definido como zero. É fácil verificar que as implicações são válidas.i+j=k Qij Pij Ni (i,j)
fonte