Python模块:bisect二分算法模块
来源:互联网 发布:js汉字转unicode编码 编辑:程序博客网 时间:2024/05/16 08:43
http://blog.csdn.net/pipisorry/article/details/72307432
Bisect模块简介
Python 的列表(list)内部实现是一个数组,也就是一个线性表。在列表中查找元素可以使用 list.index() 方法,其时间复杂度为O(n)。对于大数据量,则可以用二分查找进行优化。二分查找要求对象必须有序,其基本原理如下:
- 1.从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;
- 2.如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。
- 3.如果在某一步骤数组为空,则代表找不到。
二分查找也成为折半查找,算法每一次比较都使搜索范围缩小一半, 其时间复杂度为 O(logn)。
Python 有一个bisect
模块,用于维护有序列表。bisect
模块实现了一个算法用于插入元素到有序列表。在一些情况下,这比反复排序列表或构造一个大的列表再排序的效率更高。Bisect 是二分法的意思,这里使用二分法来排序,它会将一个元素插入到一个有序列表的合适位置,这使得不需要每次调用 sort 的方式维护有序列表。先说明的是,使用这个模块的函数前先确保操作的列表是已排序的。
Bisect模块提供的函数
- bisect.bisect_left(a,x, lo=0, hi=len(a)) :
查找在有序列表 a 中插入 x 的index。lo 和 hi 用于指定列表的区间,默认是使用整个列表。如果 x 已经存在,在其左边插入。返回值为 index。
- bisect.bisect_right(a,x, lo=0, hi=len(a))
- bisect.bisect(a, x,lo=0, hi=len(a)) :
这2个函数和 bisect_left 类似,但如果 x 已经存在,在其右边插入。
- bisect.insort_left(a,x, lo=0, hi=len(a)) :
在有序列表 a 中插入 x。和 a.insert(bisect.bisect_left(a,x, lo, hi), x) 的效果相同。
- bisect.insort_right(a,x, lo=0, hi=len(a))
- bisect.insort(a, x,lo=0, hi=len(a)) :
和 insort_left 类似,但如果 x 已经存在,在其右边插入。
Bisect 模块提供的函数可以分两类: bisect*
只用于查找 index, 不进行实际的插入;而 insort*
则用于实际插入。该模块比较典型的应用是计算分数等级;同样,我们可以用 bisect 模块实现二分查找。
side='right'。numpy.searchsorted 效率是很低的,跟 bi
sect 根本不在一个数量级上。因此 searchsorted 不适合用于搜索普通的数组,但是它用来搜索 numpy.ndarray 是相当快的。皮皮blog
Bisect示例
先说明的是,使用这个模块的函数前先确保操作的列表是已排序的。
先看看 insort 函数:
其插入的结果是不会影响原有的排序。
再看看 bisect 函数:
其目的在于查找该数值将会插入的位置并返回,而不会插入。
接着看 bisect_left 和 bisect_right 函数,该函数用入处理将会插入重复数值的情况,返回将会插入的位置:
其对应的插入函数是 insort_left 和 insort_right :
可见,单纯看其结果的话,两个函数的操作结果是一样的,其实插入的位置不同而已。
更多示例参考[bisect — Array bisection algorithm]from: http://blog.csdn.net/pipisorry/article/details/72307432
ref: [bisect — Array bisection algorithm]
[Python 二分查找与 bisect 模块]
- Python模块:bisect二分算法模块
- bisect模块二分插入
- python bisect模块
- python---bisect模块
- Python bisect模块
- python之bisect模块
- python bisect模块
- python中的bisect模块
- python实现二分查找及bisect模块的简介
- Python模块——bisect
- python的排序模块bisect
- python的排序模块bisect
- bisect模块
- 一个有趣的python排序模块:bisect
- python中bisect模块的使用
- Python用于排序的模块——bisect
- Python中bisect模块用法,及实现方式
- python数组查找算法---bisect二分查找插入
- codeforces 61E 树状数组 逆向
- unity 拖动物体移动
- spring事务的传播属性,数据库事务特征,隔离级别
- JAVA使用、配置相关基础知识
- 启动tomcat 总提示“Publishing to Tomcat v6.0 Server at localhost ...错误
- Python模块:bisect二分算法模块
- UEFI Application
- loss和accuracy的关系
- GitHub访问速度慢的解决方法
- python结合redis的部分操作
- No result defined for action result input
- 数据库集群技术漫谈
- 四。初探CSS
- C#通过websevice发布到IIS 上传到服务器(转载)