0
点赞
收藏
分享

微信扫一扫

散列函数 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.链接法

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

举个例子

散列函数 Hash_散列函数

参数

含义

ASL

平均查找长度

散列存储 散列查找

散列函数 Hash_散列表_02

上图案例使用散列函数为: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

散列函数 Hash_散列表_03


若再存储一个关键字 K=13,则散列地址为 h(13) = 13%5 = 3

发现下标为3的单元已被占用,此时发生了冲突

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

冲突的影响因素

1. 装填因子 α

α = n/m

n: 原散列表已存入的数

m: 原散列表空间大小

α 越小,空闲空间比例越大,发生冲突的可能性越小

散列函数 Hash_散列函数_04

2. 散列函数

散列函数选择恰当会使散列地址尽可能均匀的分散到散列空间,否则会集中于某一区域,增大冲突的发生

散列函数 Hash_散列函数_05

散列函数应用

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

散列查找总结

优点:

插入和查找的速度相当快

缺点:

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

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


举报

相关推荐

0 条评论