準線形クエリ時間を使用して、合計が


9

これが最近傍問題です。

実数(非常に大きいn!)にターゲットの実数pを加え、SUMがpに最も近いa ia jを見つけます。当社は、合理的な前処理/インデックス許可1... nは(最大OをN ログN )が、(特定のクエリ時にP例えば、()、結果は非常に速く返されるべきO ログn個時間)。a1,,annpaiajpa1,,anO(nlogn)pO(logn)

(より単純な例:pに最も近いSINGLE だけが必要な場合は1a nオフライン、O n log n をソートしてからクエリ時にバイナリ検索を実行しますO log n )。aipa1,,anO(nlogn)O(logn)

機能しないソリューション:

1)1a nをオフラインでソート、次にクエリ時に両端から開始して2つのポインターを内側に移動します(http://bit.ly/1eKHHDy)。O n クエリ時間のため、良くありません。a1,,anO(n)

2)1a nをオフラインでソートしクエリ時に、各a iを取得して pに近いものに合計するのに役立つ「バディ」をバイナリ検索します。O n log n クエリ時間のため、良くありません。a1,,anaipO(nlogn)

3)すべてのペアオフラインで並べ替え、バイナリ検索を実行します。O n 2前処理のため、良くない。(a1,,an)O(n2)

ありがとう!

ps。練習に必要なさらなる一般化:(1)およびpは50次元ベクトル、(2)「近い」はベクトル余弦距離、(3)k-最も近いペア-その合計、1だけではありません。a1,,anpk


前処理時間や前処理後に使用できるスペースに制限はありますか?空間に制限されている場合、たとえばO lg n 時間で解決できると信じる理由はありますか?それは私にはひどくありそうにないようです。O(n)O(lgn)
DW

前処理はO( log n)に制限されています。問題の説明を更新しました。nn
ケビン

クエリが高速であると信じる理由は何もありませんが、最近傍(kdツリー、局所性に敏感なハッシュなど)の多くの有用な結果は、直感に反しているように思えます。局所性に敏感なハッシュを使用した近似解は、実用的には問題ありません。
ケビン

回答:


17

これはほぼ確実に不可能です。

P(n)Q(n)nP(n)+nQ(n)akai+ajakak

O(n2)Ω(n2)Ω(n2/polylogn)

したがって、予想が正しいと仮定すると、問題は(ほぼ)2次の前処理時間または(ほぼ)線形のクエリ時間を必要とします。


2

前処理中に無制限のスペースと無制限の時間を使用できる場合、次のソリューションが要件を満たします。

  • {ai+aj:1ijn}O(n2)O(n2)

  • ai,ajai+ajpO(lgn)

このソリューションが受け入れられない場合は、要件をより注意深く検討し、それに応じて質問を編集する必要があります。


こんにちは、ありがとうございます!しかし、あなたの解決策は私の解決策#3と同じです。これはO(n ^ 2)の前処理時間のために問題があります。私の場合、nは非常に大きく(たとえば、1m)、O(n ^ 2)演算は避けなければなりません。
ケビン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.