そこにあるポイントの数を最大にするボールを見つけるための複雑さ


10

x1,,xnR2rri=1n1xxir

ブルートフォースアルゴリズムは、すべてのポイントを調べて、よりも小さい距離にあるポイントの数を数えることです。それは複雑さを与えます。rO(n2)

より良いアプローチはありますか?


四分木と二分空間分割木を見たことがありますか?最悪の場合の漸近実行時間が何であるかはわかりませんが、実際にはより効率的なアルゴリズムを提供する可能性があると予想します。
DW

ballタイトルからの中心はセットからである必要がありますか?)1つのアイデアは、半径が最も近い隣人までの平均距離と比較して小さいか、または直径のオーダーであるかを推定することです(そして、これらの極端なアプローチを検討します) (小さなrの平面スイープr)とその間の広いスペース)。
greybeard 2015年

ボールの中心はxiある必要がありますが、その条件がないより良いアルゴリズムがある場合、私も興味があります。
Manuel

Ball Range Counting Problemのアルゴリズムよりも高速に見えるようです。ただし、不正確な回答を受け入れることができる場合は、方向の異なる一連の正方形で円盤を近似できます。各方向について、範囲ツリー(en.wikipedia.org/wiki/Range_tree)を構築する必要があります。これにより、時間(kの正方形内のすべてのポイントをカウントできます。-結果のポイントの数)。O(n)O(log2(n)+k)
HEKTO 2015年

@HEKTO ポイントがコスト長方形にあるかどうかをクエリするためにコスト構造を構築することを提案していますか?次に、すべてのポイントを調べて、近似ボールにある他のポイントの数を数えますか?これは機能しますが、そのようなデータ構造に必要なメモリは何でしょうか?よりも低くなりますか?O(nlog(n))O(log2(n)+k)O(n2))
Manuel

回答:


5

Ball Range Counting Problemのサブリニアアルゴリズムは現在のところ不明です。

ただし、正確でない回答を受け入れることができる場合は、方向の異なる一連の正方形で円盤を近似できます。方向ごとに、範囲ツリーを構築する必要があります。これにより、正方形内のすべてのポイントを時間(k-結果のポイントの数カウントできます。O(log2(n)+k)

各範囲ツリーにはメモリが必要です。より適切な近似を使用するには、より多くの向きを使用する必要があります。たとえば、2つの方向で八角形が得られます。これは、面積誤差が6%未満のディスクに近似しています。O(nlog(n))


3

答えはそれほど単純ではなく、複雑さの理論におけるこの問題の高度な研究があります。これは、たとえば次の問題として研究されているようです。これは、高速の「全範囲カウント」クエリに焦点を当てています。はい、理論上の境界を改善することは可能ですが、これらは誰も実装していない抽象的なアルゴリズムのようです。実際の実装が必要な場合は、別の質問です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.