活动地址:CSDN21天学习挑战赛

折半查找

  • 1.查找算法
    • 基本概念
    • 不同查找算法分类
  • 2. 折半查找
    • 伪代码
    • 算法评价
  • 3. 算法实践(Python)
    • 折半查找
  • 参考

1.查找算法

查找(Searching)是指根据某个给定的值,在表中根据一个关键字查找是否存在和这个关键字有关的数据元素或记录。简单来说,就是在我们定义的数据结构中,查找位于某个位置的数据。查找根据操作方式不同分为静态查找和动态查找两种,前者是仅获取数据不进行其他操作,后者则需要动态改变数据,比如在查找过程中插入新数据,或者删除某个已存在的数据。


基本概念

  • 查找表(Search Table):由同一类型的数据元素构成的集合
  • 查找(Searching):根据给定的某个值,在查找表中确定其一个关键字等于给定值的数据元素
  • 关键字:是数据元素的某个数据项的值,能够标识列表中的一个或一组数据元素。如果一个关键字能够唯一标识列表中的一个数据元素,则称其为主关键字,否则称为次关键字。当数据元素中仅有一个数据项时,数据元素的值就是关键字。
  • 主键(Primary Key):可唯一地标识某个数据元素或记录的关键字列表,是由同一类型的数据元素或记录构成的集合,可以使用任意数据结构实现
  • 平均查找长度:为了确定数据元素在列表中的位置,需要将关键字个数的期望值与指定值进行比较,这个期望值被称为查找算法在查找成功时的平均查找长度。如果列表的长度为n,查找成功时的平均查找长度为:
    ASL=P1C1+P2C2+...+PnCn=∑i=1nPiCiASL = P_1C_1 + P_2C_2 + ... +P_nC_n = \sum\limits_{i=1}^n P_iC_iASL=P1​C1​+P2​C2​+...+Pn​Cn​=i=1∑n​Pi​Ci​

不同查找算法分类

顺序查找、二分查找(折半查找)、插值查找、斐波那契查找、树表查找、分块查找和哈希查找


2. 折半查找

  • 输入
    n个数的有序序列,以数组为例,默认升序。
    待查找元素key。

  • 输出
    查找成功:返回元素所在位置的编号。
    查找失败:返回-1或自定义失败标识。

算法说明
算法的核心思想是不断的缩小搜索的范围,每次取区间的中心来进行比较,会有三种情况发生:

  1. 与key相等:直接返回对应的位置(对于有重复元素的情况,会在其他子专栏中说明)。
  2. 比key大:由于元素有序,要查找的元素一定在左侧(如有),于是搜索区间变为左一半。
  3. 比key小:由于元素有序,要查找的元素一定在右侧(如有),于是搜索区间变为右一半。

于是,只要不断的重复取中间比较和指定新的搜索区间这两个步骤,直到区间的两个端点已经重合(代表搜索完毕)或者找到元素时为止。

伪代码

left = 1
right = A.length
while left <= rightmid = (left + right) / 2if A[mid] == keyreturn midelse if A[mid] > keyright = mid - 1elseleft = mid + 1
return -1

算法评价

  • 时间复杂度:O(log⁡2n)O(\log_2 n)O(log2​n),
  • 空间复杂度:O(1)O(1)O(1)

3. 算法实践(Python)

折半查找

def halffind(a,c,low,high): mid=(low+high)//2if c == a[mid]:return mid+1elif low>high:return Falseelif c>a[mid]:return halffind(a,c,low+1,high)else:return halffind(a,c,low,high-1)if __name__ == "__main__":a=[1, 6, 9, 15, 26, 38, 49, 57]   #测试案例c=int(input('Please enter the number you want to find:'))if c not in a:print('当前输入元素不在列表中!')else:print('The position of the requried number in the list is:')answer=halffind(a,c,0,len(a)-1)  print(answer)

参考

1.一文学懂经典算法系列之:折半查找
2.张清云.《Python数据结构学习笔记》(ISBN:9787113269999)


@夏日回音

经典算法 之 折半查找 python实现相关推荐

  1. 经典算法之折半查找法

    活动地址:21天学习挑战赛 目录 一. 算法 概述 算法过程 二.代码实践 三.复杂度分析 时间复杂度 空间复杂度 四.优缺点分析 优点 缺点 一. 算法 概述 折半查找( Binary Search ...

  2. 经典算法之折半查找(BinarySearch)

    活动地址:CSDN21天学习挑战赛 算法 三分学,七分练,每天进步一点点. 文章目录 1. 概念 2. 伪代码 3. 代码实现 3.1 Java版本 3.2 Python版本 4. 算法效率分析 4. ...

  3. 21天打卡挑战 - 经典算法之折半查找

    ​​CSDN打卡活动产出 ​ 活动地址:CSDN21天学习挑战赛 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩:迟一天就多一天平庸的困扰.各位小伙伴,如果您: 想系统/深入学习某技术知识点- ...

  4. 【学习挑战赛】经典算法之折半查找

    活动地址:CSDN21天学习挑战赛 ✅作者简介:C/C++领域新星创作者,为C++和java奋斗中 ✨个人社区:微凉秋意社区

  5. 经典算法之折半插入排序法

    活动地址:21天学习挑战赛 文章目录 一.算法 1.算法概述 2.算法步骤 二.算法实践 1.Java代码 2.执行结果 三.复杂度分析 1.时间复杂度 2.空间复杂度 一.算法 1.算法概述 直接插 ...

  6. 折半查找python实现

    折半查找python实现 折半查找是常用的查找方法(在按大小顺序排列中的数组或者列表中更是如此),与传统的顺序查找相比,它查找的效率更高. 算法思想 算法的思想很直接,也就是先把第一个和最后一个作为作 ...

  7. 二分查找算法(折半查找算法)

    二分查找算法(折半查找算法) 二分查找又称折半查找.二分搜索.折半搜索等,是在分治算法基础上设计出来的查找算法,对应的时间复杂度为O(logn). 二分查找算法仅适用于有序序列,它只能用在升序序列或者 ...

  8. 数据结构之查找算法:折半查找

    查找算法:折半查找 思维导图: 算法思想: 代码实现: 判定树: 折半查找判定树的构造: 顺序查找与折半查找对比: 思维导图: 算法思想: 代码实现: typedef struct {int *ele ...

  9. 查找算法:折半查找算法实现及分析

    折半查找算法介绍 折半查找(Binary Search)又称为二分查找.它的前提是线性表中的记录必须是关键码有序(通常从小到大有序),线性表必须采用顺序存储.从算法名称可以看出算法的思路,先取有序序列 ...

最新文章

  1. 第三部分:MFC中控件的样式
  2. 开发75条(写的不错) 选择自 churujianghu 的 Blog
  3. boost::mp11::mp_remove_if相关用法的测试程序
  4. 一个“登录框“引发的安全问题
  5. Xamarin中国技术社区及BXUG官网上线啦
  6. c#调用带有安全认证的java webservice
  7. java课程设计——租房管理系统
  8. 计算机信息处理技术的易混淆知识点,【考试经验】计算机等级考试二级VisualFoxPro笔试易混淆的知识点...
  9. 社区征稿 | 价值3200RMB的DTCC门票免费送!
  10. iPad如何访问共享文件夹
  11. 读《我没偷懒 - 读写记忆困难儿童案例》
  12. 设置手机最小宽度为1000,无限重启怎么办
  13. 选择4G工业路由器需要注意的细节
  14. pandas.Series.str.extract 正则提取数据
  15. Virtual Reality 那些事
  16. tableview概述
  17. VS2010中使用zxing识别图片二维码
  18. [教学管理] 学生作业及日志查收的纯MySQL解决方案
  19. 解决出现Failed to connect to 127.0.0.1 port XXXX: Connection refused
  20. 基于TI C2540的OSAL UART流程分析

热门文章

  1. c语言中13至20怎么表示,12313交管
  2. Kotlin的协程,延时、超时(7秒后超时,并中断执行的任务)
  3. Oracle笔记4(Fundamentals II)
  4. IOS-Swift面试相关基础
  5. 用 C 语言编写 Windows 服务程序的五个步骤
  6. 解决centos7虚拟机中网络配置问题
  7. linux镜像默认密码,OpenStack官方镜像和密码
  8. 淘宝核心系统团队介绍
  9. WorkFlowy beta for Mac(跨平台同步笔记工具)
  10. 备份方法scp rsync,inotifywait