数据结构

符号表

我们使用符号表这个词来描述一张抽象的表格,我们会将信息(值)存储在其中,然后按照指定的键来搜索并获取这些信息。

符号表有时也被称为字典。键就是单词,值就是单词对应的定义,发音和词源。

符号表有时又叫做索引。键就是术语,值就是书中该术语出现的所有页码。
在这里插入图片描述

  1. 无序符号表(HashMap)
  2. 有序符号表(TreeMap)
  3. 哈希表概述

如果所有的键都是小整数,我们可以用一个数组来实现的符号表,将键作为数组的索引,而数组中对应的位置存储键关联的值。

哈希表是这种简单方法的扩展,并且能够处理更加复杂类型的键。我们需要用哈希函数将键转换成数组的索引。

哈希表的核心算法可以分为两步。

用哈希函数将键转换为数组中的一个索引。理想情况下不同的键都能转换成不同的索引值。当然这只是理想情况下,所以我们需要处理两个或者多个键都散列到相同索引值的情况 (哈希碰撞)。

处理碰撞冲突。
a. 开放地址法
线性探测法, 平方探测法, 再散列法…
b. 拉链法

哈希函数
一个优秀的 hash 算法,满足以下特点:

正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。

逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。

输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。

冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。即对于任意两个不同的数据块,其hash值相同的可能性极小;对于一个给定的数据块,找到和它hash值相同的数据块极为困难。

我们可以简单地把哈希函数理解为在模拟随机映射,然后从随机映射的角度去理解哈希函数。

经典的哈希函数

  1. MD4: 128位,MD4已被证明不够安全。
  2. MD5:MD5 已被证明不具备"强抗碰撞性"。
  3. SHA1:SHA-1 已被证明不具"强抗碰撞性"。
  4. SHA2:
  5. SHA3: 相关算法已经被提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值