Python二进制搜索(最大迭代次数)

我在
python中使用Google搜索二进制搜索,我发现了这个:

http://openbookproject.net/thinkcs/python/english3e/list_algorithms.html

它说最大的一般关系.迭代次数(与Probe right相同?)和N(list的大小)由N = 2 ^ k -1给出,其中k是最大迭代次数.

但是从我的理解来看,一般关系不应该是N = 2 ^ k
每次搜索之后,我们将列表除以2,直到达到1.

因此,最大迭代次数是log2 N而不是log2(N 1)

我用谷歌搜索了这个,我发现一个网站支持我的答案,但没有太多解释.
(链接:http://codingexplained.com/coding/theory/binary-search-algorithm)

有人可以解释它背后的数学吗?谢谢.

最佳答案 设P(n)为n个元素所需的探针数.然后我们可以写下面的等式:

P(0) = 0
P(n) = 1 + P((n-1)/2)

说明:
首先,我们没有任何元素 – 无所事事.
然后我们进行1次探测,我们留下了(n-1)/ 2个元素(因为我们刚检查它们,所以我们扔了1个)所以我们需要做更多的P((n-1)/ 2).

来自该等式的P(n)的结果将是floor(lg(n 1)).你可以在一些例子(如n = 6和n = 7)上检查它,或者你可以阅读如何解决递归方程

点赞