Algoritmo per minimizzare la superficie, dato volume


22

Considera il seguente compito algoritmico:

Input: un numero intero positivo n , insieme alla sua scomposizione in fattori primi
Trova: numeri interi positivi x,y,z che minimizzano xy+yz+xz , soggetto alla restrizione che xyz=n

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 è n 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.x,y,z


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.q2q

  • Non è vero che la soluzione ottimale consiste nel selezionare uno di come divisore più vicino da n a 3 x,y,zn . 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; 3n3n=68e 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,36834x,y,zx=2y=2z=17n=222, 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 di322236x=37y=3z=2nx,y,zn ola più grande divisore dinminore di3n3 n - 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.)n3

  • "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.x,y,z

  • 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.O(n3)lgnnO(n3)O(n2)lgn


1
Interessante. Il mio approccio ingenuo sarebbe "rendere all'incirca le stesse dimensioni", generalizzando l'idea che il cubo è il solido rettangolare con la superficie più piccola per un dato volume. Funzionerebbe? E se è così: non vedo come farlo in modo efficiente, ma c'è una riduzione che è più facile da ottenere, forse? x,y,z
G. Bach,

2
Una riduzione sarà un incubo poiché hai bisogno di un modo per generare numeri primi adeguati. Il meglio che potresti sperare è una riduzione randomizzata, usando qualcosa come il Teorema di Dirichlet per generare numeri primi adatti ma anche questo sembra improbabile.
Tom van der Zanden,

1
@ G. Bach, penso che l'articolo del blog consideri un mucchio di euristiche di quella vena (ad esempio, inizia con ciascuna di come il numero intero più vicino a 3 x,y,z e quindi regolare loro un po 'piccolo), e spettacoli controesempi esplicite per ciascuno. Ma forse hai un algoritmo che non hanno preso in considerazione? n3
DW

3
oeis.org/A075777 sembra rivendicare un algoritmo, ma sembra essere errato (n = 1332 genera 9,4,37 invece di 6,6,37 per esempio)
Scott Farrar,

1
Ecco un'osservazione che può essere utile. Dato , l'ottimale y , z soddisfa effettivamente il "sogno ingenuo": devono essere la coppia di fattori di n / x più vicini a xy,zn/x . (Questo è facile da dimostrare.) Ad una soluzione ottimalex,y,z, questa condizione deve valere contemporaneamente per tutte e tre le variabili:x,ysono la coppia corrispondente az, ecc. Un'implicazione: dataz, esiste una sola coppia possibilex,ycon cui può essere ottimale. Sfortunatamente, (1) questa condizione nonidentifica inmodo univocoil triplo ottimale; (2) Non vedo come trovare velocemente la coppia corrispondente. n/xx,y,zx,yzzx,y
usul

Risposte:


1

Ecco una versione modificata di un algoritmo "scegli il divisore vicino alla radice del cubo". Deve ancora forzare molti casi, quindi non sono sicuro di quanto sia un vero miglioramento la velocità rispetto all'enumerazione di tutti i casi. Tuttavia, l'ho presentato come una correzione all'algoritmo su OEIS (quello che ha generato risultati errati) perché credo che dovrebbe essere accurato almeno.

Ecco l'algoritmo per trovare (s1, s2, s3) e l'area superficiale di un prisma rettangolare dato il suo volume n:

  1. Dato n, trova la radice del cubo.
  2. Impostare un valore intero iniziale s1 sul soffitto della radice del cubo.
  3. Verifica se s1 è un divisore di n e, in caso contrario, riduci s1 di 1.
  4. Se viene trovato un divisore s1, imposta un iniziale s2 come soffitto della radice quadrata di (n / s1).
  5. Quindi prova per vedere se s2 è un divisore di n / s1 e, in caso contrario, riduci s2 di 1.
  6. Quando viene trovato un divisore s2, s3 viene impostato su n / (s1 * s2).
  7. La superficie attuale viene calcolata da 2 * (s1 * s2 + s1 * s3 + s2 * s3).
  8. L'attuale SA viene confrontata con il minimo corrente. Se viene calcolata la prima superficie, viene memorizzata come minSA. Dopo il primo, testiamo per vedere se l'attuale SA è più piccola di minSA e, in tal caso, la memorizziamo in minSA.

Questo algoritmo enumera alcune delle triple (s1, s2, s3) ma deve solo testare i divisori sotto la radice del cubo. (Dal momento che non tutti e tre i divisori possono essere al di sopra della radice del cubo). In modo simile, s2 deve solo testare i divisori di n / s1 sotto la radice quadrata di n / s1, poiché non entrambi i divisori possono essere sopra la radice quadrata)

Una nota sul passaggio 3: se la radice del cubo è un divisore, allora n è un cubo e possiamo fermarci lì con una superficie minima 6 * s1 ^ 2 dalla casella (s1, s1, s1).

Pitone:

import math
def minSArectprism(n):
    s1_0 = int(math.ceil(n ** (1 / 3.0))) 
    minSA=-1
    s1 = s1_0
    while s1>=1:
        while n % s1 > 0:  
            s1 = s1 - 1
        s1quot = int(n/s1) 
        s2_0 = int(math.ceil(math.sqrt(n/s1)))
        s2 = s2_0
        while s2>=1:
            while s1quot % s2 > 0:
                s2 = s2 - 1
            s3 = int(n / (s1 * s2))  
            SA = 2*(s1*s2 + s1*s3 + s2*s3)  
            if minSA==-1:
                minSA=SA
            else:
                if SA<minSA:
                    minSA=SA
            s2 = s2 - 1
        s1 = s1 - 1    
    return minSA

Il tuo algoritmo richiede tempo esponenziale. Ogni ciclo esamina circa possibili candidati, quindi il tempo di esecuzione èO( 3 n3, che è esponenziale, non tempo polinomiale. Pertanto, questo algoritmo non risponde alla domanda. (Ho già menzionato un algoritmo a tempo esponenziale nella domanda.)O(n32)=O(n2/3)
DW

Hmm, y non è confinato sotto la radice del cubo di n, ad esempio n = 1332, alla fine testeremo s1 = 2, il che significa che s2 sarà sotto la radice quadrata di 1332/2 ~ = 26. Infatti (2,18, 37) viene testato con y e z sopra la radice del cubo.
Scott Farrar,

@ScottFarrar, sì, lo so. Non ho incluso tutti i dettagli cruenti dell'analisi della complessità; non c'era spazio in un singolo commento. Se includi i dettagli gory, penso che otterrai il tempo di esecuzione che ho citato. Puoi fidarti di me :-) o leggere la nostra domanda di riferimento per saperne di più su quei dettagli cruenti. In ogni caso, anche se è stato rimosso il ciclo interno, il ciclo esterno fa ancora iterazioni, in modo che il tempo di esecuzione del vostro algoritmo è almeno Ω ( n 1 / 3 ) - vale a dire, è certamente esponenziale. Θ(n1/3)Ω(n1/3)
DW

0

Il problema sarebbe ovviamente correlato alla complessità del factoring se non fossero fornite scomposizioni prime. Dati i fattori e prendendo i registri di tutti i fattori primi, questo problema sembra essere più o meno lo stesso di minimizzare la deviazione dalla media delle somme delle partizioni (esercizio, forse analiticamente o sperimentalmente, trova quanto questa intuitiva approssimazione del il problema è valido).k

Questo è il caso a 3 vie (le somme delle partizioni sono ). caso 2 vie è stato ampiamente studiato ed è NP disco (da 1 v ref). (Questo caso a 2 vie non è esattamente lo stesso del noto problema della partizione a 2 vie NP completo in cui le somme di partizione sono uguali. Nota che le somme di partizione uguali implicano 0 deviazione nelle somme di partizione e viceversa. ) Il 2 ° ref studi studia 3- partizionamento way e n -way, in parte empiricamente, dove non c'è tanto studio quanto il caso a 2 vie.log(x),log(y),log(z)n


Questa risposta non è utile e non risponde alla domanda. 1. Sto cercando prove o prove, non speculazioni. Non ci sono prove che minimizzare la deviazione produca una soluzione ottimale. Anche se fosse vero, non risponderebbe alla domanda: non ci direbbe la complessità di minimizzare la deviazione. 2. Il primo riferimento riguarda circa 2 partizioni. Indicarmi un riferimento su 2 partizioni non è utile. Ho già spiegato nella domanda perché il mio problema non è solo 3-partizioni (o 2-partizioni). Un documento su una variante di un problema di cui non ho chiesto non è utile.
DW

Controesempio all'affermazione secondo cui è necessario ridurre al minimo la deviazione assoluta dalla media: n=68. Poi1,4,17 yields an absolute deviation of 2.85342, which is the lowest possible absolute deviation. However 2,2,17 is the correct (optimal) solution, and has smaller surface area. [By absolute deviation from the mean, I specifically mean |log(x)μ|+|log(y)μ|+|log(z)μ| (where μ=(log(x)+log(y)+log(z))/3).]
D.W.

ok! there was never any claim this algorithm was correct, it was based on inspection of some examples & others suggestions in comments. this is only a single counterexample (you indicated the minimizing deviation method is flawed in the revised post). the question of "how often" this algorithm gives a correct solution is interesting because it could give some clues to a correct optimization metric. conjecture this algorithm "often" gives the correct answer. the 2-way ref is to show a deviation version of the problem which is different than the typical exact version on wikipedia etc
vzn

see also Lakatos Proofs and refutations
vzn

0

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 of N 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

Let m=N3. 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 restriction xyz=N that any arbitrary solution has this form.

Its weight is (am)(bm)+(am)(mab)+(bm)(mab)=abm2+m2b+m2a=(ab+1a+1b)m2.

Let f(a,b)=ab+1a+1b. To minimize this function, we take the partial derivatives δfδa=b1a2 and δfδb=a1b2. 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.


If x+y+z=n, 2^n=2^(x+y+z)=2^x*2^y*2^z, which is an instance of this problem minus the restriction that the inputs are a prime decomposition of the product. They would instead all be powers of two.
Davislor

It’s true that the weight to minimize will be different, but if x=y=z in the original problem, won’t x'y'+x'z'+y'z' be minimized in the corresponding problem where each w is replaced by w'=2^w, meaning that if a solution to the original problem exists, the reduction would find it? We might get a spurious solution from the transformed problem, but we can detect that in linear time when converting back by verifying the sums.
Davislor

as above comment by GBach suggests, maximizing xy+yz+xz subject to xyz=n likely happens when x,y,z are "close together" or have low deviation (from average). this is not necessarily the same as "close to n3". the numerical examples given by Meyer on his page appear to fit this pattern.
vzn

@vzn: We’re trying to minimize surface area, not maximize it. If the 3-partition problem has a solution, that translates into a modified box-dimension problem where the solution is a perfect cube. A hypothetical poly-time algorithm would find the factors of the sides of that cube, and we could then translate it back into the original domain, while checking for spurious solutions, in linear time. That suggests an algorithm for a slightly-relaxed problem could serve as an oracle for a hard problem, making it unlikely a better-than-exponential algorithm exists.
Davislor

? am not disagreeing with you. arent we saying the same thing? plz drop by Computer Science Chat to untangle/ sort this out further. also cant follow @D.W.s claim that the logarithmic transformation doesnt work, can you? am using some of your (seemingly on-target) analysis as basis for my own answer.
vzn
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.