【发布时间】:2021-02-17 18:01:22
【问题描述】:
关于下面给出的二分查找实现:
def bin_search(arr, key):
n = len(arr)
if n < 2:
return (0 if (n == 1 and arr[0] == key) else None)
m = int(0.5 * n)
if arr[m] > key:
return bin_search(arr[:m], key)
result = bin_search(arr[m:], key)
return (result + m if result != None else None)
对于上面的二分查找实现,时间复杂度会受到影响,因为我们正在获取数组的切片和空间复杂度,因为 Python 中的列表切片会创建一个新的列表对象。为了改进上述实现,我正在考虑引入下限和上限变量,就像在其原始实现中一样。但它会完全修改上面的代码实现。
您能否告诉我如何修改上述实现,以提高它的时间和空间复杂度,我对其复杂度的理解是否正确?
【问题讨论】:
-
您应该只将原始数组传递给递归函数,以及搜索的高/低边界。避免生成所有这些切片。
-
@RufusVS 我也尝试过这样做。但它会完全修改现有的实现,并提供一个全新的实现。
标签: python algorithm time-complexity binary-search