Dado: Uma lista de números inteiros e um número inteiro .
Determine: Is ?
Pergunta: Existe algum algoritmo de tempo polinomial para o problema acima? Se sim, dê um algoritmo; caso contrário, prove.
Dado: Uma lista de números inteiros e um número inteiro .
Determine: Is ?
Pergunta: Existe algum algoritmo de tempo polinomial para o problema acima? Se sim, dê um algoritmo; caso contrário, prove.
Caso a resposta de David não seja clara: digamos que você tenha 10.000 números inteiros ek = 1.000.000. Você pode adicionar facilmente as raízes quadradas de n inteiros usando operações de ponto flutuante em . E se o resultado for 999.999.537 ou 1.000.000.214, você terá a resposta. Se o resultado for próximo de 1.000.000, você poderá fazer uma análise muito cuidadosa dos erros de arredondamento de ponto flutuante e, se a soma for 999,999.999999999, provavelmente obterá sua resposta. Se a soma estiver muito próxima de k, você poderá fazer aritmética com maior precisão. Portanto, haverá uma constante c, dependendo da implementação exata, para que você possa encontrar a resposta correta emtempo para a grande maioria de todos os casos (se n for realmente grande, levará um pouco mais porque os números envolvidos serão enormes, mas o tempo será mais longo do que a sua vida).
O problema é que existem somas de raízes quadradas que podem ficar muito, muito próximas de k. Por exemplo, você pode definir f (x) = número de opções para modo que a soma das raízes quadradas seja ≤ x, então você espera 2f '(k) * eps opções de para que a soma das raízes quadradas esteja dentro de eps longe de k. Você espera uma combinação em que a soma das raízes quadradas esteja dentro de eps longe de k se eps ≥ 1 / 2f '(k). Você pode calcular uma estimativa desse eps, descobrir qual precisão seus cálculos precisariam para obter a resposta certa e quanto tempo levaria para obter o resultado com essa precisão. Isso pode ou não ser polinomial, dependendo do tamanho do eps.
Mas é pior: o que eu disse acima é o quão perto você espera que uma soma seja de k. Mas pode ser muito mais perto por coincidência. Seria muito, muito difícil provar que não é possível chegar muito mais perto. Portanto, pode ser que você encontre a resposta em tempo linear na maioria dos casos (> 99.9999999999%), que espere encontrar a resposta em tempo polinomial em todos os casos (ou não), mas, em qualquer caso, você não pode (facilmente) provar isso, e ninguém o fez ainda.
Ele pode ser que você poderia responder a pergunta sem calcular a soma, mas de acordo com o que David diz, ninguém tem mostrado uma maneira de fazer isso em tempo polinomial quer.
Se alguém fez um cálculo de quão perto esperamos que somas de raízes quadradas cheguem perto de quaisquer números inteiros, ficaria feliz em saber. Entre. Penso que a soma das raízes quadradas dos números inteiros é igual a um inteiro se todas as raízes quadradas forem números inteiros, o que é facilmente excluído.
PS. Uma estimativa aproximada: digamos que adicionamos 10.000 raízes quadradas de números inteiros, cada uma menor que 1.000.000. São raízes quadradas de números inteiros e, como a ordem deles não é relevante, existem cerca desomas. São mais de somas. Portanto, esperamos que uma dessas somas esteja a uma distância de de um número inteiro, exigindo cálculos com mais de 80.000 dígitos de precisão.
PS. Dados os números a, b, c, d, k e usando a aritmética de dupla precisão IEEE 754, o primeiro caso em que sqrt (a) + sqrt (b) + sqrt (c) + sqrt (d) <k fornece um resultado diferente de o matematicamente correto é para a, b, c, d = 4640, 5397, 3001, 3322 ek = 254. Nesse caso, a soma é calculada exatamente como 254, quando o resultado matemático é menor que 254. Obviamente quando o Como o resultado em ponto flutuante é igual ao número inteiro, não podemos saber se ele foi arredondado para cima ou para baixo; portanto, nesse caso, o resultado nunca deve ser confiável.
Com a, b, c, d = 6222, 8801, 14431, 8132 ek = 383, a soma calculada é maior que k, enquanto o resultado matemático é menor. A ordem dos números não importa, exceto que 14431 deve ser o terceiro número.
Se alterarmos a ordem das operações adicionando (sqrt (a) + sqrt (b)) + (sqrt (c) + sqrt (d)) (observe os parênteses adicionados), o que alterará os erros de arredondamento e tenderá a diminuí-los , então a, b, c, d = 12558, 407, 16501, 18308 ek = 396 é o primeiro caso em que a soma calculada é maior que k, enquanto o resultado matemático é menor.
A complexidade do problema da soma da raiz quadrada é uma questão em aberto de longa data . O obstáculo é que, apesar de sabermos calcular raízes quadradas com eficiência, não sabemos se é possível determinar se avaliando apenas um número polinomial de bits de cada raiz quadrada.
O problema específico com o algoritmo que você propõe na pergunta é que a frase "calcular a raiz quadrada de cada valor" está subespecificada. Qualquer raiz quadrada irracional (por exemplo, ) requer a computação de um número infinito de bits, portanto, você precisa indicar qual precisão está usando.