6

これが重複している可能性があることはわかっていますが、「最も近いポイントのペア」アルゴリズムのバリエーションのようです。

単位正方形内のN 個の点 (x, y)のセットと距離dが与えられた場合、それらの間の距離が最大でdになるすべての点のペアを見つけます。

Nが大きい場合、ブルート フォース法はオプションではありません。「掃引法」と「分割統治法」以外に、もっと簡単な解決策はありますか? これらのポイントのペアは、無向グラフのエッジであり、それをトラバースして接続されているかどうかを判断する必要があります (これは既に DFS を使用して行いましたが、N = 100 万の場合は終了しません!)。

疑似コード、コメント、アイデアは大歓迎です。ありがとう!

編集:私はSedgewickの本でこれを見つけました(私は今コードを見ています):

プログラム 3.18 は、リンクされたリストの 2 次元配列を使用して、N が十分に大きい場合、プログラム 3.7 の実行時間を約 1/d2 倍改善します。単位正方形を同じサイズの小さな正方形のグリッドに分割します。次に、各正方形について、その正方形に該当するすべてのポイントのリンク リストを作成します。2 次元配列は、特定のポイントに近いポイントのセットにすぐにアクセスする機能を提供します。リンクされたリストは、各グリッドの正方形にいくつのポイントが入るかを事前に知る必要なく、ポイントが入る可能性のあるポイントを格納する柔軟性を提供します。

4

2 に答える 2

2

中心 (x,y) と半径 d の円の内側にある点を実際に探しています。

円を囲む正方形は、中心が (x,y)、辺が 2d の正方形です。この正方形の外にあるポイントは、チェックする必要はありません。アウトです。したがって、abs(xa - x) > d または abs (ya -yb) > d の場合、点 a (xa, ya) はアウトです。

その円で囲まれた正方形も同じで、中心 (x,y) と対角線 2d の正方形です。この正方形の外にある点はチェックする必要はありません。それは入っています。したがって、点 a (xa, ya) は、abs(xa - x) < (d * 1.412) または abs(ya -yb) < ( d * 1.412)。

これら 2 つの簡単なルールを組み合わせると、チェックするポイントの数が大幅に減ります。ポイントを x でソートし、可能なポイントをフィルタリングし、y でソートすると、完全な距離を計算するために本当に必要なポイントに到達します。

于 2013-04-05T14:30:10.087 に答える
0

任意のポイントについて、マンハッタン距離 (x デルタ プラス y デルタ) ヒューリスティックを使用して、距離 "d" 内にないほとんどのポイントを除外できます。つまり、マンハッタン距離が (sqrt (2) * d) 次に、残りのポイントで高価で正確な距離テストを実行します。

于 2013-04-05T17:04:33.777 に答える