- 所谓的局部高点就是在某个局部的地方的极值,这个不是全局最值,所以在寻找的时候,从哪里找?怎么找?效率就非常重要了。
- 基于没有现成的资料,因此特整理下思路,便于大家理解该算法。
- 简单算法:从第一个元素开始,判断其是否满足局部高点的条件,如果满足就返回该数的索引,否则判断下一个元素。如此循环判断输入序列的每一个元素直到找到一个局部高点为止。【提示:本文不考虑算法的异常检测等,没找到的时候怎么处理等手续请大家自行添加】
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
- 改进算法:前面的算法直观,容易实现,但不是最优的算法。改进的思路是减少查找次数。首先确定从哪个位置开始找,然后确定查找范围。可以借鉴二分法:从序列中间位置开始,这样每次搜索可以缩小一半的搜索范围。那有个问题,假设中间位置元素已知A[i],比较该元素和其相邻的元素之间的大小关系会有下面几种情况:
(1)A[i-1]<=A[i]>=A[i+1],也就是A[i]满足局部高点条件,完成任务,返回i。
(2)A[i]<A[i-1],也就是左边可能有局部高