软考28-上午题-【数据结构】-哈希表和堆

一、哈希表

将关键字作为自变量,使用哈希函数H(key),得到该记录的存储地址

这一映射过程,称为哈希造表、散列;所得的存储位置 = 哈希地址、散列地址。

1-1、冲突的定义

两个关键字K1和K2,K1 != K2,,但是,H(K1) = H(K2)。(即,K1和K2的存储位置相同)

此时,K1,K2是同义词

冲突是不可避免的,但是应该尽量减少。

减少冲突:

哈希函数,尽可能均匀的把关键字映射到存储区的各个存储单元。

尽可能的使关键字的所有组成部分都能起作用

1-2、哈希函数的构造方法——除留余数法

若是有n个元素,m取:接近n但是不大于n的质数

比如有11个元素,地址为 0 1 2 3 4 5 6 7 8 9 10,所以m = 11

1-3、处理冲突的方法

1、开放地址法

常见的增量序列有3种:

线性探测法示例:

线性探测法,就是第i个位置冲突了,就看第i+1个位置,要是还冲突,就看第i+2个位置。

聚集现象:

线性探测法可能使第i个哈希地址的同义词存入第i+1 个哈希地址,这样本应存入第i+1个哈希地址的元素变成了第i+2 个哈希地址元素的同义词,.....,因此,可能出现很多元素在相邻的哈希地址上“聚集”起来的现象,大大降低了查找效率。

2、链地址法(拉链法)

示例:

1-4、哈希表的查找

在查找过程中需要和给定值进行比较的关键字的个数取决于下列3个因素:

  • 哈希函数
  • 处理冲突的方法
  • 哈希表的装填因子(哈希表的装满程度

1-4-1、装填因子

一般情况下,冲突处理方法相同的哈希表,其平均查找长度依赖于哈希表的装填因子。哈希表的装填因子定义为:

a标志着哈希表的装满程度

直观地看,a 越小(装的少),发生冲突的可能性就越小;反之,a 越大(装的多),表中已填入的记录越多,再填记录时,发生冲突的可能性就越大,则查找时,给定值需与之进行比较的关键字的个数也就越多。

1-5、真题

真题1:

真题2:

真题3:

哈希表是动态查找表,可以添加、删除元素。 

真题4:

 真题5:

真题6:

真题7:

二、堆

2-1、小顶堆

2-2、大顶堆

示例:

 

2-2-1、大根堆的建立

示例:为序列 (55,60,40,10,80,65,15,5,75)建立初始大根堆的过程:

当左子树、右子树都大于根节点的时候,选择最大的子节点交换。

当根节点交换后,要看交换下去的子节点,会不会影响它的子树。

2-3、真题

真题1:

真题2:

 真题3:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值