数据结构(顺序查找、二分查找、分块查找)

一、查找

概念:给定一个值K,在含有n个记录的文件中进行搜索,寻找一个关键字值等于k的记录,如找到则输出该记录,否则输出查找不成功的信息。

  • 查找算法的优劣
    • 用比较次数的平均值来评估算法的优劣,称为平均查找长度ASL

二、静态查找表

  • 顺序查找(线性查找),要查找的元素可以是有序的也可以是无序的。
  • 折半查找(二分或对分查找),要查找的元素前提是有序的。
  • 分块查找(索引顺序查找)
  1. 顺序查找:
  • 性能分析:顺序查找平均查找长度为:(n+1)/2,时间效率为O(n)
  • 优点:算法简单、适应面广,对查找表的结构没有要求,无论记录是否按关键字有序排列均可使用。
  • 缺点:在n值较大时,平均查找长度较大,查找效率较低。

2、折半查找:

  • 先给数据排序,形成有序表,把待查数据值与查找范围的中间元素值进行比较,会有以下四种情况出现:
    • 待查找数值与中间元素值相等,则之间返回中间元素值的索引。
    • 或者待查找数值比中间元素值小,则以整个查找范围的前半部分作为新的查找范围,再执行第一步操作。直到找到相等的值。
    • 亦或者待查找数值比中间元素值大,则以整个查找范围的后半部分作为新的查找范围,再执行第一步操作。直到找到相等的值。
    • 如果最后都找不到相等的值,则返回错误提示信息。
  • 折半查找比顺序查找的效率要高,但它要求查找表进行顺序存储并且按关键字有序排列,因此对表进行元素的插入和删除时,需要移动大量的元素,所以折半查找适用于表不易变动,且又经常进行查找的情况。

3、分块查找

  • 又称索引顺序查找,是对顺序查找方法的一种改进,其性能介于顺序查找和折半查找之间。
  • 在分块查找过程中,首先把表分成若干块,每一块中的关键字不一定有序,但块之间是有序的,即后一块的所有记录的关键字均大于前一个块中的最大的关键字,还建立了一个索引表,索引表按关键字有序。
  • 所以分块查找顾明思议就是按照索引表进行二分(折半查找),对所分的快进行顺序查找的一个查找过程。

三、哈希表

概念:是根据关键码值(key value)而直接进行访问的数据结构。由关键码值决定数据的存储地址,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

优点:查找速度极快O(1),查找效率与元素个数n无关。

  • 通常关键码的集合比哈希地址集合大得多,因而经过哈希函数变换后,可能将不同的关键码映射到同一个哈希地址上,这种现象称为冲突。

 

  • 在哈希查找方法中,冲突是不可能避免,只能尽可能减少。
    • 构造好的哈希函数
      • 所选函数尽可能简单,以便提高转换速度
      • 所选函数对关键码计算出的地址,应在哈希地址内集中并大致均匀分布,以减少空间浪费。
    • 制定一个好的解决冲突的方案:
      • 查找时,如果从哈希函数计算出的地址中查不到关键码,则应当依据解决冲突的规则,有规律的查询其它相关的单元。

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值