多峰峰值的一维峰值搜索算法

时间:2014-11-15 07:44:17

标签: arrays algorithm

目前,我指的是MIT OpenCourseWare在下面的视频教程中找到1-D阵列峰值的解释。

https://www.youtube.com/watch?v=HtSuA80QTyo

递归关系:T(n)=T(n/2) + O(1)仅强调数组的一半加上它将导致一个峰值作为输出。什么可能是复发关系已经说过存在多个峰值。

请有人对这个问题有所了解。

提前致谢!

1 个答案:

答案 0 :(得分:1)

视频中存在的问题是:在A[0...N-1]A[i]或{{1}时,在{1}}中找到一个峰值,其中A[i] >= A[i-1] and A[i] >= A[i+1]是一个峰值}。数组可能有很多峰值,请注意您只需要提供任何一个峰值。这个问题可以通过分而治之的算法来解决。我在i = 0 and A[i] >= A[i+1]中实现了它。

i = N-1 and A[i] >= A[i-1]
实际上,这个算法与二进制搜索相同。您可以在每一步将阵列切割一半。那是C,例如// it return the index of the peak. //it can contain many peak, you can return Any One. int find_a_peak(int a[], int low, int hi) { if (low == hi) return low; if (low == hi - 1) return a[low] > a[hi] ? low : hi; int mid = (low + hi) / 2; if (a[mid] >= a[mid+1]) { //At least one peak can be found in the subarray A[low,low+1,...,mid] return find_a_peak(a, low, mid); } else { //At least one peak can be found in the subarray A[mid+1,...,hi] return find_a_peak(a, mid+1, hi); } } )。