什么是hash函数

我们再看编程的时候,经常会遇到hash函数,比如布隆过滤器,把我们的值通过多个hash函数得到key,然后映射到一个bit列中;

简单地说,Hashing 是一种数据影射(mapping) 的算法(algorithm),通常用来把一大串不定长度的数据影射到一个固定长度的、较短的数据,这个固定长度的数据称为hashing value (散列值)。举个例子:

例如我们把一个由英文字母组成的任意长度的字串,把每一个字符的ASCII 数值加起来,最后除以256 得到的余数作为hash value,这里输入的字串长度没有限制,输出的数值则必定在0 至255 之间,所以是一个合法的hashing function。

相当于所有长度的英文字符串,通过这个hash函数,必定对应一个0-255的整数,这就造成了会有多个字符串通过hash函数,得到相同的值。这种情况我们称为hash collision (散列冲突),或者简称collision,事实上从一个不定长度的数据影射到一个固定长度的数据,Collision 是无可避免的,我们并不要求完全没有collision,只需把collision 的机会尽量降低便可以了,若果真的要完全没有collision 的话,Hash value 理论上必须与输入的数据长度相同,这样便违背了hash function 的设计目的。
 

你可能感兴趣的:(小知识)