Considera il seguente compito algoritmico:
Input: un numero intero positivo , insieme alla sua scomposizione in fattori primi
Trova: numeri interi positivi che minimizzano , soggetto alla restrizione che
Qual è la complessità di questo problema? Esiste un algoritmo del tempo polinomiale? NP è difficile?
Questo problema si pone fondamentalmente: tra tutti i solidi rettangolari il cui volume è e le cui dimensioni sono tutti numeri interi, quale ha l'area minima?
Questo problema è stato posto da Dan Meyer, con il titolo Il problema di matematica che 1.000 insegnanti di matematica non potevano risolvere . Finora nessuno degli insegnanti di matematica con cui ha lavorato ha trovato un algoritmo ragionevole per questo problema. Nel suo contesto, la definizione di "ragionevole" è un po 'imprecisa, ma come scienziati informatici possiamo porre una domanda più precisa sulla complessità di questo problema.
L'approccio ovvio è enumerare tutte le possibilità per , ma ciò richiede tempo esponenziale. I commentatori del blog di Dan Meyer hanno proposto molti algoritmi candidati efficaci che purtroppo si sono rivelati tutti errati. Martin Strauss suggerisce che questo problema sembra vagamente ricordare la 3-partizione , ma non riesco a vedere una riduzione.
Vorrei anche chiarire alcune idee sbagliate che ho visto nei commenti / risposte:
Non è possibile ridurre da 3 partizioni semplicemente sostituendo ogni numero con la sua potenza 2 q , poiché le funzioni oggettive dei due problemi sono diverse. L'ovvia riduzione semplicemente non funziona.
Non è vero che la soluzione ottimale consiste nel selezionare uno di come divisore più vicino da n a 3 √ . Vedo più persone che presumono che questo sia un caso, ma in realtà non è corretto. Questo è già stato smentito sul post sul blog di Dan Meyer. Ad esempio, consideran=68; 3 √e 4 divide 68, quindi potresti pensare che almeno uno dix,y,zdovrebbe essere 4; tuttavia, ciò non è corretto. La soluzione ottimale èx=2,y=2,z=17. Un altro controesempio èn=222,3 √, ma la soluzione ottimale èx=37,y=3,z=2. (Potrebbeessere vero che per tuttin, la soluzione ottimale prevede che almeno uno dix,y,zsia uguale al divisore più piccolo dinmaggiore di3 √ ola più grande divisore dinminore di3 √ - Non ho un controesempio in questo momento - ma se pensi che questa affermazione sia vera, avrebbe bisogno di prove. Non puoi assolutamente presumere che sia vero.)
"Rendi della stessa dimensione" non sembra necessariamente fornire la risposta ottimale in tutti i casi; vedi il post sul blog di Dan Meyer per controesempi. O, almeno, per alcune interpretazioni ragionevoli della frase "rendili approssimativamente della stessa dimensione", ci sono controesempi che dimostrano che questa strategia non è in realtà ottimale. Se vuoi provare qualche strategia di quel tipo, assicurati di dichiarare il reclamo con precisione e quindi fornire un'attenta prova matematica.
Un tempo di esecuzione di non è polinomiale. Perché questo problema si trovi in P, il tempo di esecuzione deve essere un polinomio nella lunghezza dell'input . La lunghezza dell'input è qualcosa come lg n , non n . L'ovvio algoritmo a forza bruta può essere fatto funzionare in tempo O ( n 3 ) o O ( n 2 ) , ma questo è esponenziale in lg n e quindi conta come un algoritmo a tempo esponenziale. Quindi ciò non è utile.