我在python lib中找到了以下代码:
def bisect_left(a, x, lo=0, hi=None):
if lo < 0:
raise ValueError('lo must be non-negative')
if hi is None:
hi = len(a)
while lo < hi:
mid = (lo+hi)//2
if a[mid] < x: lo = mid+1
else: hi = mid
return lo
返回索引在列表a中插入项x的索引,假设a已排序。 返回值i使得[:i]中的所有e都具有e&lt; x,以及所有e in a [i:]有e&gt; = x。
此算法的不变量是什么?我想明白这是正确的。
答案 0 :(得分:0)
该算法称为Binary Search Alorithm。它在排序列表上工作以在O(logn)中查找元素(通常在列表中查找元素需要O(n)迭代所有元素)。它背后的魔力如下:假设你有一个从1到1000的排序数组。你想检查247是否存在,一种方法是迭代所有元素,但另一种方法是使用BST,即检查中值,如果它大于247,这意味着如果这个数组上存在247,它应该放在数组的第一个中的某个位置,这样你只需忽略后半部分,依此类推。