【问题标题】:Divide and Conquer Method for peakFinderpeakFinder 的分而治之方法
【发布时间】:2017-01-25 18:00:45
【问题描述】:

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

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]

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

或者我们假设我们找到的峰是一个峰,另一半是另一个峰,因此单个数组中可能有两个峰

【问题讨论】:

    标签: divide-and-conquer


    【解决方案1】:

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

    这个数组有 2 个峰元素:

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

    20 和 90

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

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 2013-02-02
      • 2021-09-14
      • 2012-03-04
      • 2013-11-09
      • 1970-01-01
      • 2012-01-01
      • 2019-08-02
      • 2013-02-03
      相关资源
      最近更新 更多