부피가 주어지면 표면적을 최소화하는 알고리즘


22

다음 알고리즘 작업을 고려하십시오.

입력 : 소수 인수 와 함께 양의 정수 찾기 : 의 제한에 따라 를 최소화하는 양의 정수x , y , z x y + y z + x z x y z = nn
x,y,zxy+yz+xzxyz=n

이 문제의 복잡성은 무엇입니까? 다항식 시간 알고리즘이 있습니까? NP- 하드입니까?


이 문제는 기본적으로 묻습니다. 볼륨이 n 이고 치수가 모두 정수인 모든 직사각형 고체 중에서 표면적이 가장 작은 것은 무엇입니까?

이 문제는 Dan Meyer가 1,000 명의 수학 교사가 해결할 수없는 수학 문제 라는 제목으로 제기되었습니다 . 지금까지 그가 작업 한 수학 교사는이 문제에 대한 합리적인 알고리즘을 찾지 못했습니다. 그의 맥락에서 "합리적인"의 정의는 다소 부정확하지만 컴퓨터 과학자로서이 문제의 복잡성에 대해보다 정확한 질문을 할 수 있습니다.

명백한 접근법은 대한 모든 가능성을 열거하는 것입니다 x,y,z. 그러나 기하 급수적으로 시간이 걸립니다. Dan Meyer의 블로그의 논평자들은 불행히도 모두 잘못된 것으로 밝혀진 많은 효율적인 후보 알고리즘을 제안했습니다. Martin Strauss 이 문제가 3 파티션을 연상케하는 것처럼 보이지만 축소를 볼 수는 없다고 제안 합니다 .


또한 의견 / 답변에서 본 오해를 정리하겠습니다.

  • 두 문제의 목적 함수가 다르기 때문에 각 숫자 q 를 거듭 제곱 로 간단히 바꾸어 3 파티션을 줄일 수는 없습니다 2q. 명백한 감소는 효과가 없습니다.

  • 이 최적의 솔루션 중 하나 따기 포함한다는 사실이 아니다 x,y,z 가장 가까운 제수로 에 . 나는 이것이 사실이라고 가정하는 여러 사람들을 보지만 실제로는 정확하지 않습니다. 이것은 Dan Meyer 블로그 게시물에서 이미 반증되었습니다. 예를 들어, 고려하십시오 . , 4는 68을 나누므로 중 적어도 하나는 4 여야한다고 생각할 수 있습니다. 그러나 그것은 정확하지 않습니다. 최적의 해는 , y = 2 , z = 17 입니다. 또 다른 반례는3 n n=683n3n=68x,y,zx=26834x,y,zx=2y=2z=17n=222 ,22236이지만 최적의 해는x=37,y=3,z=2입니다. (모든n에 대해 최적의 솔루션은x,y,z중 하나이상을3보다 큰n의 가장 작은 제수와 같게만드는것이 사실일있습니다.nx,y,znn3 또는최대의 제수n미만n3 지금은 반례가 없지만이 진술이 사실이라고 생각되면 증거가 필요합니다. 당신은 그것이 사실이라고 절대적으로 믿을 수 없습니다.)

  • " x,y,z 동일한 크기로 설정"한다고해서 반드시 모든 경우에 최적의 답을 얻을 수있는 것은 아닙니다. 이에 대한 예는 Dan Meyer의 블로그 게시물을 참조하십시오. 또는 적어도 "대략 같은 크기로 만들기"라는 구절의 일부 합리적인 해석을 위해이 전략이 실제로 최적이 아님을 보여주는 반례가 있습니다. 그런 종류의 전략을 시도하려면 주장을 정확하게 말한 다음 신중한 수학적 증거를 제공해야합니다.

  • 의 실행 시간은 다항식이 아닙니다. 이 문제가 P가 되려면 실행 시간 이 입력 길이의 다항식이어야합니다 . 입력의 길이는 같은 것입니다 LG N 이 아니라 N . 명백한 무차별 알고리즘은 O ( n 3 ) 또는 O ( n 2 ) 시간 으로 실행되도록 만들 수 있지만, lg n 은 지수 이므로 지수 시간 알고리즘으로 계산됩니다. 따라서 도움이되지 않습니다.O(n3)lgnnO(n3)O(n2)lgn


1
흥미 롭군 저의 순진한 접근 방식은 "make 거의 같은 크기"입니다. 이는 큐브가 주어진 부피에 대해 가장 작은 표면적을 가진 직사각형 고체라는 아이디어를 일반화합니다. 작동합니까? 그리고 그렇다면 : 나는 그것을 효율적으로 수행하는 방법을 보지 못하지만 달성하기가 더 쉬운 축소가 있습니까? x,y,z
G. 바흐

2
적절한 소수를 생성하는 방법이 필요하기 때문에 축소는 악몽이 될 것입니다. Dirichlet Theorem 과 같은 것을 사용하여 적절한 소수를 생성하지만 그럴 가능성은 거의없는 무작위 감소 입니다.
Tom van der Zanden

1
@ G.Bach, 블로그 기사는 그 정맥의 여러 가지 휴리스틱을 고려한다고 생각합니다 (예 : 로 시작 하여 3 √에 가장 가까운 정수임)x,y,z 그런 다음 조금씩 조정하고 각각에 대한 명확한 반례를 보여줍니다. 그러나 아마도 당신은 그들이 고려하지 않은 알고리즘을 가지고 있습니까? n3
DW

3
oeis.org/A075777 은 알고리즘을 주장하는 것 같지만 잘못되었습니다 (예 : n = 1332는 6,6,37 대신 9,4,37을 생성 함)
Scott Farrar

1
유용한 관찰 결과가 있습니다. 주어 졌을 때 최적의 y , z 는 실제로 "순진한 꿈"을 만족시킵니다 : 그것들은 √에 가장 가까운 n / x 의 요소 쌍이어야합니다xy,zn/x . 최적의 해x,y,z에서이 조건은 세 변수 모두에 대해 동시에 유지되어야합니다.x,yz∗에해당하는 쌍입니다.z에는 가능한 한 쌍의x만있을 수 있으며,y는 최적 일 수 있습니다. 불행하게도 (1)이 조건은최적의 트리플을고유하게식별하지 않습니다. (2) 해당 쌍을 빨리 찾는 방법을 모르겠습니다. n/xx,y,zx,yzzx,y
usul

답변:


1

다음은 "큐브 루트 근처의 제수 선택"알고리즘의 수정 된 버전입니다. 여전히 많은 경우를 강제로 수행해야하므로 모든 경우의 열거보다 속도가 얼마나 현명한 지 확실하지 않습니다. 그러나 나는 그것이 정확해야한다고 믿기 때문에 OEIS (잘못된 결과를 생성 한)의 알고리즘에 대한 수정으로 제출했습니다.

다음은 체적 n이 주어지면 직사각형 프리즘의 (s1, s2, s3) 및 표면적을 구하는 알고리즘입니다.

  1. 주어진 n, 큐브 루트를 찾으십시오.
  2. 해당 큐브 루트의 천장에 초기 값 정수 s1을 설정하십시오.
  3. s1이 n의 제수인지 테스트하고, 그렇지 않은 경우 s1을 1만큼 줄이십시오.
  4. 제수 s1이 발견되면 초기 s2를 (n / s1)의 제곱근의 천장으로 설정하십시오.
  5. 그런 다음 s2가 n / s1의 제수인지 확인하고 그렇지 않은 경우 s2를 1 씩 줄이십시오.
  6. 제수 s2가 발견되면 s3은 n / (s1 * s2)로 설정됩니다.
  7. 현재 표면적은 2 * (s1 * s2 + s1 * s3 + s2 * s3)로 계산됩니다.
  8. 현재 SA는 현재 최소값과 비교됩니다. 첫 번째 표면적이 계산되면 minSA로 저장됩니다. 첫 번째 후에 현재 SA가 minSA보다 작은 지 테스트하고, 그렇다면 SA를 minSA에 저장합니다.

이 알고리즘은 일부 트리플 (s1, s2, s3)을 열거하지만 큐브 루트 아래에서 제수를 테스트하기 만하면됩니다. (세 개의 제수가 모두 큐브 루트 위에있는 것은 아닙니다). 비슷한 방식으로, s2는 n / s1의 제곱근 아래에서 n / s1의 제수 만 테스트하면됩니다. 두 제수가 제곱근 위에있을 수는 없기 때문입니다)

3 단계에 대한 참고 사항 : 입방체 루트가 제수 인 경우 n은 입방체이며 상자 (s1, s1, s1)에서 최소 표면적 6 * s1 ^ 2로 멈출 수 있습니다.

파이썬 :

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

알고리즘은 지수 시간이 걸립니다. 각 루프는 약 3 √를 검사합니다.가능한 후보 n , 그래서 실행 시간은O( 3 n3: 다항식 시간이 아닌 지수입니다. 따라서이 알고리즘은 질문에 대답하지 않습니다. (나는 이미 질문에 지수 시간 알고리즘을 언급했습니다.)O(n32)=O(n2/3)
DW

흠, y는 n의 제곱근 아래에 국한되지 않습니다 (예 : n = 1332). 우리는 결국 s1 = 2를 테스트 할 것입니다. 이는 s2가 1332/2 ~ = 26의 제곱근 아래임을 의미합니다. 실제로 (2,18, 37) 큐브 루트 위의 y 및 z로 테스트되었습니다.
Scott Farrar

@ScottFarrar, 예, 알고 있습니다. 복잡성 분석에 대한 모든 세부 사항은 포함하지 않았습니다. 하나의 주석에는 공백이 없었습니다. 당신이 gory 세부 사항을 포함 시키면, 당신이 내가 인용 한 러닝 타임을 얻는 것을 알게 될 것입니다. 나를 믿어보십시오 :-) 또는 참조 질문 을 읽고 그 까다로운 세부 사항에 대해 자세히 알아보십시오. 어쨌든 내부 루프를 제거하더라도 외부 루프는 여전히 반복을 수행하므로 알고리즘의 실행 시간은 적어도 Ω ( n 1 / 3 )입니다 . 즉, 확실히 지수. Θ(n1/3)Ω(n1/3)
DW

0

물론 주요 분해가 제공되지 않으면 문제는 복잡성을 분해하는 것과 관련이 있습니다. 요인과 모든 주요 요인의 로그를 고려할 때,이 문제는 파티션 합계의 평균에서 편차를 최소화하는 것과 거의 같은 것으로 보입니다 (운동, 분석 또는 실험적으로이 직관적 인 근사치가 문제가 있습니다).k

여기서 이것은 3 방향 경우입니다 (파티션 합계는 ). 2-way 사례는 광범위하게 연구되었으며 NP 단단합니다 (1 심판 부터 ). (이 2 방향의 경우는 공지 된 NP 완전 양방향과 완전히 동일하지 않은 분할 문제 동일한 파티션 합계를 참고. 파티션 합이 동일한 파티션 합과 0 편차 의미 반대 담당한다. )를 2 개 REF 연구 3- way와 n- way 파티셔닝은 부분적으로 경험적으로, 2-way 경우만큼 연구가 많지 않은 경우.log(x),log(y),log(z)n


이 답변은 도움이되지 않으며 질문에 답변하지 않습니다. 1. 나는 추측이 아닌 증거 나 증거를 찾고 있습니다. 편차를 최소화하면 최적의 솔루션을 얻을 수 있다는 증거는 없습니다. 그것이 사실이더라도, 그것은 질문에 대답하지 않을 것입니다 : 그것은 편차를 최소화하는 복잡성을 우리에게 알려주지 않을 것입니다. 2. 첫 번째 참조는 2 파티션에 관한 것입니다. 2 파티션에 대한 참조를 알려주는 것은 도움이되지 않습니다. 내 문제가 왜 3 파티션 (또는 2 파티션)이 아닌지 질문에서 이미 설명했습니다. 내가 묻지 않은 문제의 변형에 관한 논문은 도움이되지 않습니다.
DW

평균과의 절대 편차를 최소화해야한다는 주장에 반하는 예 : . 그런 다음 1 , 4 , 17 은 가능한 가장 낮은 절대 편차 인 2.85342 의 절대 편차를 산출합니다 . 그러나 2 , 2 , 17 은 올바른 (최적의) 솔루션이며 표면적이 더 작습니다. [평균과의 절대 편차로 구체적으로 | 로그 ( X ) - μ | + | 로그 ( Y ) - μ | + |=681,4,172.853422,2,17|log(x)μ|+|log(y)μ|+|log(z)μ|μ=(log(x)+log(y)+log(z))/3

승인! 이 알고리즘이 정확하다는 주장은 없었으며 주석의 일부 예제 및 다른 제안을 검사 한 결과였습니다. 이것은 하나의 반대 사례 일뿐입니다 (최소화 된 편차 방법이 개정 된 게시물에 결함이 있음을 나타냅니다 ). 이 알고리즘이 "얼마나 자주"라는 문제는 올바른 최적화 메트릭에 대한 힌트를 줄 수 있기 때문에 올바른 솔루션이됩니다. 이 알고리즘은 "종종"정답이라고 추측합니다. 2-way 심판은 위키 백과 등 의 일반적인 정확한 버전과 는 다른 문제 의 편차 버전 을 보여주는 것입니다.
vzn


0

편집하다

빠른 알고리즘이 존재하지 않는 이유에 대한 비공식적 인 주장은 다음과 같습니다. 그 문장은 바뀌지 않았지만 다음 섹션의 공식적인 증거와 너무 많이 구조화되어 토론에 버그가 생겨 났기 때문에 여기에 있던 것을 취했습니다. 그 중 DW가 친절하게 지적했습니다. 대신 그 직관을 표현하려고 노력하겠습니다.

이 문제에 대한 영리한 접근 방식은 세 가지 목록으로 정리하고 확인하지 않고도 대부분의 조합을 신속하게 정리할 수 있습니다. 따라서이 방법이 효과가 있다고 가정하면, 최적의 상자를 찾기위한 P- 시간 알고리즘이 제공됩니다.

같은 단계를 곱셈과 나눗셈 대신에 덧셈과 뺄셈과 같은 다른 대수로 변환하면 어떻게됩니까? 우리는 알고리즘이 제품 이 동일한 3 파티션을 찾 거나 3 파티션이 존재하지 않는 것으로 판단한다는 것을 알고 있습니다 (아래의 정리) . 따라서 동일한 기술을 추가 그룹으로 변환 할 수 있으면 이 같은 3 개의 파티션을 찾 거나 해당 파티션이 존재하지 않는 것으로 판단 할 수 있습니다. 다시 말해 다항식 시간으로 3 분할을 해결할 수 있습니다. 그것은 그럴듯하지 않다.

그렇다면 왜 그러한 알고리즘이 곱셈에 효과가 있고 더하기에 실패 할 수 있습니까? 가능한 한 가지 이유는 모든 정수는 곱셈에서 고유 한 소인수 분해를 갖지만 더하기에는 순환 적입니다. 곱셈은 ​​더하기와 함께 고리를 형성하므로 사용할 수있는 다른 연산 집합이 있습니다. 다른 하나는 비 프라임에서 작동하도록 알고리즘을 일반화해야하며, 우선 순위에 따라 달라질 수 있다는 것입니다. DW가 지적한 한 가지는 특정 번역 방법이 입력 크기를 기하 급수적으로 증가시킬 수 있다는 것입니다. 그리고 아마도 P = NP 일 것입니다.

그러나 이것이 빠른 알고리즘을 작동시키는 허점이라면, 우리가 노력을 집중해야 할 곳을 제안하기 때문에 여전히 아는 것이 유용하다고 생각합니다. NP-complete 문제에 적용하려고 할 때 깨질 수있는 것을 찾아야합니다. 다른 대수로 일반화하는 접근법은 아마도 잘못된 나무를 짖는 것일 수 있습니다. 그래도 곱셈이 실제로 작동하기에 충분히 다르지는 않지만 의심 할 여지가 없습니다.

렘마

방해 =. 어떤 솔루션이든(에이,,에이)어디서 에이 양성, 용액의 무게는 (에이+1에이+1)2 때 최소화 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.