就运行时间和内存而言,哪种二进制搜索算法更好?

时间:2019-04-04 04:12:23

标签: python algorithm binary-search

我有两个版本的二进制函数,分别名为binary_search_v1和binary_search_v2。我需要知道在时间和空间复杂度上哪一个优于其他,为什么?无法确定要使用哪个?

在我看来,两者在时间复杂度上是平等的。由于主要实现是二进制搜索。

def binary_search_v1(abc,val):
    low=0
    high=len(abc)
    if len(abc)==1 and abc[low] != val:
        return False
    else :
        mid = (low + high)//2
        if abc[mid] == val:
            return True
        elif abc[mid] < val :
            return binary_search_v1(abc[mid+1:high],val)
        else :
            return binary_search_v1(abc[0:mid],val)


def binary_search_v2(data, target, low, high):
    """Return True if target is found in indicated portion of a Python list.

    The search only considers the portion from data[low] to data[high] inclusive.
    """
    if low > high:
        return False # interval is empty; no match
    else:
        mid = (low + high) // 2
        if target == data[mid]: # found a match
            return True
        elif target < data[mid]:
            # recur on the portion left of the middle
            return binary_search_v2(data, target, low, mid - 1)
        else:
            # recur on the portion right of the middle
            return binary_search_v2(data, target, mid + 1, high)

就内存而言,binary_search_v1比bina​​ry_search_v2好。

1 个答案:

答案 0 :(得分:0)

第一个函数对列表进行切片,以递归于另一半。切片操作需要将一堆引用复制到一个新列表中,因此,与另一个版本相比,该版本将花费更多的时间和内存,后者只是传递索引来描述要搜索的原始列表的一部分。

我认为第一个函数在时空上是O(N),而效率更高的第二个函数是O(log N)。