高速な閉領域を判定をするアルゴリズムを考えています。
画像1のようにマスが塗りつぶされているかいないかの値が入っている2次元配列bool[,]が用意してある場合に、
画像2のように赤色のマス(矩形)を配置した場合に、赤斜線のような閉鎖されているマスを高速に判別するアルゴリズムをご教授いただきたいです。
調べたところ閉領域を塗りつぶすアルゴリズムは存在するのですが、その手法だとすべてのマスを走査する必要があるので、低速になってしまいます。
データとしてbool[,]の他に、塗りつぶされた重複しているマスのないの矩形情報(画像1を例にすると、座標(2,2)から幅4、高さ1の矩形、座標(1,3)から幅2、高さ4の矩形、座標(2,7)から幅5、高さ2の矩形)を参照ものできるものとします。
ヒントだけでもありがたいです。よろしくお願い致します。
現状思いついている最適化
- 新しく配置した矩形が、0または1種類の矩形にしか隣り合っていない場合は新しく閉領域となる部分は存在しない
いちばん汎用的なものを考えれば、「閉領域を塗りつぶすアルゴリズム」になるかと思います。
それ以上に制約できるような、何らかの条件はありますか?
赤い矩形の周囲のドットから始め、幅優先探索をして一番初めにそれ以上探索できなくなったところが閉領域です。メモ化しておいてそこを塗りつぶせば良いのではないでしょうか。
ご提案ありがとうございます。
質問文の方に条件の方を追記いたしました。
>幅優先探索をして一番初めにそれ以上探索できなくなったところ
赤い矩形を配置したときに新しく閉領域となる空間は1つとは限らないので厳しそうです。
10 × 10 ならどんなアルゴリズムでも大差なさそうに思いますが、計測した結果、普通の方法では遅すぎたということですか?
すみません、10x10は一例となります。実際は1000x1000などを想定しています。
質問文の修正を致します。
回答1件
あなたの回答
tips
プレビュー