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

找峰算法

施季
2023-03-14

给定一个数组[a,b,c,d,e,f,G],其中a-g是数,b是峰当且仅当a<=b且b>=c。

他给出了一个递归的方法:

if a[n/2] < a[n/2 -1] then look for a peak from a[1] ... a[n/2 -1]
else if a[n/2] < a[n/2+1] then look for a peak from a[n/2+1] ... a[n]
else a[n/2] is a peak

他说算法是T(n)=T(n/2)+o(1)=o(lgn)

在他的pdf中,他还给出了一个完整的例子:[6,7,4,3,2,1,4,5]

他的定义是否意味着我们只需要找到一个峰?

我相信这个问题可以看作是在Riverst算法入门书中寻找最大和最小元素

共有1个答案

岑俊弼
2023-03-14

是的,这个算法只找到单个峰值。

如果你想找到所有的峰,你必须检查所有的元素,所以它将是O(n)。

注意:峰值不一定是全局最大值。

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

  • 这周我开始了MIT OCW6.006的讲座,在第一节课上教授介绍了找峰算法。 1 2 3 4 5 6 7 8 9 a-i是数字 位置2是峰当且仅当b≥a且b≥c。如果i≥h,位置9是峰值 他提出这个算法是为了提高它的复杂度: [9,8,7,6,5,2,3,1] 该算法的工作原理如下: 步骤1:A[n/2] 6<7?-->是的,看左半部分[9,8,7,6] 步骤2:A[n/2] 8<9?-->是的,

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

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

  • 我在看麻省理工学院的开放课件《算法入门第一讲》,有一些东西对我来说并不是很明显。你不能在这里开始看24:30的讲课,也不能在这里看课堂讲稿,里面有关于一维峰值问题定义和解法的所有细节 问题在于: 对于由“n”个整数元素组成的数组,找到一个峰值 从这个例子中,我们可以理解阵列可能是未排序的,它可能包含重复的,并且它可能包含一个以上的峰,并且根据我的解释,它甚至可能不包含任何单个峰。 到目前为止还不错

  • 我有一个带有开/关数据的二进制时间序列数据集。on通常是短暂的,因此看起来像一个峰值。这就是它的样子。 我已经检测到了峰值,并提取了峰值之间的时间间隔,并且也有数据(底部的红色小双向箭头)。问题是,可以看出,峰值是聚集的,我想对突发大小(集群中的峰值数量)、突发间隔(第一个集群的最后一个峰值和最后一个集群的第一个峰值之间的距离)、突发数量等进行量化。 一旦确定了集群,所有这些都很容易做到。这可以通