划分和征服以找到二维数组中两个有序元素之间的最大差异

时间:2017-09-29 02:09:33

标签: algorithm

我现在使用分而治之算法来找出两个有序元素之间的最大差异(这意味着A [i] [j] - A [k] [l]其中k> i和l> j)在两个维数组,如下所示:

[0,3,6,4]

[9,3,1,6]

[7,8,5,6]

[1,2,3,4]

结果是A [1] [2] - A [0] [0] = 8 - 0 = 8(不是A [0] [1] - A [0] [0] = 9 - 0 = 9。

最大的问题是在一维数组中,如下面的问题:

Divide and Conquer Algo to find maximum difference between two ordered elements

那么如何通过分而治之算法在二维数组中解决它?

非常感谢!

1 个答案:

答案 0 :(得分:1)

有一个直接的O(n^2)解决方案。为了计算A[i][j] − A[k][l]的最大值,我们暂时修复A[k][l]。假设下图中的A[k][l] = x。然后候选集A[i][j]是阴影矩形。

所以为了使A[i][j] − x最大化。我们需要知道阴影区域的最大值,这可以通过简单的动态编程来计算。

+------+------+------+-----+
|      |      |      |     |
|      |      |      |     |
|      |      |      |     |
+--------------------------+
|      |      |      |     |
|      |  x   |      |     |
|      |      |      |     |
+--------------------------+
|      |      |------------|
|      |      |------------|
|      |      |------------|
+--------------------------|
|      |      |------------|
|      |      |------------|
|      |      |------------|
+------+-------------------+

定义

  • area(i, j) = { A[x][y] | x > i, y > j }
  • f(i, j) = max( area(i, j) )
  • g(m, n) = max { f(i, j) - A[i][j] | 1 <= i <= m, 1 <= j <= n }

然后对于m*n矩阵,我们想要的是f(m, n)

f(i, j) = max { f(i+1, j), f(i, j+1), A[i][j] }

所以2 for循环应该可以完成工作。