是否有一个很好的算法,用于检查一行或一列中是否有5个相同的元素,或者对角线给出方形矩阵,比如6×6?
有一种天真算法可以迭代每个点,然后对于矩阵中的每个点,遍历那一行,然后是对角线.我想知道是否有更好的方法.
解决方法:
您可以在一次通过中检查整数矩阵中是否存在k个相同的元素.
假设n是矩阵的大小,m是最大的元素.我们有n列,n行和1对角线.
Foreach列,行或对角线我们最多有n个不同的元素.
现在我们可以创建一个包含(n n 1)*(2 * m 1)元素的直方图.代表
行,列和对角线各自包含至多n个不同的元素.
size = (n + n + 1) * (2 * m + 1)
histogram = zeros(size, Int)
现在棘手的部分是如何更新这个直方图?
在伪代码中考虑这个函数:
updateHistogram(i, j, element)
if (element < 0)
element = m - element;
rowIndex = i * m + element
columnIndex = n * m + j * m + element
diagonalIndex = 2 * n * m + element
histogram[rowIndex] = histogram[rowIndex] + 1
histogram[columnIndex] = histogram[columnIndex] + 1
if (i = j)
histogram[diagonalIndex] = histogram[diagonalIndex] + 1
现在你所要做的就是迭代抛出直方图并检查是否有一个元素> ķ
标签:python,algorithm,matrix
来源: https://codeday.me/bug/20190626/1293414.html