首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分裂与征服求二维数组中两个有序元素的最大差

分裂与征服求二维数组中两个有序元素的最大差
EN

Stack Overflow用户
提问于 2017-09-29 02:09:33
回答 1查看 709关注 0票数 0

我现在使用分而治之算法在二维数组中查找两个有序元素之间的最大差异(这意味着Ai k>i和l>j中的−Ak ),如下所示:

0,3,6,4

9、3、1、6

7、8、5、6

1,2,3,4

结果是A1−A=8-0=8(不是A−A=9-0= 9 )。

最主要的问题是在一个一维数组中,如下所示:

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

那么,如何通过分治算法在二维阵列中求解呢?

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-29 03:31:10

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

因此,为了使A[i][j] − x最大。我们需要知道阴影面积的最大值,这可以通过简单的动态规划来计算。

代码语言:javascript
复制
+------+------+------+-----+
|      |      |      |     |
|      |      |      |     |
|      |      |      |     |
+--------------------------+
|      |      |      |     |
|      |  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循环应该完成这项工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46480740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档