합계되는 두 개의 숫자를 선택하십시오.


9

가장 가까운 이웃 문제가 있습니다.

실수 (매우 큰 !)과 목표 실수 , SUM이 가장 가까운 및 를 찾으십시오.a1,,annpaiajp . 우리는 합리적인 전처리 / 인덱싱을 허용합니다a1,,an (까지 O(nlogn))이지만 쿼리시 (제공됨) p) 결과가 매우 빠르게 반환되어야합니다 (예 : O(logn) 시각).

(단순한 예 : SINGLE 만 원한다면 ai 가장 가까운 p, 우리는 정렬합니다 a1,,an 오프라인, O(nlogn)쿼리시 이진 검색을 수행합니다. O(logn)).

작동하지 않는 솔루션 :

1) 정렬 a1,,an오프라인 상태 인 다음 쿼리 시간에 양쪽 끝에서 시작하여 두 개의 포인터를 안쪽으로 이동하십시오 ( http://bit.ly/1eKHHDy ). 좋지 않기 때문에O(n) 쿼리 시간.

2) 정렬 a1,,an 오프라인에서 쿼리 시간에 ai "버디"에 대한 이진 검색을 수행하여 p. 좋지 않기 때문에O(nlogn) 쿼리 시간.

3) 모든 쌍을 정렬 (a1,,an)오프라인으로 설정 한 다음 이진 검색을 수행하십시오. 좋지 않기 때문에O(n2) 전처리.

감사!

추신. 실습에 필요한 추가 일반화 : (1)a1,,anp 50 차원 벡터, (2) 벡터 코사인 거리와 "닫기"및 (3) k-최고의 가장 가까운 쌍, 그저 1 최고가 아닙니다.


전처리 시간 또는 전처리 후 사용할 수있는 공간에 제한이 있습니까? 우리가 제한되어 있다면O(n) 공간, 당신은 그것을 해결할 수 있다고 믿을만한 이유가 있습니까? O(lgn)시각? 그것은 나에게는 끔찍한 것 같습니다.
DW

전처리는 O (n 로그 n). 문제 진술을 업데이트했습니다.
Kevin

쿼리가 빠를 수 있다고 믿을만한 이유는 없지만 가장 가까운 이웃 (kd-trees, locality-sensitive hashing 등)에 대한 많은 유용한 결과는 반 직관적으로 좋습니다. 지역에 민감한 해싱을 사용하는 대략적인 솔루션은 실제 사용에 적합합니다.
Kevin

답변:


17

이것은 거의 불가능합니다.

전처리 시간으로 문제를 해결할 수 있다고 가정하십시오. P(n) 쿼리 시간 Q(n). 그런 다음 3SUM 문제 를 해결하는 간단한 알고리즘 이 있습니다.n 실수, 세 요소의 합이 0입니까? P(n)+nQ(n)시각. 우리는 모든 숫자를 사전 처리 한 다음 각 숫자에 대해ak우리는 ai+aj 가장 가까운 ak; 일치하면ak 정확히 3SUM 문제에 대한 해결책을 찾았습니다.

그러나 3SUM으로 알려진 가장 빠른 알고리즘은 O(n2)이 알고리즘은 최적으로 추측됩니다. 또한 매칭이 있습니다Ω(n2)제한적이지만 자연스러운 의사 결정 트리 모델의 하한. 정수 세트의 경우 , "비트로 게임을하는"약간의 2 차 알고리즘이 있지만 정수 RAM 모델에서도 3SUM은 필요한 것으로 추측됩니다.Ω(n2/polylogn) 시각.

따라서 추측이 정확하다고 가정하면 문제에 (거의) 2 차 전처리 시간 또는 (거의) 선형 쿼리 시간이 필요합니다.


2

사전 처리 중에 무제한 공간과 무제한 시간을 사용할 수있는 경우 다음 솔루션이 요구 사항을 충족합니다.

  • 전처리 과정에서 세트 계산 {ai+aj:1ijn}이 세트를 정렬 된 순서로 저장하십시오. 이 세트는 생성 및 정렬 가능O(n2) 시간이 걸리고 O(n2) 그것을 저장할 공간.

  • 이제 질문에 답하기 위해 ai,aj 어디 ai+aj ~에 가깝다 p이 정렬 된 목록에서 이진 검색을 수행하면됩니다. 그것은 걸릴 것입니다O(lgn) 시각.

이 솔루션을 사용할 수없는 경우 요구 사항을보다 신중하게 생각하고 그에 따라 질문을 편집해야합니다.


안녕하세요, 감사합니다! 그러나 귀하의 솔루션은 내 솔루션 # 3과 동일하며 O (n ^ 2) 전처리 시간으로 인해 문제가됩니다. 제 경우에는 n이 매우 커서 (예 : 1m) O (n ^ 2) 연산을 피해야합니다.
케빈
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.