0
点赞
收藏
分享

微信扫一扫

哈希算法精简解释


参考:​​https://www.zhihu.com/question/20820286​​

楼主解释:

比如这里有一万首歌,给你一首新的歌X,要求你确认这首歌是否在那一万首歌之内。

无疑,将一万首歌一个一个比对非常慢。但如果存在一种方式,能将一万首歌的每首数据浓缩到一个数字(称为哈希码)中,于是得到一万个数字,那么用同样的算法计算新的歌X的编码,看看歌X的编码是否在之前那一万个数字中,就能知道歌X是否在那一万首歌中。

作为例子,如果要你组织那一万首歌,一个简单的哈希算法就是让歌曲所占硬盘的字节数作为哈希码。这样的话,你可以让一万首歌“按照大小排序”,然后遇到一首新的歌,只要看看新的歌的字节数是否和已有的一万首歌中的某一首的字节数相同,就知道新的歌是否在那一万首歌之内了。

当然这个简单的哈希算法很容易出现两者同样大小的歌曲,这就是发送了碰撞。而好的哈希算法发生碰撞的几率非常小。

【提取歌曲特征,也是转换为数字。利用特征进行对比!】
 

下面还有一个补充的:

我觉得你的例子很好,但是在阐释的时候,没有表达精确。

我这里想做个补充:不妨把歌曲数目缩短到10首,他们的大小分布在了1M到18M,而且各不相等。

这个时候我们可以构造出一个数量为20的空间,这20个空间的门牌号分别为1-20。

我们可以把每首歌根据其物理大小分别放到1-20个空间里(比如《菊花台》这首歌占存储13M,它就被放在门牌为13的空间里)。

这个时候我们有另一首歌《听海》,它占存储14M,我们想知道它是否存在于我们已有的10首歌曲里,我们就直接访问门牌为14的空间,如果发现里面是空的,则可以判断我们已有的10首歌曲里没有《听海》,如果门牌为14的空间非空,且恰恰就是《听海》,则找到。

如果14号空间非空,但是存储着《天空之城》,根据通常的HASH算法,会接着询问下一个空间,并进行比较与判断......

举报

相关推荐

0 条评论