哈希函数

有一对 哈希元 a,b
我们可以用下面式子造出哈希函数来
在这里插入图片描述
磁力链接总共有16位,每一位数值范围是0-f,这就是所谓哈希码,
即哈希函数的返回值。

百度百科:哈希码具体是什么?
答:hashCode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值

能表示的数值范围是????????:每位都是 2的16次方 ,共有16位,所以16个2的16次方。
在这里插入图片描述
哈希函数的性质:
哈希函数的输入域可以是非常大的范围,比如,任意一个字符串,但是输出域是固定的范围(一定位数的bit),假设为S(虽然S可能会很大,但是和输入域没法比),并具有如下性质:

  1. 典型的哈希函数都有无限的输入值域
  2. 当给哈希函数传入相同的输入值时,返回值一样。
  3. 当给哈希函数传入不同的输入值时,返回值可能一样,也可能不一样,这时当然的,因为输出域统一是S,所以会有不同的输入值对应在S中的一个元素上(这种情况称为 哈希冲突)。
  4. 最重要的性质是很多不同的输入值所得到的返回值会均匀分布在S上。这是评价一个哈希函数优劣的关键不同输入值所得到的所有返回值越均匀地分布在S上,哈希函数越优秀,并且这种均匀分布与输入值出现的规律无关。比如,“aaa1”、“aaa2”、“aaa3”三个输入值比较类似,但经过优秀的哈希函数计算后得到的结果应该相差非常大。
  5. 哈希函数的离散性:举个例子就明白了,输入域是0-98的范围输出域是0 1 2

给我99个不同的样本,依次计算不同的输出 0 1 2这三种值
基本上在算完之后,可以说:
有33个输入分布在0位置
有33个输入分布在1位置
有33个输入分布在2位置

前3点性质是哈希函数的基础,第4点是评价一个哈希函数优劣的关键,不同输入值所得到的所有返回值越均匀地分布在S上,哈希函数越优秀,并且这种均匀分布与输入值出现的规律无关。

比如,“aaa1”、“aaa2”、“aaa3”三个输入值比较类似,但经过优秀的哈希函数计算后得到的结果应该相差非常大。

比如在一个房间里面。砸了一瓶香水,这些香水的分子,会固定不动。而哈希函数就是彻底把它打乱的过程。

我们把每一个香水分子的运动轨迹通过哈希函数来确定,经过哈希函数计算后,香水分子会均匀分布在整个房间内!
在这里插入图片描述

哈希函数不是随机函数,其没有任何随机的成分,样本一旦固定,返回值一定是确定的!

哈希函数会打乱输入规律。

经哈希函数 计算完的返回值,和你原始的输入规律是没有关系的!
在这里插入图片描述
在这里插入图片描述
且在0-1上也均匀分布。
比如,
在这里插入图片描述
若是在0-98上均匀分布,那么在0-2上也是均匀分布

面试官是不会让我们实现哈希函数的,因为哈希函数算法很多

一个十六进制的字符等于4个二进制字节 16=2^4
假设一个哈希函数得到2的64次方的范围
所以需要2的8次方乘以2的16次方
在这里插入图片描述
我们把得到的结果批两段,
在这里插入图片描述
在这里插入图片描述
h3相对h1和h2是独立的
在这里插入图片描述
我们可以通过改变系数,做出1000个哈希函数
0位置得到0-f的均匀分布 和其他位置得到0-f的均匀分布是互相独立的
所以,我们通过各个位置的组合 ,本身就可以得到多个哈希函数
在这里插入图片描述

哈希函数极其重要,甚至比哈希表还重要
因为哈希表的实现一定要知道哈希函数的性质!

初级6刚开始

猜你喜欢

转载自blog.csdn.net/Mr_zhang66/article/details/109374701