2016-09-17 73 views
1

分而治之的方法查找峯值作品很多像這樣分而治之法peakFinder

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和一個在另一半則是另一個因此可能有兩個峯在單個陣列中

回答

1

我將使用這個峯值定義「如果i,數組元素是峯值噸不小於其鄰居。

這個數組有2個高峯elemets:

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

20和90

上面貼將只會返回一個值,該算法並不是所有的峯值,甚至不是最大的峯值 - 它只是發現一些峯值。

+0

謝謝,清除了很多疑惑 –