哈希函数与哈希表
哈希函数:一般就是用户传入一个数据,可以是字符串也可以是别的类型。然后该数据作为参数传入哈希函数中,哈希函数会返回一串长度为16或者32,每一个位置都是16进制,可以存放0-9或者是A-F的 字符串。 所以他可以得到的值有16^16个,是非常庞大的。MD5加密也是应用这个,他形成的是16位的16进制字符串。
他有几个性质:
① 输入域是无限的 比如说我输入的是一个字符串,那理论上他可以是无限大的,所以输入时无限的
② 输出是有限的 他已经设定好了范围就是在0-16^16的范围
③多次输入同一个参数,返回的输出也是同一个返回值
④输入不同的参数,最后的返回值可能是相同的,因为输入时无线的,但是输出有限。当输入数据远大于输出范围数据的时候,一定会出现不同输入,相同输出的情况。这种情况叫做碰撞。
⑤ 当输入数据量很大的时候,数据的输出是均匀的,就是他输出的0-16^16的范围中的每一个数据都是差不多的(离散型)
基于这个性质,他会有很多的应用,我们也可以概括出几个特征。
① 他的输出是与数据本身的特性无关的,比如我输入的数据是 liming liming1 liming2 看起来这三个数据的相关性很高。但是在进行哈希计算的时候,他们之间输出的可能差距很大,毫无关联。
一道例题:快速设计出100个哈希函数
首先哈希函数需要满足上边的五点性质,对我们来说,让我们从0创造一个这样的函数难度是很大。但是不妨让我们换个