【问题标题】:Divide and Conquer to find maximum difference between two ordered elements in a two dimensional array分而治之以找到二维数组中两个有序元素之间的最大差异
【发布时间】:2018-03-10 21:09:42
【问题描述】:

我现在使用分治算法来找到两个有序元素之间的最大差异(这意味着 A[i][j] - A[k][l] where k>i and 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

那么如何通过分治算法在二维数组中求解呢?

非常感谢!

【问题讨论】:

  • 你能更好地解释一下你用来到达8 - 0 = 8 以获得最终答案的算法吗?我不清楚。
  • 这就是我问这个问题的原因。我不知道如何使用分治算法得到最终答案。
  • 我现在明白了,8 是您当前的错误结果。这些数组是否以任何方式排序?
  • 很抱歉我写的格式可能会误导您。我写的例子不是4个数组,是一个4*4的二维数组。我的问题是给定 n*n 二维数组 A,如何找到最大值 A[i][j] - A[k][l] 其中 k>i 和 l>j。

标签: algorithm


【解决方案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 循环应该可以完成这项工作。

【讨论】:

    猜你喜欢
    • 2014-07-26
    • 2017-03-23
    • 2021-01-31
    • 2019-08-28
    • 2013-03-27
    • 2014-02-15
    • 2020-01-07
    • 2016-12-25
    • 2021-12-03
    相关资源
    最近更新 更多