问题

list.index()无法应对大规模数据的查询,需要用其它方法解决,这里谈的就是二分查找

思路说明

在查找方面,python中有list.index()的方法。例如:

这是python中基本的查找方法,虽然简单,但是,如果由于其时间复杂度为O(n),对于大规模的查询恐怕是不足以胜任的。二分查找就是一种替代方法。

基本步骤:

  1. 如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。
  2. 如果在某一步骤数组为空,则代表找不到。

这种搜索算法每一次比较都使搜索范围缩小一半。时间复杂度:O(logn)

解决(Python)

对于python,不能忽视其强大的标准库。经查阅,发现标准库中就有一个模块,名为:bisect。其文档中有这样一句话:

当我把这段话输入到百度翻译中,天才的百度翻译给我的结果是:

这就是百度的水平,只可惜在贵国不能用google。

  • 本模块同样适用于长列表项。因为它就是用二分查找方法实现的,有兴趣可以看其源码(源码是一个很好的二分查找算法的例子,特别是很好地解决了边界条件极端的问题.)
  • 关于bisect模块的更多内容,可以参看

下面演示这个模块的一个函数