当前位置: 首页 > 知识库问答 >
问题:

峰值查找算法MIT OCW 6.006-它一直存在吗?

乐正远航
2023-03-14

这周我开始了MIT OCW6.006的讲座,在第一节课上教授介绍了找峰算法。


1 2 3 4 5 6 7 8 9
a-i是数字

位置2是峰当且仅当b≥a且b≥c。如果i≥h,位置9是峰值

他提出这个算法是为了提高它的复杂度:

If a[n/2] < a[n/2 − 1] then only look at left half 1 . . . n/2 − − − 1 to look for peak
• Else if a[n/2] < a[n/2 + 1] then only look at right half n/2 + 1 . . . n to look for peak
• Else n/2 position is a peak: WHY?
    a[n/2] ≥ a[n/2 − 1]
    a[n/2] ≥ a[n/2 + 1]

[9,8,7,6,5,2,3,1]

该算法的工作原理如下:

步骤1:A[n/2] 6<7?-->是的,看左半部分[9,8,7,6]
步骤2:A[n/2] 8<9?-->是的,看左半部分[9,8]
步骤3:???

我找到了这个相关的问题,但没有答案:找峰算法

共有1个答案

阴宏爽
2023-03-14

您必须自己考虑边界条件。
以下是完整的步骤:

Step 1: a[n/2] < a[n/2-1]? --> 6 < 7? --> yes, look at left half [9,8,7,6]
Step 2: a[n/2] < a[n/2-1]? --> 8 < 9? --> yes, look at left half [9,8]
Step 3: ??? <br>
//if you put a check on boundary condition then
Step 3: a[n/2] > a[n/2+1]? --> 9 > 8? --> yes, look at right half [8]
Step 4: loop terminates as only one element is left(it is a peak)

你可以在这里找到更好的问题描述。

 类似资料:
  • 给定一个数组[a,b,c,d,e,f,G],其中a-g是数,b是峰当且仅当a<=b且b>=c。 他给出了一个递归的方法: 他说算法是T(n)=T(n/2)+o(1)=o(lgn) 在他的pdf中,他还给出了一个完整的例子: 他的定义是否意味着我们只需要找到一个峰? 我相信这个问题可以看作是在Riverst算法入门书中寻找最大和最小元素。

  • 这是一个关于一维峰值查找的问题(如果元素比数组中的邻居大,它就是一个峰值)。我正在看麻省理工学院的开放式课程讲座,他谈到了一个天真的解决方案:从索引0开始,一直到最后。 然后他说分而治之的解决方案要好得多。我不明白怎么会这样。这难道不是根据数组的内容做出假设吗?如果只是随机数,那又有什么区别呢? 讲师说他写了一个Python脚本,朴素的解决方案花了13秒,而log(N)解决方案只花了.001秒。我

  • 在Python中,如何计算直方图的峰值? 我试过这个: 但结果是: 我希望它能找到0号和3号垃圾桶的峰值。 请注意,峰值跨越超过1个斌。我不希望它将跨度超过1列的峰视为额外的峰。 我对另一种获得高峰的方法持开放态度。 注:

  • 本文向大家介绍在C ++中查找峰值元素,包括了在C ++中查找峰值元素的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将编写一个程序来查找给定数组中的峰元素 峰值元素是大于周围元素的元素。让我们看看解决问题的步骤。 用伪数据初始化数组。 检查第一个元素和最后一个元素的峰值元素状况。 从第二个元素遍历数组。 检查当前元素是否大于上一个元素和下一个元素。 如果上述条件满足,则返回。 打印结果

  • 主要内容:插值查找算法的解题思路,插值查找算法的具体实现插值查找算法又称 插值搜索算法,是在 二分查找算法的基础上改进得到的一种查找算法。 插值查找算法只适用于有序序列,换句话说,它只能在升序序列或者降序序列中查找目标元素。作为“改进版”的二分查找算法,当有序序列中的元素呈现均匀分布时,插值查找算法的查找效率要优于二分查找算法;反之,如果有序序列不满足均匀分布的特征,插值查找算法的查找效率不如二分查找算法。 所谓均匀分布,是指序列中各个相邻元素的差值近

  • 本文向大家介绍在C ++的链接列表中查找峰值元素,包括了在C ++的链接列表中查找峰值元素的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将编写一个程序,该程序在给定的链表中查找峰值元素。 峰值元素是大于周围元素的元素。让我们看看解决问题的步骤。 为链表创建一个struct节点。 用伪数据创建链接列表。 检查基本情况,例如链表是否为空或长度为1。 将第一个元素存储在一个名为previou