• Home
  • Archives
  • About
  • Github
  • zh


数学篇 - 余数与哈希函数(笔记)

余数

例1:

今天是星期三,你想知道 50 天之后是星期几,那你可以这样算,拿 50 除以 7(因为一个星期有 7 天),然后余 1,最后在今天的基础上加一天,这样你就能知道 50 天之后是星期四了

例2:

如果你要展示 1123 条数据,每页 10 条,那该怎么计算总共的页数呢?我想你肯定是拿 1123 除以 10,最后得到商是 112,余数是 3,所以你的总页数就是 112+1=113,而最后的余数就是多出来,凑不够一页的数据。

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

同余定理

数学上,两个整数除以同一个整数,若得相同余数,则二整数同余

如何理解

100 天里,所有星期一的这些天都是同余的,所有星期二的这些天就是同余的,同理,星期三、星期四等等这些天也都是同余的

哈希 Hash

将任意长度的输入,通过哈希算法,压缩为某一固定长度的输出

想想星期的概念: 图 1

将数据取余 图 2

ps. size指的是有限空间的数目而不是大小

在这个公式中,x 表示等待被转换的数值,而 size 表示有限存储空间的数目,mod 表示取余操作。通过余数,你就能将任何数值,转换为有限范围内的一个数值,然后根据这个新的数值,来确定将数据存放在何处。

图 6

假设有两条记录,它们的记录标号分别是 1 和 101。我们把这些模 100 之后余数都是 1 的,存放到第 1 个可用空间里。以此类推,将余数为 2 的 2、102、202 等,存放到第 2 个可用空间,将 100、200、300 等存放到第 100 个可用空间里。

再复杂一点 图 4

我们假设随机数 MAX 是 590199,那么我们针对标号为 1 的记录进行重新计算,最后的计算结果就是 0,而针对标号 101 的记录,如果随机数 MAX 取 627901,对应的结果应该是 2。这样先前被分配到空间 1 的两条记录,在新的计算公式作用下,就会被分配到不同的可用空间中。

微信公众号

本文链接:

https://alili.tech/archive/jvh7xaof84/

# 最新文章