哈希函数

hash函数#

hash函数,简单点说,就是输入一个数,输出一个数,输出具有唯一性,输入和输出具有一一映射关系,该函数叫做哈希函数或杂凑函数,输出值叫做哈希值或杂凑值,常见的杂凑算法有:Md5、Sha256、SM3等。

Hash通过Hash函数,将Key值映射为地址,Address = F[key];

无论输入是什么数字格式、文件有多大,输出都是固定长度的比特串。以比特币使用的Sh256算法为例,无论输入是什么数据文件,输出就是256bit。

每个bit就是一位0或者1,256bit就是256个0或者1二进制数字串,用16进制数字表示的话,就是多少位呢?

16等于2的4次方,所以每一位16进制数字可以代表4位bit。那么,256位bit用16进制数字表示,当然是256除以4等于64位。

于是你通常看到的哈希值,就是这样的了:
00740f40257a13bf03b40f54a9fe398c79a664bb21cfa2870ab07888b21eeba8

在学数据结构时,常见的hash函数有:直接定址法、数字分析法、平方取中法、折叠法、随机数法、除留余数法.

直接定值法#

数字分析法#

平方取中法#

折叠法#

随机数法#

除留余数法#

碰撞(冲突)问题#

不管选用何种散列函数,不可避免的都会产生不同Key值对应同一个Hash地址的情况,这种情况叫做哈希冲突。

当冲突发生时,我们需要想办法解决冲突,一般常用的方法有:开放定址法、单独链表法、双散列法、再散列法以及建公共溢出取等方法。

开放定值法#


链表法#

装填因子#

参考#

1、Hash详解
2、《一切皆是映射:代码的本质》哈希算法

作者:Hang Shao

出处:https://www.cnblogs.com/pam-sh/p/15951261.html

版权:本作品采用「知识共享」许可协议进行许可。

声明:欢迎交流! 原文链接 ,如有问题,可邮件(mir_soh@163.com)咨询.

posted @   PamShao  阅读(2114)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
历史上的今天:
2020-03-01 C:数组
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu