可能な値が 1、2、および null の n*m 行列が与えられた場合:
. . . . . 1 . .
. 1 . . . . . 1
. . . 2 . . . .
. . . . 2 . . .
1 . . . . . 1 .
. . . . . . . .
. . 1 . . 2 . .
2 . . . . . . 1
次のすべてのブロック B ((x0,y0) と (x1,y1) の間のすべての値を含む) を探しています。
- 少なくとも 1 つの「1」を含む
- 「2」を含まない
- 上記のプロパティを持つ別のブロックのサブセットではありません
例:
赤、緑、青の領域はすべて「1」を含み、「2」を含まず、より大きな領域の一部ではありません。もちろん、この写真にはそのようなブロックが 3 つ以上あります。これらすべてのブロックを見つけたいです。
これらすべての領域をすばやく見つけるにはどうすればよいでしょうか?
私は、可能なすべての長方形を繰り返し処理し、それらが最初の2つの基準を満たすかどうかを確認する、ブルートフォースソリューションを実行しています。次に、見つかったすべての長方形を反復処理し、別の長方形に含まれるすべての長方形を削除します。最初に連続する同一の行と列を削除することで、処理を高速化できます。しかし、もっと速い方法があると確信しています。