我在实现二进制搜索的修改版本时遇到了一些困难(它只需要检查子列表中是否有 1,然后继续搜索直到它返回索引)。
目前我想出的代码是:
def binary_search(inList):
low = 0
high = len(inList) -1
while low <= high:
mid = (low+high)//2
upper = inList[mid:high]
lower = inList[low:mid-1]
if any(lower):
inList = lower
high = mid-1
elif any(upper):
inList = upper
low = mid
else:
return mid
assert low < high
return -1
它似乎适用于循环的几次迭代,但随后它返回空列表并失败。我已经使用以下输入测试了该功能:
l = [0 for x in range(256)]
l[123] = 1
我还注意到,当列表被抽取时,一些垃圾箱会丢失。
我将如何着手创建一个测试套件,它将捕获这些问题并让我将此算法扩展到其他输入集(例如,两半中的 1,彼此相邻的两个 1 等)。