일반화 된 3SUM (k-SUM) 문제?


29

3SUM의 문제 시도 3 개 식별하는 정수 세트로부터는 의 크기 이되도록 .S n a + b + c = 0a,b,cSna+b+c=0

이차보다 더 나은 해결책이 없다고 추측된다. 즉 . 또는 다르게 말하면 입니다.o ( n log ( n ) + n 2 )o(n2)o(nlog⁡(n)+n2)

이 일반화 된 문제에 적용 할 것인지 궁금 그래서 : 정수 찾기 에 대한 세트로하는 크기 이되도록 . i ∈ [ 1 .. k ] S n ∑ i ∈ [ 1 .. k ] a i = 0aii∈[1..k]Sn∑i∈[1..k]ai=0

나는 이것을 에서 (간단한 알고리즘 을 일반화하는 것은 쉽지 에서 이것을 할 수 있다고 생각합니다 . 그러나 다른 값에 대한 더 나은 알고리즘이 있습니까?o(nlog⁡(n)+nk−1)k≥2k=3
k


의사 결정 트리의 복잡성에 대한 하한을 보는 3SUM의 최신 뉴스 / 논문
— vzn

답변:


27

k -SUM은 다음과 같이 더 빨리 해결할 수 있습니다.

  • 짝수 :k 입력 요소 의 모든 합으로 정렬 된 목록 를 계산합니다 . 에 x 와 음수 -x 가 모두 포함되어 있는지 확인하십시오 . 알고리즘은 O (n ^ {k / 2} \ log n) 시간에 실행됩니다.Sk/2Sx−xO(nk/2log⁡n)

  • 홀수 :k 입력 요소 의 모든 합의 정렬 된 목록 를 계산합니다 . 각 입력 요소를 들어 , 체크 여부 모두 포함 및 어떤 숫자를 들면 . 두 번째 단계는 기본적으로 3SUM에 대한 시간 알고리즘입니다. 알고리즘은 시간으로 실행됩니다.S(k−1)/2aSx−a−xxO(n2)O(n(k+1)/2)

선형 결정 트리 계산 계산의 특정 약하지만 자연적인 제한에서 상수 에 대해 두 알고리즘 모두 최적입니다 ( 가 보다 크거나 보다 큰 경우 로그 팩터 제외 ) . 자세한 내용은 다음을 참조하십시오.k2k


stackoverflow.com/a/14737071/511736 k = 4 일 때 O (n ^ 2) 알고리즘 제안
— Kowser

1
해싱이 부정 행위입니다. StackOverflow에 설명 된 알고리즘은 정수 입력에 대해 O (n ^ 2) 시간에만 실행되며 확률이 높고 적절한 임의 해시 함수를 사용하는 경우에만 실행됩니다. 내 대답의 알고리즘은 실제 RAM 모델에서 작동하며 완전히 결정적이며 시간 제한은 최악의 경우입니다. "비트 트릭"을 사용하여 정수 설정에서 로그 팩터를 제거 할 수도 있지만 다소 지루합니다.
— JeffE

12

-sum 시간은 필요 없음 Ω ( D ) K-SAT가 해결 될 수없는 2 O ( N ) 임의의 정수 k에 대한 시간. 이것은Mihai Patrascu와 Ryan Williams (1)의논문에 실 렸습니다.dnΩ(d)2o(n)

즉, 지수 시간 가설을 가정 할 때 알고리즘은 지수의 상수 인자 ( 의 다항식 계수 ) 까지 최적입니다.n

(1) Mihai Patrascu와 Ryan Williams. 더 빠른 SAT 알고리즘의 가능성. Proc. 이산 알고리즘에 관한 제 21 회 ACM / SIAM 심포지엄 (SODA2010)


3

다음은 몇 가지 간단한 관찰입니다.

들면 에는 그것을 할 수 Θ ( N ) 제로의 배열을 검색하여 시간. 의 경우 K = 2 , 당신은에 해싱없이 그것을 할 수 Θ ( N 로그 N ) 시간. 배열을 정렬 한 후 스캔하십시오. 각 요소에 대해 난 에 대한 바이너리 검색을 수행 - 난 . 이로 인해 총 복잡성이 Θ ( n log n )가 됩니다. k = n 의 경우 Θ ( n )으로 할 수 있습니다k=1Θ(n)k=2Θ(nlog⁡n)i−iΘ(nlog⁡n)k=nΘ(n) 배열을 누적하고 결과를 확인하여 시간.

더 자세한 내용 은 3SUM의 Open Problems Project 페이지를 참조하십시오 .


-1

참조 http://arxiv.org/abs/1407.4640를

rSUM 문제를 해결하기위한 새로운 알고리즘 Valerii Sopin

추상:

결정적인 알고리즘은 어떤 경우에는 시간 복잡도에 대한 이차 평가로 자연 r에 대한 rSUM 문제를 해결하기 위해 제공됩니다. 사용 된 메모리 양의 관점에서, 획득 된 알고리즘은 또한 이차 차수를 갖는다. 획득 된 알고리즘의 아이디어는 정수를 고려하지 않고, 이진 계산 시스템에서 이들 수의 k∈N 연속 비트를 고려한 것이다. 정수의 합이 0과 같다면, 이들 숫자의 임의의 k 개의 연속 비트에 의해 제시된 수의 합은 0에 충분히 "가까워 야"한다는 것이 보여진다. 이것은 fortiori가 솔루션을 설정하지 않은 숫자를 버리는 것을 가능하게합니다.

이 문제에서 새로운 것입니다.


1
질문과 관련된 기사의 결과를 명시 적으로 인용 할 수 있습니까? 기사가 전체적으로 관련이있는 경우 초록을 표시해도 괜찮을 수 있습니다. SE에 대한 게시물은 단순한 링크 이상의 것으로 간주됩니다.
— FrankW

1
이 답변은 답이 아닌 (잠재적으로 유용한) 주석입니다. 따라서 알고리즘은 자신의 말로 설명하는 것과 같이 독창적 인 내용을 포함해야합니다. 그렇게 하시겠습니까? 그렇지 않으면 답변을 주석으로 변환 할 수 있습니다. (귀하의 답변으로 귀하가 댓글을 작성할 수 없음을 알고 있습니다.)
— Raphael

그것은 믿을만한 종이처럼 보이지 않습니다. "경우에 따라 이차 이차 이차"라는 주장은 유용한 설명이 아니다. 시간 복잡도는 정의상 최악의 실행 시간입니다. 기포 정렬은 경우에 따라 선형 시간으로 실행되지만 시간 복잡도는 2 차로 유지됩니다.
— DW
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.