Advertisement

用Python计算数组中的局部极大值

阅读量:

求数组局部最大值

假设有一个无重复元素的一维数组A,请确定该数组中的局部极大值位置。
特别地,在超出数组范围的位置视为负无穷。
显而易见的方法是遍历整个数组以获取全局极大值。
然而,在这种情况下,
是否有可能通过某种优化方法来加快计算速度?

算法描述

将索引变量left和right分别赋值为数组的起始和末尾位置。
计算中点的位置mid等于(left + right)除以二。
若发现A[mid]大于A[mid+1]时,则放弃右半部分并将right设为当前中点。
反之若发现A[mid+1]大于A[mid]时,则放弃左半部分并将left设为当前中点加一。
通过递归过程不断缩小范围直至左右指针相遇。
该算法的时间复杂度为O(logN),属于高效的对数阶算法。

Python代码

复制代码
    def local_maximum(li):
    if li is None:
        return
    left = 0
    right = len(li) - 1
    while left < right:
        mid = int((left + right) / 2)
        if li[mid] > li[mid + 1]:
            right = mid
        else:

全部评论 (0)

还没有任何评论哟~