Hash表简介

基本原理:

哈希表(散列表)的基本原理:
使用一个下标范围比较大的数组来存储元素,一般通过设计一个函数(哈希函数,即散列函数),使得每个元素的关键字都与一个函数值(即数组下标)相对应,然后用该数组单元来存储对应元素。

函数构造:

无定式,方法很多
最常见的方法:除余法
H(k ) = k mod p (p一般选取适当大的素数)
常用的经典字符串Hash以后介绍

冲突:

由于不能够保证每个元素的关键字与函数值是一一对应的,因此很有可能出现如下情况:
“对于不同的元素关键字,Hash函数计算出了相同的函数值”,这就是产生了所谓的“冲突”。
换句话说,就是Hash函数把不同的元素分在了相同的下标单元。

冲突解决:

方法很多~

常用方法:线性探测再散列技术
即:当 h(k)位置已经存储有元素的时候,依次探查 (h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中, S为 数组长度。
特别地,如果将数组扫描一圈仍未发现空单元,则说明哈希表已满,这会带来麻烦,但是,该情况完全可以通过扩大数组范围来避免。 

基本操作:

Hash表初始化(0或-1或其它)
哈希函数运算
插入元素(包含冲突解决)
定位(需考虑可能冲突的情况)

总结:

Hash函数评价标准:
低冲突率
易于编码
Hash函数特点:

优点:数据存储和查找效率高
(几乎是常数时间)

缺点:消耗较多内存(内存很便宜哪~)

Hash主要应用:
查找元素是否属于集合
搜索中的状态表示

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值