2. 余数:原来取余操作本身就是个哈希函数

余数总是在一个固定的范围内

同余定理:如果对a和b整除c,所得的余数相同,那么a和b对模c同余。

余数可以用来区分「奇数」和「偶数」。如果数字a除以2,余数为1则为「奇数」,余数为0则为「偶数」。

这么说来,同余定理是用来分类的

那么在计算机中,用到了余数吗?其实哈希表(Hash)就是应用之一,也成为散列表。简单来说,就是将任意长度的输入,通过哈希算法,变成固定长度的输出。这个过程是不是跟上述求余的过程很像?

比如,在你想快速读写100万条数据记录的时候,要达到高速读写,理想的情况下,就是在内存中开辟一个连续的空间来存储这些数据,但是由于现实原因,没有这么大的连续空间来实现,那怎么办呢?

我们可以考虑下能不能使用若干个较小连续的空间,而在每个连续空间中存储一定数量的数据。比如我们找到了100个连续的空间,这些连续空间是彼此分隔开的。并且每个连续空间可以存储1万条数据连续存放,那么我们可以用余数来设计一个散列表,实现哈希结构。

公式:「f(x) = x mod size」
x是被转换的数值,size是连续存储空间的大小,mod是求余操作。
通过余数,我们就可以将任何数,转换到有限范围内的一个数值,来确定将数据放在何处。

比如,f(x) = x mod 100;
数据1和100,求余最后余数都是1,那么数据1和100都放入第1个连续空间中。

你可能感兴趣的:(2. 余数:原来取余操作本身就是个哈希函数)