特定の半径を持つランダムな場所にそれぞれ重なり合う円の大規模なセットがあります。
type Circle =
struct
val x: float
val y: float
val radius: float
end
タイプの新しいポイントが与えられた
type Point =
struct
val x: float
val y: float
end
セット内のどの円が新しい点を囲んでいるか知りたいです。線形検索は自明です。円を保持し、提示されたポイントに対して O(N) よりも優れた囲み円を返すことができる構造を探しています。
理想的には、構造は新しい円の挿入と円の削除に対しても高速である必要があります。
これを F# で実装したいのですが、どの言語で考えても問題ありません。
ご参考までに、実装を検討しています
http://takisword.wordpress.com/2009/08/13/bowyerwatson-algorithm/
しかし、新しい点ごとにすべての円をスキャンする単純なアプローチを使用すると、O(N^2) になります。