Hacim verilen yüzey alanını minimize etmek için algoritma


22

Aşağıdaki algoritmik görevi göz önünde bulundurun:

Girdi: pozitif bir tam sayı n , onun ana çarpanlara birlikte
Bul: pozitif tamsayı x,y,z en aza indirmek xy+yz+xz , kısıtlamaya tabi xyz=n

Bu sorunun karmaşıklığı nedir? Polinom-zaman algoritması var mı? NP-zor mu?


Bu problem temel olarak şunları soruyor: hacmi n , boyutları ise tam sayı olan, hangisinin en az yüzey alanına sahip olduğu tüm dikdörtgen katılardan ?

Bu problem Dan Meyer tarafından, 1000 Matematik Öğretmeninin Çözemediği Matematik Problemi başlığı altında ortaya çıkmıştır . Şimdiye kadar birlikte çalıştığı matematik öğretmenlerinden hiçbiri bu sorun için makul bir algoritma bulamadı. Bu bağlamda, “makul” un tanımı biraz kesin değildir, ancak bilgisayar bilimcileri olarak bu sorunun karmaşıklığı hakkında daha kesin bir soru sorabiliriz.

Açık olan yaklaşım, için tüm olasılıkları sıralamaktır x,y,z, ancak bu üssel zaman almaktadır. Dan Meyer'in blogundaki yorumcular maalesef yanlış olduğu ortaya çıkan birçok etkili aday algoritması önerdiler. Martin Strauss , bu sorunun belirsiz bir şekilde 3 bölümlemeyi hatırlattığını gösteriyor , ancak bir düşüş göremiyorum.


Ayrıca yorumlarda / cevaplarda gördüğüm yanılgıları da gidermeme izin verin:

  • İki bölümün nesnel işlevleri farklı olduğundan, her sayısını 2 qq ile değiştirerek 3 bölümden azaltamazsınız . Açıkça görülen azalma sadece işe yaramadı.2q

  • Optimal çözeltisi bir toplama içerir doğru değildir x,y,z ve en yakın böleni için n için n3 . Bunun olduğunu sanan çok sayıda insan görüyorum, ama aslında bu doğru değil. Bu zaten Dan Meyer blog yazısında ispatlanmıştı. Örneğin,n=68; 6834ve 4 bölme 68, aşağıdakilerden en az biri düşünebilir böylecex,y,z4 olmalıdır; Ancak, bu doğru değil. En uygun çözümx=2,y=2,z=17. Başka bir karşı örnekn=222,22236, ancak en uygun çözümx=37,y=3,z=2. (Olabilirtüm bu doğrun, en iyi çözüm arasında az birinde yapılmasını içerirx,y,z, en küçük bölen iki eşitndaha büyükn3 veya3 smaller'dan küçüken büyük bölennn3 - Şu anda bir karşı örneğim yok - ancak bu ifadenin doğru olduğunu düşünüyorsanız, kanıtlanması gerekir. Bunun kesinlikle doğru olduğunu kabul edemezsiniz.)

  • aynı boyutta olun”, her durumda mutlaka en uygun cevabı vermiş gibi görünmüyor; karşı örnekler için Dan Meyer'in blog yazısına bakınız. Veya en azından "kabaca aynı boyuta getir" ifadesinin bazı makul yorumları için, bu stratejinin aslında en uygun olmadığını gösteren karşı örnekler vardır. Bu tür bir strateji denemek istiyorsanız, iddiayı tam olarak belirttiğinizden emin olun ve sonra dikkatli bir matematik kanıtı sağlayın.x,y,z

  • Bir işletim süresi polinom değildir. Bu problemin P olması için, çalışma süresi giriş uzunluğunda bir polinom olmalıdır . Girdi uzunluğu gibi bir şey lg n , değil n . Bariz kaba kuvvet algoritması O çalıştırmak için yapılabilirO(n3)lgnn ya da O ( n, 2 ) süresi, ama bu üstel içinde lg , n ve üstel zamanlı algoritması olarak bu şekilde sayar. Böylece bu yardımcı olmuyor.O(n3)O(n2)lgn


1
İlginç. Saf yaklaşımım , küpün belirli bir hacim için en küçük yüzey alanına sahip dikdörtgen bir katı olduğu fikrini genelleyerek " kabaca aynı boyutta yapmak" olacaktır. Işe yarar mı? Ve eğer öyleyse: Bunu verimli bir şekilde nasıl yapabileceğimi göremiyorum, ancak elde etmesi daha kolay bir indirim var mı? x,y,z
G. Bach

2
Uygun asal sayılar üretmek için bir yol kullanmanız gerektiğinden, azalma bir kabus olacaktır. Ümit edebileceğiniz en iyi şey, uygun astarları üretmek için Dirichlet'in Teoremi gibi bir şey kullanarak rastgele bir azalmadır;
Tom van der Zanden 28:15

1
G.Bach @, o Blog ürünü (örneğin, her biri ile başlar ven sezgisel bir demet dikkate düşünmek için en yakın tam sayı olduğu 3 x,y,z ve sonra onları küçük bir bit ayarlayın) ve her biri için açık karşı örnekler gösterir. Ama belki de dikkate almadıkları bir algoritma vardır? n3
DW

3
oeis.org/A075777 bir algoritma iddia ediyor gibi görünüyor, ancak hatalı görünüyor (n = 1332, örneğin 6,6,37 yerine 9,4,37 üretiyor)
Scott Farrar

1
İşte yararlı olabilecek bir gözlem. Verilen , uygun y , z , aslında "naif hayali" tatmin: onlar faktörlerinin çifti olmalıdır N / X en yakın olan xy,zn/x . (. Bu kanıtlamak kolaydır) optimal bir çözüm dex*,Y*,Z*, bu durum aynı anda tüm üç değişken için geçerli olmalıdır:X*,Y*tekabül çiftiZ*, vb Bir ima: Verilenz,optimal olabileceğiyalnızca bir çiftx,yvardır. Maalesef, (1) bu durum, optimal üçlüyübenzersiz şekildetanımlamamaktadır; (2) Karşılık gelen çifti hızlı bir şekilde nasıl bulacağımı göremiyorum. n/xx,y,zx,yzzx,y
usul

Yanıtlar:


1

İşte "küp kök yakın diizör seç" algoritmasının değiştirilmiş bir versiyonudur. Yine de pek çok vakayı kaba kuvvete sokması gerektiğinden, tüm vakaların numaralandırılmasında ne kadar hız kazanıldığından emin değilim. Ancak, en azından doğru olması gerektiğine inandığım için OEIS (bu sonuçların yanlış sonuç verdiğini) algoritmasına bir düzeltme yaptım.

Burada, n birimi verilen dikdörtgen bir prizmanın yüzey alanını (s1, s2, s3) ve yüzey alanını bulmak için kullanılan algoritma:

  1. Verilen n, küp kökünü bulun.
  2. Bu küp kökünün tavanına bir başlangıç ​​değeri tamsayı s1 ayarlayın.
  3. S1'in n bölücü olup olmadığını kontrol edin ve değilse, s1'i 1 azaltın.
  4. Bir bölücü s1 bulunursa, bir ilk s2'yi (n / s1) karekökünün tavanı olacak şekilde ayarlayın.
  5. Sonra s2'nin n / s1 böleni olup olmadığını kontrol edin ve değilse s2'yi 1 azaltın.
  6. Bir bölücü s2 bulunduğunda, s3 sonra n / (s1 * s2) olarak ayarlanır.
  7. Mevcut yüzey alanı 2 * (s1 * s2 + s1 * s3 + s2 * s3) ile hesaplanır.
  8. Geçerli SA, mevcut minimum ile karşılaştırılır. İlk yüzey alanı hesaplanırsa minSA olarak depolanır. İlkinden sonra, mevcut SA'nın minSA'dan küçük olup olmadığını kontrol ederiz ve öyleyse onu minSA'da saklayın.

Bu algoritma bazı üçlüleri (s1, s2, s3) sıralar ancak sadece küp kökünün altındaki bölenleri test etmek için gereklidir. (Çünkü üç bölenin tümü küp kökünün üstünde olamaz). Benzer şekilde, s2 sadece n / s1 bölenlerini n / s1 karekökü altında test etmelidir, çünkü her iki bölen karekökün üstünde de olamaz)

3. adımdaki bir not: küp kökü bir bölen ise n bir küptür ve orada kutudan en az 6 * s1 ^ 2 yüzey alanı (s1, s1, s1) ile durabiliriz.

Python:

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

Algoritmanız üstel zaman alıyor. Her döngü yaklaşık 3 exam inceler olası adaylar, bu yüzden çalışma süresiO( 3 n3değil polinom zaman, üstel,. Dolayısıyla, bu algoritma soruyu cevaplamıyor. (Zaten bir üstel zaman algoritmasından bahsettim.)O(n32)=O(n2/3)
DW

Hmm, y, n'nin küp kökü altında sınırlı değildir, örneğin, n = 1332, sonunda s1 = 2'yi test edeceğiz, yani s2, 1332/2 ~ = 26 kare kökü altında olacaktır. 37) küp kökünün üstünde y ve z ile test edilir.
Scott Farrar

@ScottFarrar, evet, biliyorum. Karmaşıklık analizinin bütün ayrıntılarını dahil etmedim; Tek bir yorumda yer yoktu. Kanlı ayrıntılarını eklerseniz, alıntı yaptığım çalışma zamanını elde edeceğinizi düşünüyorum. Bana güvenebilirsin :-) ya da bu kanlı detayları hakkında daha fazla bilgi edinmek için referans sorumu okuyabilirsin . Her durumda, sen iç döngü kaldırıldı bile, dış döngü hala yapar sizin algoritmanın çalışma süresi en az olacak şekilde, yinelemeleri Ω ( n 1 / 3 ) , yani, kesinlikle öyle - üstel. Θ(n1/3)Ω(n1/3)
DW

0

Asıl ayrışmalar yapılmazsa, sorun elbette faktoring karmaşıklığı ile ilgili olacaktır. Faktörler göz önüne alındığında ve tüm asal faktörlerin kayıt altına alınmasıyla ilgili olarak, bu sorun, bölüm toplamlarının ortalamadan sapmasını minimize etmekle aynıdır (alıştırma, belki de analitik veya deneysel olarak, bu sezgisel yaklaşımın ne kadar yakın olduğunu bulmak problem var).k

İşte bu 3 yollu durumdur (bölüm toplamları ). 2 yönlü durumda geniş olarak araştırılmış ve (1 sabit NP edilmiştir st ref). (Bu 2-yollu dava, bölüm toplamlarının eşit olduğu bilinen NP-tamamlanmış 2-yollu Bölümleme problemi ile tamamen aynı değildir . Not eşit bölümleme toplamları, bölümleme toplamlarında 0 sapma ve bunun tersidir. ) 2. referans çalışmaları 3- bir şekilde ve n, 2 yönlü bir durum olarak çok çalışma olarak değil kısmen ampirik yollu bölümleme,.log(x),log(y),log(z)n


Bu cevap yardımcı değildir ve soruya cevap vermez. 1. Ben spekülasyon değil kanıt veya kanıt arıyorum. Sapmayı en aza indirmenin optimal bir çözüm getirdiğine dair kanıt yoktur. Bu doğru olsa bile, soruyu cevaplamayacaktı: sapmayı en aza indirmenin karmaşıklığını bize söylemezdi. 2. İlk referans yaklaşık 2 bölümdür. Beni 2 bölümden oluşan bir referansa işaret etmek işe yaramıyor. Sorunumun neden sadece 3 bölümlü (veya 2 bölümlü) olmadığı sorusunu zaten açıkladım. Sormadığım bir problemin varyantı üzerine bir makale faydalı değil.
DW

Mutlak sapmayı ortalamadan en aza indirmeniz gerektiği iddiasına karşı örnek: . Sonra 1 , 4 , 17 , mümkün olan en düşük mutlak sapma olan 2.85342 mutlak bir sapma verir. Ancak 2 , 2 , 17 , doğru (en uygun) çözümdür ve daha küçük yüzey alanına sahiptir. [Ortalamadan mutlak sapma ile, ben özellikle demek | kütük ( x ) - μ | + | kütük ( y ) - μ | + |n=681,4,172.853422,2,17(burada μ = ( log ( x ) + log ( y ) + log ( z ) ) / 3 ).]|log(x)μ|+|log(y)μ|+|log(z)μ|μ=(log(x)+log(y)+log(z))/3
DW

tamam! Bu algoritmanın doğru olduğu konusunda hiçbir iddia yoktu, yorumlarda bazı örnekler ve diğer önerilerin incelenmesine dayanıyordu. bu sadece tek bir karşı örnekdür (küçültme sapma yönteminin gözden geçirilmiş postada hatalı olduğunu belirtmişsinizdir ). Bu algoritmanın "ne sıklıkta" doğru bir çözüm verdiği sorusu ilginçtir, çünkü doğru optimizasyon ölçütüne bazı ipuçları verebilir. Bu algoritmayı tahmin etmek “sık sık” doğru cevabı verir. 2-yollu ref, wikipedia vb . tipik tam sürümden farklı olan sorunun sapma versiyonunu göstermektir.
vzn 30:15

ayrıca bakınız Lakatos Kanıtları ve
redüksiyonlar

0

Düzenle

İşte hızlı bir algoritmanın neden mevcut olmadığına dair gayrı resmi bir argüman. Bu cümle değişmedi, ama eskiden burada olanları aldım , çünkü bir sonraki bölümdeki resmi ispat gibi çok fazla yapılandırılmıştı ve tartışma, bazılarını kendimden bir tanesini fark ettim. hangi DW bana nazikçe işaret etti. Bunun yerine ardındaki sezgiyi ifade etmeyi deneyeyim.

Bu soruna zeki yaklaşımlar, asal faktörlerini üç listeye ayırmanın yollarını bulmaya odaklanıyor gibi görünüyor ve kombinasyonların çoğunu kontrol etmeye gerek kalmadan hızlı bir şekilde budamak. Bu yaklaşımın işe yaradığını varsayalım, yani en uygun kutuyu bulmak için size bir P-zaman algoritması verir.N

Aynı adımları çarpma ve bölme yerine toplama ve çıkarma gibi farklı bir cebire dönüştürürsek ne olur? Algoritmamızın , eğer varsa ürünleri eşit olan 3 bölümden birini bulacağını ya da böyle bir 3 bölümün bulunmadığını tespit edeceğini biliyoruz (aşağıdaki lemmaya bakınız) . Dolayısıyla, eğer aynı teknikleri katkı grubuna çevirebilseydik, toplamları eşit olan bir 3 bölüm bulabilir ya da böyle bir bölüm bulunmadığını tespit edebilirdik. Başka bir deyişle, polinom sürede 3-bölüm çözebiliriz. Bu çok mantıklı değil.

Peki, neden böyle bir algoritma çarpma için işe yarayabilir ve toplama için başarısız olabilir? Muhtemel bir sebep, her bir tamsayının çarpma altında benzersiz bir ana çarpanlara ayrılması, ancak toplama altında döngüsel olmasıdır. Bir diğeri ise çarpımın eklenmiş bir halka oluşturmasıdır, böylece kullanabileceğiniz başka bir işlem kümeniz vardır. Bir diğeri ise asal olmayanlar için çalışmak için algoritmayı genelleştirmek zorunda kalacaksınız ve bu onların asaletlerine bağlı olabilir. Bir DW'nin işaret ettiği şey, belirli çeviri yönteminin katlanarak girdilerinizin boyutunu artırabileceğidir. Ve sonuçta P = NP olabilir.

Fakat eğer bunlar hızlı bir algoritmanın çalışmasına izin veren boşluklar ise, bence hala bilmemizin faydası var çünkü çabalarımızı nereye odaklamamız gerektiğini gösteriyor. NP tamamlama problemine uygulamaya çalıştığımızda kırılacak bir şey aramalıyız. Diğer cebirlere genellenecek bir yaklaşım muhtemelen yanlış ağacı kabartmaktır. Yine de, çarpımın çalışması için yeterince farklı olmadığını düşünüyorum, ama bu sadece bir ipucu.

baş kelime

Let . Herhangi bir çözüm için(am,bm,mm=N3(am,bm,mab)ab(ab+1a+1b)m2a=b=1

xyz=N

(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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.