数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找

文章目录

  • 查找的基本概念
    • 总览
    • 基本概念
    • 对查找表的常见操作
    • 查找算法的评价指标
    • 小结
  • 顺序查找
    • 总览
    • 顺序查找的算法思想
    • 顺序查找的实现
    • 顺序查找的实现(哨兵)
    • 查找效率分析
    • 顺序查找的优化(有序表)
    • 用查找判定树分析ASL
    • 顺序查找的优化(被查概率不相等)
    • 小结
  • 折半查找
    • 总览
    • 折半查找的算法思想(二分查找)
      • 查找成功
      • 查找失败
    • 折半查找的实现
    • 查找效率分析
    • 折半查找判定树的构造
    • 折半查找的效率
    • 小结
    • 拓展思考
  • 分块查找
    • 总览
    • 分块查找的算法思想
    • 用折半查找索引
    • 查找效率分析
    • 小结
    • 拓展思考

查找的基本概念

总览

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第1张图片

基本概念

查找表就是要查找的那堆元素组成的
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第2张图片
此时关键字是学号,因为没有重复的
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第3张图片
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第4张图片

对查找表的常见操作

静态:查找表中 元素个数不会变化
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第5张图片

查找算法的评价指标

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第6张图片
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第7张图片
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第8张图片

小结

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第9张图片

顺序查找

总览

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第10张图片

顺序查找的算法思想

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第11张图片

顺序查找的实现

当i等于表的总长度时,说明找遍了所有的都没有找到,所以此时返回-1,否则就是找到了,返回对应的索引i
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第12张图片

顺序查找的实现(哨兵)

当查找到零号元素时一定符合,此时返回i正好是0,也正好说明没有找到
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第13张图片

查找效率分析

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第14张图片

顺序查找的优化(有序表)

当查找目标小于当前遍历的元素时,意味着查找失败
ASL两个n是最后一个无论是小于还是大于都算查找失败

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第15张图片

用查找判定树分析ASL

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第16张图片

顺序查找的优化(被查概率不相等)

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第17张图片

小结

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第18张图片

折半查找

总览

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第19张图片

折半查找的算法思想(二分查找)

查找成功

比较mid对应的数组元素中的值,此时要查找的值大于该值

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第20张图片
移动low为mid+1,更新mid,再次比较,此时要查找的值小于mid处对应的值
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第21张图片

移动high为mid-1,计算mid,此时mid的值若为小数则向下取整,再次比较,此时查找目标大于mid对应的值
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第22张图片
移动low为mid+1,计算mid,再次比较发现相等

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第23张图片

查找失败

计算mid,比较,发现小于

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第24张图片
移动high为mid-1,计算mid,再次比较,发现小于
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第25张图片
移动high为mid-1,再次计算mid,比较,发现大于
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第26张图片
移动low为mid+1,计算mid,比较,此时大于
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第27张图片
移动low为mid+1,low

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第28张图片

折半查找的实现

链表不具备随机存取的特性

每次循环对应low和high相比上一次不完全一样
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第29张图片

查找效率分析

默认每种失败的情况相等
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第30张图片

折半查找判定树的构造

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第31张图片
节点中的数字代表这是此时这是第几个元素对应查找表的位置
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第32张图片
任何一个节点的左子树和右子树的深度之差都不会超过1
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第33张图片
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第34张图片

折半查找的效率

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第35张图片

小结

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第36张图片

拓展思考

大部分情况下折半查找的速度是比顺序查找的速度更快的
但不是说折半查找的速度一定被顺序查找更快
如下图此时顺序查找第一次即可找到,但折半查找需要多次
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第37张图片
标号依然是第几个元素要出现的位置
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第38张图片

分块查找

总览

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第39张图片

分块查找的算法思想

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第40张图片
将查找目标和索引表中的值作比较,如果小于则可能在该表中的元素所对应的那块区间中,然后再到该区间去挨个比较查找
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第41张图片
当超出该块对应区间范围时,查找失败
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第42张图片

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第43张图片

用折半查找索引

索引表是顺序的。可以用折半去查找对应的索引元素
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第44张图片
此时mid对应的大于查找目标,high移为mid-1
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第45张图片
计算mid,此时mid小于查找目标,low移动为mid+1
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第46张图片
再次计算为mid,发现大于查找目标,high移为mid-1
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第47张图片
此时high小于low
(当low大于high时,要不就是high=mid-1,要不就是low=mid+1,但此时low对应的都是刚好大于查找元素的)

关于high右边一定大于查找目标,low左边一定小于查找目标。这是因为之前mid和low与high的转换机制决定的,因为low的左边都是小于等于原来的mid,而原来的mid又是小于查找目标的。high同理

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第48张图片
查找失败时是low超出索引了

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第49张图片

查找效率分析

查找27时,光折半查找就不止两次,与查找30时对应的折半查找根本不一样
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第50张图片
n=sb
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第51张图片
在这里插入图片描述

小结

数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第52张图片

拓展思考

查找表是顺序表时加入元素和删除元素非常麻烦
数据结构和算法-查找的基本概念和顺序查找与折半查找与分块查找_第53张图片

你可能感兴趣的:(王道数据结构和算法考研笔记,算法,数据结构,数据结构和算法)