この問題を解決するには、VoronoiダイアグラムとKirkpatrickのデータ構造を使用できます。
RaphaelとSyzygyが提案したように、Fortuneの(スイープライン)アルゴリズムを使用してボロノイ図を作成できます。最悪の場合:。O (n ログn )
ボロノイ図には、それぞれがトランスミッターを含む多数のポリゴンがあります。ポリゴン内の任意のポイントは、そのトランスミッターに最も近くなります。したがって、どのポリゴンにレシーバーが含まれているかがわかる場合は、何らかのポリゴンがどのポリゴンにあるかを見つけることで、最も近いトランスミッターを見つけることができます。その後、そのトランスミッターが内にあるかどうかを確認します。1 キロ
どのボロノイポリゴンにレシーバーが含まれているかを判断するには、最初にダイアグラム内の各ポリゴンを三角形分割します。これで三角形メッシュができました。次に、Kirkpatrickのデータ構造を使用して、時間(最悪の場合特定のポイントを含む三角形を見つけます。Kirkpatrickのデータ構造の構築には、最悪の場合があります。三角形がわかれば、三角形を含むポリゴン、つまり最も近いトランスミッターがわかります。すべての受信者に対してこれを行うと、最悪の場合になり。O(n log n )O(n log n )O (ログn )O (n ログn )O (n ログn )
ボロノイ図の各セルは、場合によっては無制限の凸多角形です。
...
[n個のサイトのボロノイ図の]頂点の数V≤2n-5
― www.cs.arizona.edu
ボロノイ図の各ポリゴンは、凸ポリゴンです。ためしたがって、凸多角形の三角測量がかかり、時間、辺の数であることを、我々は、効率的に各セルを三角測量することができます。三角測量が病的なものになる可能性がある(各セルに側面があるセルがある)、これを考慮してください。ボロノイ図には頂点があります(上記の引用を参照)。ボロノイ図の三角形分割は平面であり、スパースグラフでもあるため、エッジと面を持ちます。したがって、特定のセルの三角形分割には場合がありますが、全体の三角形分割にも時間がかかりますΘ (v )vnnO(n)O(n)O(n)O(n)。(基本的に、辺を持つ多くのセルに出会うことはありません。これは、平面グラフには三角形が多すぎることになります)。O(n)