算法笔记 11 哈希算法

Posted 珷玞的日常

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法笔记 11 哈希算法相关的知识,希望对你有一定的参考价值。

基础

定义:将任意长度的二进制串映射为固定长度的二进制串,这个映射规则就是哈希算法

哈希值:通过原始数据映射得到的二进制串。

优秀的哈希函数的几点要求:

  1. 从哈希值不能反向推导出原始数据

  2. 对输入数据敏感,原始数据的微弱改变都会使得哈希值很大的变化

  3. 散列冲突概率尽量小

  4. 哈希算法的执行效率尽量高效

为什么哈希算法无法做到零冲突?

哈希算法产生的哈希值的长度是固定并且有限的。比如 MD5,哈希值是固定的 128 位的二进制串,能够表示的数据是有限的,但是我们要哈希的数据是无穷的,必然会存在哈希值相同的情况。

应用场景

1. 安全加密

这应该是哈希算法应用里让人最先想到的。最常用于加密的哈希算法是 MD5 和 SHA。

2. 散列函数

上一个笔记中说到,散列函数是设计一个散列表的关键。不过相对哈希算法的其他应用,散列函数对于算法冲突的要求低很多,只要冲突不是很严重,我们可以通过开放寻址法或链表法解决。

3. 数据校验

平时我们保存电影的时候,BT 种子是一个很常见的选择。BT 下载时,我们是从多个机器上下载电影,这个电影文件可能被分为很多文件块,等所有文件下载完之后,在组装成一个电影。

而在 torrent 文件中,就包含了各个文件块的指纹值(SHA1 的 hash 值),这些文件块一旦遭到篡改,根据要求2 可知,hash 值发生了剧烈变化,这个值和种子文件中的进行对比就可以直到文件块不完整或遭到篡改。

4. 分布式存储

现在互联网上海量的数据和海量的用户,我们为了提高数据的读写能力,都是用分布式来存储数据。但是我们如何决定那个数据放到那个机器上?这就用到了哈希算法。

哈希算法的应用还有很多,以后了解到其他的有趣的应用再记录。





以上是关于算法笔记 11 哈希算法的主要内容,如果未能解决你的问题,请参考以下文章

算法笔记4.2 散列(哈希)

2021-6-11-HashMap面试笔记

2021-6-11-HashMap面试笔记

笔记整理--算法

算法小讲堂之哈希表|散列表|考研笔记

算法笔记