peakFinder的分而治之方法

时间:2016-09-17 17:10:55

标签: divide-and-conquer

寻找高峰的分而治之方法很像这样

find_peak(a,low,high):
    mid = (low+high)/2
    if a[mid-1] <= a[mid] >= a[mid+1] return mid // this is a peak;
    if a[mid] < a[mid-1] 
        return find_peak(a,low,mid-1) // a peak must exist in A[low..mid-1]
    if a[mid] < a[mid+1]
        return find_peak(a,mid+1,high) // a peak must exist in A[mid+1..high]

所以我的问题是,如果我们使用这个算法,我们可能会松开实际存在峰值的另一半

或者我们假设我们发现的峰值是一个峰值而另一半峰值是另一个峰值因此单个阵列中可能存在两个峰值

1 个答案:

答案 0 :(得分:1)

我将它用作峰值定义“如果数组元素不小于其邻居,则数组元素为峰值。

此数组有2个峰值元素:

[10, 20, 15, 2, 23, 90, 67]

20和90

上面发布的算法只会返回一个值。并非所有峰值,甚至不是最大峰值 - 它只是找到某些峰值。