私は0と1のMxN行列を持っているとします。それはまばらであるかもしれないし、そうでないかもしれない。0-1の配列で矩形座標を効率的に見つける方法
私は機能が効率的に矩形で私が意味する、アレイ、で四角形を見つけたい:ように、
長方形の4つの隅を作成するすべての1点のある4つの要素のセット矩形の辺は、配列軸の と直交しています。つまり、矩形は、[r1、c1]、[r1、c2]、 [r2、c2]、[r2、c1]のような座標[行インデックス、列インデックス]を持つ4 1の要素 のセットです。 。
など。この設定は、一つの矩形があります指定されたM×Nのアレイについて
0 0 0 1 0 1 0
0 0 0 0 0 0 0
0 1 0 0 0 0 0
1 0 0 1 0 1 0
0 0 0 0 0 0 0
0 0 0 1 0 0 1
、私が欲しいのPythonの関数各サブアレイは、矩形の角の座標対であるFサブアレイのアレイLを返す(A)、(長方形の4つのコーナーのすべてを含む)。配列の同じ要素が複数の矩形の角である場合は、それらの座標を複製しても問題ありません。
私の考え方は、これまでのところです:
1)は、それが一部であるかどうかを確認するために座標配列
2)確認し、各直角三角形の頂点にそれぞれ直角三角形の頂点の座標を見つけますステップ1)は、1であり、列sum> = 2であり、行sum> = 2である列にある要素を見つけることによって達成することができる。
ステップ2)は直角三角形の頂点であると決定された各座標を反復する。与えられた直角三角形の座標対について、それはその列を反復し、その列にある1)のすべての直角三角形座標を調べます。列内の2つの直角三角形のポイントのペアについては、どちらの行がより小さい行合計を持つかをチェックして、どの行が反復処理が速いかを知ることができます。次に、その行の直角三角柱の座標をすべて反復して、他の行にもその列に直角三角形の点があるかどうかを確認します。そうであれば、それらの4つの点は矩形を形成します。
私はこれがうまくいくと思いますが、繰り返しがあり、全体的にはこの処理は合理的に計算集約的であるようです。 0-1配列の長方形のコーナーを検出するためのより良い方法は何ですか?