我最近开始研究麻省理工学院的6.006讲座,并在第一讲授课中介绍了峰值搜索算法。找峰算法
根据他的定义:
鉴于阵列[A,B,C,d,E,F,G]其中AG都是数字,b是峰 如果和只有在< = b和b> = c的情况下。
他发出递归方法:
if a[n/2] < a[n/2 -1] then look for a peak from a[1] ... a[n/2 -1]
else if a[n/2] < a[n/2+1] then look for a peak from a[n/2+1] ... a[n]
else a[n/2] is a peak
他说,算法是T(N)= T(N/2)+ O(1)= O(LGN)
在他的PDF他也给了一个完整的例子:[6,7,4,3,2,1,4,5]
7位和5峰。但是,上面的算法不仅仅因为中间元素碰巧满足第一个分支而只发现7个峰值?
所以,如果我们应该找到所有的高峰,我们是否仍然会穿过整个阵列?这是否意味着最坏的情况N?
做他的定义意味着我们只需要找到一个峰值?
我相信这个问题可以被看作是在Riverst的算法导论入门中找到最大和最小元素。
不,原来的定义非常好。峰值是本地最大值 –