我有两个版本的二进制函数,分别名为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比binary_search_v2好。
答案 0 :(得分:0)
第一个函数对列表进行切片,以递归于另一半。切片操作需要将一堆引用复制到一个新列表中,因此,与另一个版本相比,该版本将花费更多的时间和内存,后者只是传递索引来描述要搜索的原始列表的一部分。
我认为第一个函数在时空上是O(N),而效率更高的第二个函数是O(log N)。