博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二分查找
阅读量:5927 次
发布时间:2019-06-19

本文共 1468 字,大约阅读时间需要 4 分钟。

问题引入

  假设我们要从一个电话簿中查找一个以L打头的人,可以从头开始翻页,直接进入L打头的部分。但我们可能不这么做,我们可能从中间开始,因为我们知道以L打头的名字在电话簿的中间;再假设我们从字典中查找一个以字母O打头的单词,我们也将从中间开始查找。 如果现在假设你要登录Facebook,当你这样做的时候,Facebook必须核实你的是否具有该网站的注册账户信息,因此他会从数据库中查找你的用户名,假设你的用户名为sunyboy,Facebook可以以A打头开始查找,更合乎逻辑的做法是从中间开始查找。

     这是一个查找的问题,在上述所有请情况下,都可以使用同一种算法来解决问题,这种算法是二分查找。

概念

  二分查找是一种算法,其输入是一个有序的元素列表。如果要查找的元素包含在列表中,二分查找返回其位置,否则返回null。

基本原理

通过一个实例来说明二分查找的原理;

    你随便想一个1~100的数字,我的目标是以最少的次数猜到该数字。我每次猜测之后,你会说小了、大了或对了。
    假设我从1开始猜测,这样一个一个数字猜测,每次猜测都只能排除一个数字。如果你想的数字是99,我得猜测99次才能猜到!这是简单查找,更准确的说法就是傻找;
    最佳的方法是从这个数字1~100之间取中间数,这样就可以排除一半的数字!我知道1~50都小了,我会去猜测75,你说数字大了,我会去猜测63,你说大了,我会猜测57,这就猜对了;这种查找方法会在7次内猜测出答案,这个7又是如何得来的呢? 一般而言,对于包含n个元素的列表,用而二分查找最多需要log2n(对数:例:2^3=8 <-> log28=3 )步,而简答查找最多需要n步;

代码示例

__Author__ = "ZhiChao Ma"#versions:python3.5.2#使用二分查找法快速从一个数组中查找一个指定元素,并返回该元素的索引值def binary_search(list, item):    #low和high用于跟踪要在其中查找的列表部分    low = 0    high = len(list)-1    while low <= high: #只要范围没有缩小到只包含一个元素        #如果(low + high)不是偶数,python自动向下取整,这里来检查中间元素        mid = (low + high) / 2 # 获取中间数        guess = list[mid]        if guess == item: #找到了元素            return mid        if guess > item: #猜的数字大了            high = mid -1        else:   #猜的数字小了            low = mid + 1    return None #没有指定元素my_list1 = ['zhangsan', 'lisi', 'wangwu',]my_list2 = list(range(10000))print(binary_search(my_list1, 'lisi'))print(binary_search(my_list2, 5002))print(binary_search(my_list2, -110))输出结果:15002None

 

转载于:https://www.cnblogs.com/zhichaoma/p/7483289.html

你可能感兴趣的文章
Linux内核参数设定及内核编译
查看>>
Nagios(四)——监控内部信息
查看>>
5分钟看懂bash shell
查看>>
我的友情链接
查看>>
Silverlight最新动态和未来前景
查看>>
掌握Metro风格,开发靓丽应用
查看>>
体感技术或孕育出体感操作系统
查看>>
2013年4月工作小结 -- 穿越前的回眸
查看>>
在Hyper-V下安装Windows 8
查看>>
Sysbench OLTP 性能测试: MySQL-5.6 vs. MariaDB-10.0
查看>>
简明Linux命令行笔记:gzip
查看>>
SQL Server误区30日谈-Day20-破坏日志备份链之后,需要一个完整备份来重新开始日志链...
查看>>
对于拷贝构造函数和赋值构造函数的理解
查看>>
TortoiseSVN 统计功能
查看>>
SQLite语法
查看>>
HTML5 VIDEO标签播放事件流水
查看>>
【深入理解计算机系统】_2_计算机系统中的信息表示
查看>>
虚拟机中的Ubuntu12.04网络配置
查看>>
Subversion backup and restore
查看>>
[CSS]为什么不推荐在CSS中使用ID选择器
查看>>