スイープラインによる四角形のカバレッジ


9

残念ながら一人で練習できませんでした。

長方形のセットと長方形R 0。平面スイープアルゴリズムを使用して、R 0R 1のセットで完全にカバーされているかどうかを判断します。R nR1..RnR0R0R1..Rn

掃引ラインアルゴリズムの原理の詳細については、こちらを参照してください

最初から始めましょう。最初は、2つのデータ構造を必要とするラインセグメントの交差を見つけるためのアルゴリズムとして、スイープラインアルゴリズムを知っています。

  • イベントポイントのセット(セグメントのエンドポイントと交差ポイントを格納します)Q
  • ステータス(スイープラインが交差する一連のセグメントの動的構造)T

一般的な考え:スイープラインは、左から長方形のセットに近づき始める垂直線であると想定します。ソート全てのx矩形の座標とに格納Q昇順で-取るべきOをN ログN 。最初のイベントポイントから開始し、すべてのポイントで特定のx座標で交差する長方形のセットを決定し、交差長方形の連続セグメントを識別し、それらが現在のx座標でR 0を完全にカバーしているかどうかを確認します。Tバイナリツリーとしてそれは取るつもりだO ログをlxQO(nlogn)xR0xTR 0の一部が覆われていない場合、 R 0は完全には覆われていません。O(logn)R0R0

詳細:セグメント交差アルゴリズムの考え方は、隣接するセグメントのみが交差するというものでした。この事実に基づいて、ステータスを作成し、アルゴリズム全体で維持しました。この場合も同様のアイデアを見つけようとしましたが、これまでのところ成功していません。唯一言えることは、2つの長方形が対応するx座標とy座標が重なっている場合に交差することです。Txy

問題は、構築・維持する方法である、そしてどのような建物の複雑さと保守Tです。私はその前提とRの木が、この場合には非常に便利ですが、私は見られるように、R木を使用して最小の境界長方形を決定することは非常に困難です。TT

この問題を解決する方法、特にを構築する方法について何か考えがありますか?T


1
これらの軸に沿った長方形はありますか?(どちらの方法でもかまいませんが、そうであれば簡単です。)
Louis

@Louis、少し簡単にしましょう。軸に沿った長方形があると仮定しましょう。もちろん、一般的なケースはもっと興味深いです
com

長方形のどのポイントがイベントポイントですか?すべてのコーナー、左上隅...?
ラファエル

@ Raphael、xのみがイベントポイント
com

回答:


6

nRii1

  • 、長方形覆われた垂直間隔を追加します。RiRi
  • RiRi

O(logn)

R0R0O(nlogn)O(n)

一般的なケースでは、明らかなトリックはそれほど速くありません。標準のスイープラインアルゴリズムを使用して、長方形によって引き起こされる平面サブディビジョン全体を計算します。

FR0R0O(1)O(n2logn)Ω(n2) サイズが最も大きいので、最悪の場合はそれだけ多くのスペースを使用します。したがって、時間は「出力に敏感」ではなく「実存的に最適」です。

R0FRifRiffRiffRi

O(nlogn)O(n2logn)


QxTxiRRi,i1R0R0

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