查找与排序-1

查找表

概念

  1. 查找表
    用于查找的数据元素集合称为查找表。查找表由同一类型的数据元素构成。
  2. 查找
    ① 在数据元素集合中查找满足某种条件的数据元素的过程为查找;
    ② 最简单且最常用的查找条件是关键字值等于某个给定值;
    ③ 按关键字查找,查找结果唯一;按次关键字查找,结果可能是多个记录,结果可能不唯一。

基本查找技术

顺序查找

  1. 基本思想
    将查找表作为一个线性表,可以是顺序表,也可以是链表,依次用查找条件中给定的值与查找表中数据元素的关键字值进行比较,若某个记录的关键字值与给定值相等,则查找成功,返回该记录的存储位置,反之,若一直到最后一个记录都不相等,则查找失败。

折半查找

  1. 前提条件:有序的顺序存储查找表。
  2. 基本思想
    首先以整个查找表作为查找范围,用查找条件中给定值k与中值比较,然后一步步缩小范围。

hash表技术

概念

  1. 基本思想
    将记录的关键字与它的存储位置建立一个确定的关系,使每个关键字和一个确定的存储位置对应,从而在查找时,只需要根据对应的关系计算出给定的关键字值k对应的H值,就可以快速确定存储位置。
  2. hash函数
    将记录的关键字值与记录的存储位置对应起来的关系H称为hash函数,H的结果称为Hash地址。
  3. Hash表
    根据Hash函数建立的表。以记录的关键字值为自变量,根据Hash函数,计算出对应的hash地址,并存储该记录的内容。
  4. 冲突
    在实际使用中,可能出现关键字值不同但计算出hash地址相同情况,就会产生冲突。

hash函数的构造方法

  1. hash函数的设计
    ①尽量使各关键字均匀分布在hash表中,即hash码的均匀性好。
    ② hash函数的计算尽可能简单。
  2. hash函数构造方法
    ①直接定值法:
    取关键字或关键字的某个线性函数为hash地址。
    在这里插入图片描述
    ②质数取余法
    取关键字被某个不大于Hash表表长n的质数m整除后所得余数为Hash地址。
    在这里插入图片描述
    此法计算简单,适用范围大,但是整数m的选择很重要,如果选择不当,会产生较多同义词,使Hash表中有较多的冲突。
    ③截断法
    选取与关键字对应的数字串中的一段(一般选低位数)作为该关键字的Hash码。
    ④平方取中法
    取关键字平方后的中间几位为Hash地址。由于平方后的中间几位数与原关键字的每一位数字都相关,只要原关键字的分布是随机的,以平方后的中间几位数作为哈希地址一定也是随机分布。
    ⑤折叠法
    把关键字折叠成位数相同的几部分,然后取这几部分的叠加作为Hash地址。在关键字位数较多,且每一位上数字的分布基本均匀时,采用折叠法,得到的Hash地址比较均匀。

冲突处理方法

  1. 开放定址法
    当发生冲突时,在冲突位置的前后附近寻找可以存放记录的空闲单元。用此法解决冲突,要产生一个探测序列,沿着此序列去寻找可以存放记录的空闲单元。最简单的探测序列产生方法是进行线性探测,即当发生冲突时,从发生冲突的存储位置的下一个存储位置开始依次顺序探测空闲单元。
    缺点:二次聚集现象
  2. 链地址法
    将所有关键字是同义词的记录链接成一个线性链表,将其链头链接在由哈希函数确定的哈希地址所指示的存储单元中。
  3. 再哈希法
    当发生冲突时,用另一个哈希函数再计算另一个哈希地址,如果再发生冲突,再使用另一个哈希函数,直至不发生冲突为止。这种方法要求预先要设置一个哈希函数的序列。
  4. 溢出区法
    除基本的存储区外(称为基本表),另外建立一个公共溢出区(称为溢出表),当发生冲突时,记录可以存入这个公共溢出区。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值