第8章 查找(2)

8.4 哈希表

如果能构造一个查找表,使记录的存放位置与记录的关键码之间存在某种对应关系,则可以直接由记录的关键码得到记录的存放位置,则查找可以很快完成,这样查找的效率将得到极大的提高。哈希表(Hash Table)就是这样一种查找表,记录的关键码与存放位置之间的映射函数就是哈希函数。因此,哈希表就是通过哈希函数来确定记录存放位置的一种数据结构。

8.4.1 哈希表的基本概念

哈希表也叫散列表,其构造方法是:对于n个记录,设置一个长度为m(m>=n)地址连续的查找表,通过一个函数H,将每个记录的关键码映射为查找表中的一个单元的地址,并把该记录存放在该单元中。这样的查找表就是哈希表,函数H就是哈希函数,它实际是记录的关键码到内存单元的映射,因此,哈希函数的值称为哈希地址。从哈希表的构造方法可知,构造哈希表时一定要使用记录的主关键码,不能使用次关键码。

存在这样的问题,对于两个不同的关键码ki和kj(i!=j),有H(di)=H(dj),这种情况称为哈希冲突。

解决哈希冲突的方法有很多,其基本思想是:当发生哈希冲突时,通过哈希冲突函数来产生一个新的哈希地址,使得原为同义词的记录的哈希地址不同,哈希冲突函数产生的哈希地址仍有可能发生冲突,此时再使用新的哈希冲突函数得到新的哈希地址,知道不存在哈希冲突为止。

一旦哈希表建立,在哈希表中进行查找的方法就是以要查找的记录的关键码为自变量,使得哈希函数得到一个哈希地址,比较要查找记录的关键码与哈希地址中的记录的关键码,如果两者相等,则查找成功;否则使用哈希冲突函数得到一个新的哈希地址,再比较两者的关键码,以此类推。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值