我有一个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”编写代码来解释...
答案 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。