일반화 된 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]Sni[1..k]ai=0

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


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

답변:


27

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

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

  • 홀수 :k 입력 요소 의 모든 합의 정렬 된 목록 를 계산합니다 . 각 입력 요소를 들어 , 체크 여부 모두 포함 및 어떤 숫자를 들면 . 두 번째 단계는 기본적으로 3SUM에 대한 시간 알고리즘입니다. 알고리즘은 시간으로 실행됩니다.S(k1)/2aSxaxxO(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Θ(nlogn)iiΘ(nlogn)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.