我正在做一些关于算法的补救工作,因为我在秋季参加了他们的研究生课程并且是一个物理本科课程。观察这个video并且在38:00标记处他看到了2D阵列的贪婪上升算法。当他把峰值定义为时,我很困惑 a< = b,c,d,e(b,c,d和e是当前元素'a'的左,右,顶部,底部的元素)。然后他继续说要找到峰值,你遵循接近'a'的最大元素,但如果你有2D阵列怎么办:
20 15 13
12 10 10
40 40 40
并从13开始,贪婪的上升算法不会错误地将20识别为峰值吗?如何在不必查看每个元素的情况下搜索未排序的数组?
如果这是一个愚蠢的问题,我感谢你的帮助,提前道歉。
答案 0 :(得分:4)
密切关注定义,因为它们与您直观的预期不同。
他将峰值定义为< = b,c,d,e(b,c,d和e是当前元素'a'的左,右,顶部,底部的元素)
所以你有它 - 一个峰被定义为本地最大值(一个大于其所有直接邻居的元素),而不是全局最大值(比所有其他元素更大的元素)。根据这个定义,很明显,虽然20不是 最大元素,但它是 a 峰值。
(如评论中所述,定义应该是> = b,c,d,e,这可能只是原帖中的一个错字)
答案 1 :(得分:1)
我已浏览过视频,问题陈述说: - 找到一个峰值,如果它存在。 根据定义,可以保证始终存在峰值。 根据定义,峰值不必是GLOBAL最大值。来到下一点: - 如何在不必查看每个元素的情况下搜索未排序的数组? 好吧你不能这样做,如果它是未分类的,因为可能每个元素都可能是你正在寻找的元素但是,当我将你的问题与峰值发现问题相关联时,他正在使用贪婪的方法来找到满足特定条件的元素而不是在数组中寻找任何特定元素。通过使用贪婪方法,我们希望能够更早地找到它,但不能保证。
答案 2 :(得分:0)
我也在学习这门课程,并按照他的定义达到峰值,一个元素说 'a' 比任何与它接壤的元素都大。
在这里,'a' 可能是也可能不是全局峰值 [大于矩阵中的所有元素]。只要算法找到更快的结果,只要它符合上述条件,它就会提供给我们。
对于峰值发现实际发现的内容存在一些混淆。它很容易被误认为是数组/矩阵中最大的元素,但实际上取决于所提出的问题。如果问题没有说明峰值是什么,一般认为是满足上述条件的元素等待算法找到。