我在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)
有人可以解释它背后的数学吗?感谢。
答案 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)上检查它,或者你可以阅读如何解决递归方程