数据结构与算法之美-哈希算法-极客时间学习笔记

‘Hash'音译是’哈希‘,意译是’散列‘。哈希算法不是仅仅应用于我们常用结构哈希表中,哈希算法是一个更加广泛的概念。将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。这里注意任意长度,因为哈希表中通常是把长的变短,但也可以把短的变长。

哈希算法理论上应该满足下列要求:

  • 从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法);
  • 对输入数据非常敏感,哪怕原始数据只修改了一个 Bit,最后得到的哈希值也大不相同;
  • 散列冲突的概率要很小,对于不同的原始数据,哈希值相同的概率非常小;
  • 哈希算法的执行效率要尽量高效,针对较长的文本,也能快速地计算出哈希值。

哈希算法的用途可以粗略分为下面几类:

1、安全加密

安全加密主要是利用第一个特点不能反向推导,用户输入明文,转化后验证和后台存储的都是密文。这样即使密文被盗也无法破解。另一个就是散列冲突概率要小,是防止密文被暴力破解,用穷举方式去尝试得到相同密文。这里涉及到密码学的一个悖论,越是难以破解的密码,对用户也越难记,对加密算法也越复杂难于计算。

2、唯一标识/数据校验

文件对于用户层面是一个个不同名字的文件,如果出现重名,我们需要打开文件进行比对。而对于计算机,文件是一个个二进制文件,逐个比对太过繁琐。所以可以选取文件其中片段计算散列值,通过散列值来进行快速比较,判断文件是否相同。最普遍的就是网络下载,防止下载出错或者源文件被篡改,会提供一个哈希值给用户来比对。利用的是哈希算法对数据敏感,即使改变稍稍也会产生大不相同的哈希值。

3、散列函数

散列表的散列函数也是典型应用之一,此处散列冲突问题不是首要考虑的。毕竟可以说对于散列表的数据越来越多,散列冲突是必然的,而且有相应的开放寻址法和链表法可以解决。这里的散列算法更加注重运算速度及散列值的分布均匀。

4、负载均衡/数据分片/分布式存储

将IP地址计算哈希值,再与服务器列表的大小取模运算,使得每次都会得到同样的服务器进行响应。其他的类似,都是通过哈希计算后再与资源大小做取模,得到具体数据对应的服务器。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值