私が正しいかどうかはわかりませんが、この問題は計算幾何学の線形計画法で解決できる問題と非常によく似ています。ただし、LPへの削減は簡単ではありません。また、私の問題は、2次元空間で LPによって明らかに解決できる2組の点の間の最も薄い点を見つけることに関連しているようです。
私が正しいかどうかはわかりませんが、この問題は計算幾何学の線形計画法で解決できる問題と非常によく似ています。ただし、LPへの削減は簡単ではありません。また、私の問題は、2次元空間で LPによって明らかに解決できる2組の点の間の最も薄い点を見つけることに関連しているようです。
回答:
少し複雑に思えるかもしれませんが、素朴な総当たり検索よりも効率的な解決策があります。
残りは明確にするために擬似コードにあります:
d = infinity.
for j from 1 to n
if (b_1 - a_j) along v > d then break endif
for k from 1 to n
if (b_k - a_j) along v > d then
break
else
d = min( d , ||b_k - a_j|| )
endif
enddo
enddo
つまり、に沿ってポイントを事前にソートすることにより、に沿ったは常になるため、お互いの内に決してないペアを除外できます。D B のk - jは V ≤ ‖ BのK - J ‖
最悪の場合、これはまだですが、とが十分に分離されている場合は、それよりもはるかに高速ですが、は必要です。ソート用。
更新
この解決策は決して帽子から引き抜かれるものではありません。これは、空間ビニングで相互作用する粒子のペアをすべて見つけるために、粒子シミュレーションで使用する特別なケースです。より一般的な問題を説明する私自身の仕事はこちらです。
変更されたラインスイープアルゴリズムを使用するという提案については、直感的には簡単ですが、これがばらばらのセットを考慮した場合、これがにあるとは確信できません。ラビンのランダム化アルゴリズムについても同様です。
そこ互いに素な集合内の最も近いペアの問題を持つ多くの文献の取引ではないようですが、私が見つけたこれを下であることにノークレームをしないこれ、、及びこの思えません、何かについて主張するため。
上記のアルゴリズムは、最初の論文(Shan、Zhang、Salzberg)で提案された平面スイープの変形と見なすことができますが、軸を使用してソートを行わず、セット間の軸を使用してセットをトラバースします降順/昇順。
「最も近いペア」のラインスウィープアルゴリズムであるを適合させることができます。
必要な唯一の変更は、同じセットに属するペアを無視することです。
編集:私が説明したように、これは実際には単純ではありません(または可能ですらありません)。議論についてはコメントを参照してください。
このような問題のアイデアは、Nearest Neighborの効率的なクエリを可能にするセットの1つから順序付けられた構造を作成することです。任意の次元のO(log n)クエリ構造を示した古典的な論文は次のとおりです。
それ以来、デローニーテッセレーションからのアイデアに基づいて他の多くのスペースパーティションが作成され、これらはさまざまなサブスペーススイープの説明にも変換されます。ボロノイ法は、構成ステップをO(n log n)にする平面分割であるため、一般的な分割統治法の説明にも該当します。
したがって、この問題の基本的な解決策は次のとおりです。
各ステップの複雑さを見るとわかるように、全体の複雑度はO(n log n)です。古典的な論文を見ない現代の読者のために、これは多くのアルゴリズムの本、例えば、スキーナによる「アルゴリズム設計マニュアル」でカバーされています。