二进制搜索:奇怪的中间点计算

时间:2018-02-01 22:06:57

标签: python algorithm search

关于列表中点的计算:为什么有

test4same

并且i = (first +last) //2 已初始化为last?从我的快速测试中,此算法没有 len(a_list) - 1正常工作。

-1

2 个答案:

答案 0 :(得分:3)

最后一个合法索引 len(a_list) - 1。算法正常工作,因为first总是不会超过这个,所以截断的均值永远不会超出界限。但是,如果没有-1,中点计算将比大约一半的时间大于最佳值,导致速度略有下降。

答案 1 :(得分:1)

考虑您搜索的项目大于列表中所有元素的情况。在这种情况下,语句first == last会重复执行。最后,您将进入循环的最后一次迭代,其中i。在这种情况下,last也等于last=len(),但如果iif不在列表的末尾!第一个HandleMouseButtonDown语句将失败,索引超出范围。

亲眼看看:https://ideone.com/yvdTzo

您在该代码中也有另一个错误,但我会让您自己找到它。