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

时间:2016-01-31 13:57:20

标签: python algorithm binary-search

我在python中搜索二进制搜索,我发现了这个: http://openbookproject.net/thinkcs/python/english3e/list_algorithms.html

它说最大的一般关系。迭代次数(与探测权相同?)和N(列表大小)由N = 2^k -1给出,其中k是最大迭代次数。

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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)上检查它,或者你可以阅读如何解决递归方程