散列表概念

本文详细介绍了散列表的概念,包括直接寻址表和散列表的构造。在散列表中,通过散列函数解决冲突是关键,文章讨论了链接法、散列法(除法、乘法和全域散列法)以及开放寻址法(线性、二次和双重散列)。完全散列提供了一种在最坏情况下查找时间复杂度为O(1)的方法。
摘要由CSDN通过智能技术生成

@散列表

hashtable,关键问题在于查找的时间优化和解决冲突。

1. 直接寻址表

index和key值直接相关,存储全域U

2. 散列表

即利用散列函数h由关键字k计算出槽的位置,采用函数h将全域U映射到散列表的槽位上。散列,顾名思义,希望h尽可能随机混杂,最大程度减少冲突。但由于h(k)的种数m<U, 所以一定会有冲突的情况产生。

2.1 解决冲突的方法
2.1.1 链接法

在链接法中,把散列到同一槽的所有元素都放在一个链表中。槽j中有一个指针,指向存储所有到j的元素的表头。其性能主要取决于散列函数。好的散列函数应满足简单均匀散列假设,即每个关键字都被等可能的散列到m个槽位中的任何一个。

2.2 散列法
2.2.1 除法散列法

h ( k ) = k   m o d   m , h(k)=k\ mod\ m, h(k)=k mod m,
其中 m m m应取一些不太接近2的整数幂的素数

2.2.2 乘法散列法

h ( k ) = f l o o r ( m ( k A   m o d   1 ) ) , h(k) = floor(m(kA\ mod\ 1)), h(k)=floor(m(kA mod 1)),
其中 f l o o r ( ⋅ ) floor(\cdot) floor()表示向下取整,先用k乘上常数A(0<A<1),提取小数部分,再乘上m,向下取整。m一般取2的幂次,比较好实现。而A有文献表明取 ( 5 − 1 ) / 2 (\sqrt{5}-1)/2 (5 1)/2是个比较好的值。

2.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值