数据结构和算法之美_18_散列表

散列表

散列表是一种基于数组按下标随机访问特性的数据结构。因此说散列表是数组的扩展,是由数组演变而来。

散列思想

用散列表存储数据使用的是散列思想。我们把需要存储到数组里面的元素称为键(key)或者关键字。把映射元素和存储位置的方法称为哈希函数,将哈希函数计算的值称为哈希值(散列值)。哈希值即映射后的数组下标。散列思想即将通过哈希函数建立关键字和其存储下标的映射关系。

散列冲突

散列冲突指不同关键字经过哈希函数后计算的哈希值相同:
key1 ≠ key2,但是hash(key1) = hash(key2)

如何构造散列函数

散列函数设计的基本要求:
1 散列函数计算得到的散列值是一个非负整数;
2 如果 key1 = key2,那 hash(key1) == hash(key2);
3 如果 key1 ≠ key2,那 hash(key1) ≠ hash(key2)。

业界著名的哈希算法

MD5 、CRC 、 SHA

如何避免散列冲突

常用的避免散列冲突的方法有开放定址法(open addressing)和链表法(chaining)
开放寻址法:开放寻址法的思想是如果出现了散列冲突,我们重新探测一个空闲地址。重新探测空闲地址一个简单的方法是线性探测(Linear probing)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值