在具有值1和0的矩阵中找到最大的平方子矩阵的值为1

时间:2019-10-23 14:13:54

标签: algorithm

我有一个axb矩阵,其值是1或0,我需要找到仅包含一个的最大方子矩阵。我需要了解如何做。我的意思是我嘲笑algorthim。示例:

Matrix is 5x5 [ 1 1 1 1 1
                1 1 1 0 0
                1 1 1 0 0
                1 0 1 1 1
                1 1 1 1 1 ]     largest is 3x3 , starting position 0,0 and return value 3

另一个例子:

Matrix is 5x5 [ 0 1 1 1 1
                0 1 1 1 1
                1 1 1 1 1
                1 1 1 1 1
                1 0 1 0 1 ] 

largest is 4x4 , starting position 0,1 and return value 4

由于程序将完成多种编程语言,因此我需要一种算法。但是您基本上可以为“ C”编写代码来解释...

1 个答案:

答案 0 :(得分:0)

我不知道这是否是最佳解决方案,但这是一个简单的想法。

以5x5矩阵为您创建一个4x4矩阵,方法如下:

每个2x2矩阵将转换为1x1矩阵,如果所有原始数字都为1,否则为0,则为1。

Matrix is 5x5 [ 1 1 1 1 1
                1 1 1 0 0
                1 1 1 0 0
                1 0 1 1 1
                1 1 1 1 1 ]

将转到

Matrix is 4x4 [ 1 1 0 0
                1 1 0 0
                0 0 0 0
                0 0 1 1 ]

现在,我们重复该过程:

Matrix is 3x3 [ 1 0 0
                0 0 0
                0 0 0 ]

再次:

Matrix is 2x2 [ 0 0
                0 0 ]

现在这都是零,我们可以搜索仍然包含1的最小矩阵。这可以告诉我们原始1的矩阵在哪里,并且矩阵的大小相对于原始矩阵的大小可以告诉我们它的大小。在我们的案例中,它位于3x3的左上方,因此最初是3x3矩阵,位于左上方。

我们正在执行的动作实际上是2x2矩阵为1的卷积,而不是四舍五入。许多编程语言都有一个具有此功能的库。

单个卷积的时间复杂度为O(n^2),但是我们执行了n次,因此时间复杂度为O(n^3)

另一个例子:

Matrix is 5x5 [ 0 1 1 1 1
                0 1 1 1 1
                1 1 1 1 1
                1 1 1 1 1
                1 0 1 0 1 ] 

Matrix is 4x4 [ 0 1 1 1
                0 1 1 1
                1 1 1 1
                0 0 0 0 ] 

Matrix is 3x3 [ 0 1 1
                0 1 1
                0 0 0 ] 

Matrix is 2x2 [ 0 1
                0 0 ]

Matrix is 1x1 [ 0 ]

所以2x2中的右上角是最后一个左面,这意味着原始图像是右上4x4。