【发布时间】:2013-04-01 09:15:28
【问题描述】:
我写了以下代码:
def binary_search(key,lst):
""" iterative binary search
lst better be sorted for binary search to work"""
n=len(lst)
lower=0
upper=n-1
outcome=None # default value
while lower<=upper:
middle=(upper+lower)//2
if key==lst[middle].name: # item found
outcome=lst[middle]
break # gets out of the loop if key was found
elif key<lst[middle].name: # item cannot be in top half
upper=middle-1
else: # item cannot be in bottom half
lower=middle+1
return outcome
我正在尝试对其进行更改,以使其将列表分为 3 部分而不是 2 部分。 我的意思是它不再是二分搜索,但是对于每次迭代,算法会将列表分成 3 个部分。
我无法实现。
我们将不胜感激。
【问题讨论】:
-
为什么要分成三部分?二分搜索的优点是您不需要进行太多比较(每次迭代只需一次)。对于三个部分,您在很多情况下需要进行两次比较(如果第一次比较给出适当的结果,您可能会短路),这超过了将搜索空间从 1/2 减少到 1/3 的好处迭代。
-
这是一个作业。我知道它在任何方面都没有效率。