Considere a seguinte tarefa algorítmica:
Entrada: um número inteiro positivo , juntamente com sua fatoração primária.
Encontre: números inteiros positivos que minimizam , sujeitos à restrição de que
Qual é a complexidade desse problema? Existe um algoritmo de tempo polinomial? É NP-difícil?
Esse problema basicamente pergunta: de todos os sólidos retangulares cujo volume é e cujas dimensões são todas inteiras, qual possui a menor área de superfície?
Esse problema foi proposto por Dan Meyer, sob o título O problema de matemática que mil professores de matemática não conseguiram resolver . Até agora, nenhum dos professores de matemática com quem ele trabalhou encontrou um algoritmo razoável para esse problema. No seu contexto, a definição de "razoável" é um pouco imprecisa, mas, como cientistas da computação, podemos fazer uma pergunta mais precisa sobre a complexidade desse problema.
A abordagem óbvia é enumerar todas as possibilidades para , mas isso leva tempo exponencial. Os comentaristas do blog de Dan Meyer propuseram muitos algoritmos candidatos eficientes que, infelizmente, todos estavam incorretos. Martin Strauss sugere que esse problema parece vagamente remanescente de 3 partições , mas não vejo uma redução.
Deixe-me também esclarecer alguns conceitos errôneos que eu vi nos comentários / respostas:
Você não pode reduzir a partir de 3 partições simplesmente substituindo cada número por sua potência 2 q , pois as funções objetivas dos dois problemas são diferentes. A redução óbvia simplesmente não funciona.
Não é verdade que a solução ideal envolva escolher um de para ser o divisor mais próximo de n a 3 √ . Vejo várias pessoas que estão assumindo que isso é verdade, mas, na verdade, isso não está correto. Isso já foi refutado no blog de Dan Meyer. Por exemplo, consideren=68; 3 √e 4 divide 68, então você pode pensar que pelo menos um dex,y,zdeve ser 4; no entanto, isso não está correto. A solução ideal éx=2,y=2,z=17. Outro contra-exemplo én=222,3 √, mas a solução ideal éx=37,y=3,z=2. (Elapodeser verdade que, para todos osn, a solução ideal envolve fazer, pelo menos, um dex,y,zser igual quer a menor divisor denmaior do que3 √ ouo maior divisor denmenor que3 √ - não tenho um contra-exemplo no momento - mas se você acha que essa afirmação é verdadeira, seria necessária uma prova. Você absolutamente não pode assumir que é verdade.)
"Fazer ter o mesmo tamanho" não parece necessariamente produzir a resposta ideal em todos os casos; veja a publicação no blog de Dan Meyer para obter contra-exemplos. Ou, pelo menos, para algumas interpretações razoáveis da frase "torná-las aproximadamente do mesmo tamanho", há contra-exemplos que mostram que essa estratégia não é de fato ideal. Se você quiser tentar alguma estratégia desse tipo, declare com precisão a afirmação e forneça uma prova matemática cuidadosa.
Um tempo de execução de não é polinomial. Para que esse problema esteja em P, o tempo de execução deve ser um polinômio no comprimento da entrada . O comprimento da entrada é algo como lg n , não n . O algoritmo óbvio de força bruta pode ser executado no tempo O ( n 3 ) ou O ( n 2 ) , mas isso é exponencial em lg n e, portanto, conta como um algoritmo de tempo exponencial. Portanto, isso não ajuda.
Respostas:
Aqui está uma versão modificada do algoritmo "escolher divisor próximo à raiz do cubo". Ele ainda deve ter força bruta em muitos casos, por isso não tenho certeza do quanto de uma melhoria real é sábia em relação à enumeração de todos os casos. No entanto, enviei-o como uma correção ao algoritmo no OEIS (o que gerou resultados incorretos) porque acredito que deve ser preciso pelo menos.
Aqui está o algoritmo para encontrar (s1, s2, s3) e a área de superfície de um prisma retangular, dado seu volume n:
Esse algoritmo enumera alguns dos triplos (s1, s2, s3), mas precisa apenas testar os divisores sob a raiz do cubo. (Como nem todos os três divisores podem estar acima da raiz do cubo). De maneira semelhante, s2 precisa apenas testar os divisores de n / s1 sob a raiz quadrada de n / s1, pois nem ambos os divisores podem estar acima da raiz quadrada)
Uma observação na etapa 3: se a raiz do cubo é um divisor, n é um cubo e podemos parar aí com uma área superficial mínima 6 * s1 ^ 2 da caixa (s1, s1, s1).
Python:
fonte
The problem would of course be related to factoring complexity if prime decompositions were not given. Given the factors, and taking logs of all the prime factors, this problem appears to be about the same as minimizing the deviation-from-mean ofk partition sums (exercise, maybe either analytically or experimentally, find how closely this intuitive approximation of the problem holds).
Here this is the 3-way case (partition sums arelog(x),log(y),log(z) ). the 2-way case has been extensively studied and is NP hard (from 1st ref). (This 2-way case is not quite the same as the known NP-complete 2-way Partition problem where partition sums are equal. Note equal partition sums implies 0 deviation in partition sums and vice versa.) The 2nd ref studies 3-way and n -way partitioning, partly empirically, where there is not as much study as the 2-way case.
The Easiest Hard Problem: Number Partitioning / Mertens
Multi-Way Number Partitioning / Korf
fonte
Edit
Here’s an informal argument for why a fast algorithm is unlikely to exist. That sentence hasn't changed, but I’ve taken out what used to be here because it was structured too much like the formal proof in the next section and the discussion was getting sidetracked onto its bugs, some of which I noticed myself and one of which D.W. kindly pointed out to me. Let me instead try to express the intuition behind it.
The clever approaches to this problem seem to be focusing on finding ways to partition the prime factors ofN into three lists and quickly prune most of the combinations without needing to check them. So suppose this approach works, that is, it gives you a P-time algorithm for finding the optimal box.
What happens when we translate the same steps into a different algebra, such as addition and subtraction instead of multiplication and division? We know (see lemma below) that our algorithm will find a 3-partition whose products are equal, if one exists, or else determine that no such 3-partition exists. So, if we could translate the same techniques into the additive group, we could find a 3-partition whose sums are equal, or determine that no such partition exists. In other words, we could solve 3-partition in polynomial time. That’s not very plausible.
So, why might such an algorithm work for multiplication and fail for addition? One possible reason is that every integer has a unique prime factorization under multiplication, but is cyclic under addition. Another is that multiplication forms a ring with addition, so you have another set of operations you can use. Another is that you would have to generalize the algorithm to work for non-primes, and it might depend on their primality. The one D.W. pointed out is that the specific method of translation might exponentially increase the size of your inputs. And maybe P = NP after all.
But if those are the loopholes that let a fast algorithm work, I think it’s still useful to know, because it suggests where we should focus our efforts. We should be looking for something that would break if we tried to apply it to a NP-complete problem. An approach that would generalize to other algebras is probably barking up the wrong tree. I suspect, though, that multiplication is not really different enough for that to work, but that’s just a hunch.
Lemma
Letm=N−−√3 . For any solution (am,bm,mab) , where a and b are positive, the weight of the solution is (ab+1a+1b)m2 and is minimized when a=b=1 .
Proof: We see immediately from the restrictionxyz=N that any arbitrary solution has this form.
Its weight is(am)(bm)+(am)(mab)+(bm)(mab)=abm2+m2b+m2a=(ab+1a+1b)m2 .
Letf(a,b)=ab+1a+1b . To minimize this function, we take the partial derivatives δfδa=b−1a2 and δfδb=a−1b2 . The critical point where these partial derivatives are zero comes where a=b2,b=a2 , and therefore, since a and b must be real numbers greater than 0, a=b=1 . We see from the matrix of second-order partial derivatives that this is a global minimum.
My immediate motivation to prove this was to fill in a hand wave in my proof above that, if a perfect-cube solution exists, it is optimal. However, this formula could be useful for pruning the search tree.
Assorted Thoughts
I don’t see any obvious symmetry except the interchangeability of x, y and z, which only gives us at best a constant factor of 6. We do have some speedups for the 2-partition that basically say we’d want both terms to be as close to each other as possible, but I don’t immediately see an application to this problem.
Off the top of my head, simply taking the log of all the numbers immediately reduces this to a classic 3-partition problem using addition, or equivalently, taking some number to the power of the numbers in any 3-partition addition problem turns it into a multiplication problem such as this. That implies this problem should not be any easier. We do have here the prime factorization, whereas that factorization would not be prime, but does that help us?
Graphically, the surface xyz = 0 would look like the union of the xy-, yz- and xz-planes, and for any positive n, the equation would look like y = n/xz, so each slice along a coordinate plane would be a hyperbola. We can generally say that the quantity we’re trying to minimize is lowest at the origin and grows most rapidly along the line where x = y = z. If we can search only along this manifold, we might be able to reduce to a two-dimensional problem.
fonte