我现在正在学习一些算法,我混淆了这两个二进制搜索实现之间的时间复杂性和空间复杂性,如下所示
对于第一个实现(bin_search1),我认为时间复杂度是O(klogn),空间复杂度是O(n),因为使用列表切片是O(k)
def bin_search1(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 bsearch3(arr[:m], key)
result = bsearch3(arr[m:], key)
return (result + m if result != None else None)
对于第二个实现(bin_search2),时间复杂度为O(logn),空间复杂度为O(1),因为只调用原始列表上的位置
def bin_search2(arr, key, left=0, right=len(arr)):
if left >= right:
return None
m = int(0.5 * (left + right))
if arr[m] == key:
return m
elif arr[m] > key:
return bsearch3_fix(arr, key, left, m)
return bsearch3_fix(arr, key, m + 1, right)
你能告诉我我对其复杂性的理解吗
目前没有回答
相关问题 更多 >
编程相关推荐