寻找局部高点-1D之python实现

  1. 所谓的局部高点就是在某个局部的地方的极值,这个不是全局最值,所以在寻找的时候,从哪里找?怎么找?效率就非常重要了。
  2. 基于没有现成的资料,因此特整理下思路,便于大家理解该算法。
  3. 简单算法:从第一个元素开始,判断其是否满足局部高点的条件,如果满足就返回该数的索引,否则判断下一个元素。如此循环判断输入序列的每一个元素直到找到一个局部高点为止。【提示:本文不考虑算法的异常检测等,没找到的时候怎么处理等手续请大家自行添加】
def findLocalHigh(A):
    for i in range(len(A)):
        if A[i-1] <= A[i] >= A[i+1]:
            return i
        else:
            continue
A = [1, 2, 6, 5, 3, 7, 4]
i = findLocalHigh(A)
print(i)

最后输出结果:2

  1. 改进算法:前面的算法直观,容易实现,但不是最优的算法。改进的思路是减少查找次数。首先确定从哪个位置开始找,然后确定查找范围。可以借鉴二分法:从序列中间位置开始,这样每次搜索可以缩小一半的搜索范围。那有个问题,假设中间位置元素已知A[i],比较该元素和其相邻的元素之间的大小关系会有下面几种情况:
    (1)A[i-1]<=A[i]>=A[i+1],也就是A[i]满足局部高点条件,完成任务,返回i。
    (2)A[i]<A[i-1],也就是左边可能有局部高
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值