在大矩阵内移动方块,找到重叠的最小数字

时间:2013-04-12 10:08:40

标签: algorithm data-structures matrix

我有一个sqaure矩阵和一个较小的正方形,它在矩阵内的所有可能位置移动(不会离开矩阵)。我需要在所有这些可能的重叠中找到最小的数字。

问题在于两者的大小可以达到数千。有什么快速的方法吗?

我知道一种方法 - 如果有一个数组而不是一个矩阵和一个窗口而不是一个正方形,我们可以使用 deque 线性时间内完成。< / p>

提前致谢。

编辑:示例

矩阵:

1 3 6 2 5
8 2 3 4 5
3 8 6 1 5
7 4 8 2 1
8 0 9 0 5

对于大小为3的正方形,总共可以重叠9次。对于每个重叠,矩阵形式的最小数字是:

1 1 1
2 1 1
0 0 0

1 个答案:

答案 0 :(得分:1)

可以在O(k * n^2)中使用您的双端创意:

如果您的小方块为k x k,则将矩阵中第一行元素从1重复到k,并通过预先计算从1到{{1的最小元素数量来将其视为数组在矩阵的每一列中,从2到k等(此预计算将采用k + 1。这就是您的第一行:

O(k * n^2))

我提到的预计算会在每个列中给出最小值,因此您可以将问题减少到1d阵列问题。

然后继续从2到********* 1 3 6 2 5 8 2 3 4 5 3 8 6 1 5 ********* 7 4 8 2 1 8 0 9 0 5 的元素行:

k + 1

将有1 3 6 2 5 ********* 8 2 3 4 5 3 8 6 1 5 7 4 8 2 1 ********* 8 0 9 0 5 行,您将能够在O(n)中解决每一行,因为我们的预计算允许我们将它们缩减为基本数组。