在 nxn 的二维数组中查找局部最大值

Posted

技术标签:

【中文标题】在 nxn 的二维数组中查找局部最大值【英文标题】:Finding the local maxima in a 2d array of nxn 【发布时间】:2017-07-17 10:55:22 【问题描述】:

在一个 n×n 的二维数组中,我试图找到一个比它的邻居大的数字。 我使用分而治之的算法来解决这个问题。

接下来,我试图通过展示一个合适的不变量来证明我的算法的正确性,即我通过用随机数填充 4x4 网格、对其进行划分并找到每个选定列的全局最大值来解决这个问题(不确定这是不是这样证明算法的正确性)

我最困惑的一点是如何分析我的算法的运行时间,即在最坏的情况下需要访问 n×n 数组中的多少元素,最后是否有办法显示算法是否是渐近最优的。

【问题讨论】:

【参考方案1】:

你不可能有比 O(n^2) 更好的复杂性,因为你需要访问数组的每个元素。如果您没有访问某个元素,则可能会发现您的数组没有任何局部最大值,除了您未访问的元素中的全局最大值。蛮力算法(仅检查每个元素是否为局部最大值)为 O(n^2),因此没有太多空间可以做得更好或更差。

重新分而治之算法——对于给定的问题,这似乎是过度设计的。你没有得到任何好处,而且你引入了额外的复杂性(你如何处理部分之间的边界?)

【讨论】:

以上是关于在 nxn 的二维数组中查找局部最大值的主要内容,如果未能解决你的问题,请参考以下文章

C++中如何在一个二维数组中查找某个值

获取高于某个值的二维数组中的局部最大值坐标

在二维数组中查找最大值

在二维数组中的行和列处查找最大值

使用 STL 算法在表(向量的向量、二维数组)中查找最小值/最大值的优雅方法

数组去重最大值二维数组