算法入门1:二分查找
来源:互联网 发布:betterzip mac版 编辑:程序博客网 时间:2024/06/02 03:52
一、何为二分查找
二分查找,是计算机科学中较为基础的算法,又称二分法,其主要应用于在一个有序的元素列表中查找某个元素(为什么要有序请继续往下看)。
二、工作原理
假设你在玩一个猜数的游戏,其范围是1~100,每当你提出一个数,就会有人告诉你猜大了还是猜小了。
如果你从1开始逐渐往100猜,那么如果答案是80,你就得猜测80次,答案是n,你就得猜测n次,我将这种方法称为简单查找。
但是如果你使用二分查找(答案依然是80),你就可以先折半,先猜50,这样就能一次排除小于50的前一半的数字,然后把51~100继续折半,依次猜75,87(85~90之间),81(75~87之间)。。。每次二分,以此类推,最后得到80(开心)。
100每次除以2,向上取整分别商50,25,13,7,4,2,1,可见要在100中查找到一个数,用二分法最多只需要7步。
三、运行效率(简单查找VS二分查找)
包含100个元素的列表,简单查找最多需要100步,二分查找只需要7步;
包含4 000 000 000个元素的列表,简单查找最多需要4 000 000 000步,二分查找只需要32步;
包含n个元素的列表,简单查找最多需要n步,二分查找只需要log2(n)步,也就是每二分一次就除以2,n除尽需要log2(n)次。
四、代码示例
def binary_search(list, item):'''数组第一个元素的索引为0,最后一个元素的索引为数组长度len-1'''low = 0high = len(list) - 1while low <= high:'''如果二分以后中间的元素的值自动向下取整'''mid = (low + high) / 2guess = list[mid]if guess == item:return midif guess < item:low = mid + 1else:high = mid - 1return None'''测试'''my_list = [1,3,5,7,9]print binary_search(my_list, 3) #return 1print binary_search(my_list, -1)#return None
阅读全文
0 0
- 算法入门1:二分查找
- 二分查找算法1
- 【计蒜客】基础算法入门之二分查找
- 二分查找算法小白入门
- ACM算法入门——二分查找
- 算法之二分查找(1)
- 算法(1)二分查找
- 查找算法 二分查找
- 查找算法:二分查找
- 算法--查找--二分查找
- 查找算法---二分查找
- [算法]二分查找算法
- 算法----二分查找算法
- 查找算法:二分查找算法
- 算法入门---java语言实现的二分查找小结
- 二分查找入门
- 二分查找(入门)
- [转载]查找算法----二分查找
- .html(),.text()和.val()的 不同之处
- 断点续传下载原理实现
- Annu. Rev. Genet:植物微生物组——系统性见解与展望
- Codeforces Round #432 (Div. 2) D
- 关于Android兼容7.0系统版本的问题
- 算法入门1:二分查找
- C语言实现栈(基于数组)
- 蓝牙
- 获取Android key hash值和 Sha1key 值
- 解决虚拟机下Ubuntu cheese黑屏问题
- 系统运行环境分析
- 切切切
- 关于mysql如何判断会不会产生死锁的分析
- LeetCode