【发布时间】:2016-01-31 22:53:06
【问题描述】:
我在 python 中使用谷歌搜索二进制搜索,我发现了这个: http://openbookproject.net/thinkcs/python/english3e/list_algorithms.html
它表示max之间的一般关系。迭代次数(与 Probe 相同?)和 N(列表大小)由 N = 2^k -1 给出,其中 k 是最大迭代次数。
但是根据我的理解,一般关系不应该是N = 2^k
每次搜索后,我们都会将列表除以 2,直到得到 1。
因此最大迭代次数是log2 N 而不是log2 (N+1)
我用谷歌搜索了这个,我发现一个网站支持我的答案,但没有太多解释。 (此处链接:http://codingexplained.com/coding/theory/binary-search-algorithm)
有人能解释一下它背后的数学原理吗?谢谢。
【问题讨论】:
-
"每次搜索后,我们将列表除以 2,直到我们得到 1"。否:在您引用的实现中,每次迭代从考虑中删除列表中的一个元素,然后将感兴趣的区域减少到该元素右侧或左侧的所有内容。具体而言,您应该将“探针”视为列表查找 (
xs[mid_index]),而不是迭代。
标签: python algorithm binary-search