散列函数 Hash

概念

Hash: 一般译作散列杂凑,或音译为哈希
常用的hash算法:
  • MD4:基于32位操作系统实现。
  • MD5:速度比MD4慢一点,但更安全,在抗分析和抗差分方面表现更好。
  • SHA-1 :抗穷举(brute-force)性更好,SHA-1 设计时基于和MD4相同原理,并且模仿了该算法
  • 其他

散列函数

1.除留余数法 h(K) = K%m

m>n : 素数 (散列表长度)m>n(带散列的数据表长)

参数含义
K关键字
m散列表的长度
n带散列的数据表长

2. 直接定址法 h(k) = k+e

这样散列地址就是关键字本身,没有冲突发生,若有冲突,则表明关键字错误。

参数含义
K关键字
e某个数值常量
解决冲突的方法
1.线性探测法

方法: 从发生冲突的地方一次查找下一个单元,直到找到一个空闲单元,或探查完所有单元为止。

2.链接法

散列表中每个单元存放相应每个单链表的表头结点,单链表的结点动态分配产生,将发生冲突的结点用单链表连接起来。

举个例子在这里插入图片描述
参数含义
ASL平均查找长度

散列存储 散列查找在这里插入图片描述

上图案例使用散列函数为:h(K)=K%5

参数含义
K:代查找关键字
h(K):散列函数
g:散列地址(宿主空间下标值)
散列表散列存储的数组

举个例子
一个集合s={18, 75, 62},散列表 表长为5,散列函数 h(K)=K%5;
h(18) = 18%5 = 3
h(75) = 75%5 = 0
h(62) = 62%5 = 2
在这里插入图片描述
若再存储一个关键字 K=13,则散列地址为 h(13) = 13%5 = 3
发现下标为3的单元已被占用,此时发生了冲突

同义词: 不同关键字,具有相同散列地址
同义词冲突: 两个关键字的散列地址相同

冲突的影响因素

1. 装填因子 α
α = n/m
n: 原散列表已存入的数
m: 原散列表空间大小
α 越小,空闲空间比例越大,发生冲突的可能性越小
在这里插入图片描述

2. 散列函数
散列函数选择恰当会使散列地址尽可能均匀的分散到散列空间,否则会集中于某一区域,增大冲突的发生
在这里插入图片描述

散列函数应用

1. 错误矫正
2. 语音识别
3. 信息安全
  • 文件校验
  • 数字签名
  • 鉴权协议

散列查找总结

优点:

插入和查找的速度相当快

缺点:

  1. 计算散列地址需要花费时间
  2. 在散列表中体现不出数据元素之间的逻辑关系
  3. 占用存储空间多

参考:
https://www.bilibili.com/video/BV1g4411H7Py
https://baike.baidu.com/item/Hash/390310

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有勇气的牛排

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值