Skip to content

050 Applications of Congruences

Hashing Functions

我们经常使用 作为哈希函数。简答,计算快,每一个可能性都会覆盖到。

如果多个 计算的 相同,称为碰撞(collision)。解决冲突有很多方式,最简单的线性扫描法。 从 0 开始到 ,按照 找下一个空位。

Pseudorandom Numbers

系统方法产生的随机数不是真随机,所以成为伪随机数(pseudorandom numbers)。

最常用的伪随机数生成方法是线性同余法(linear congruential method)。我们选择四个数:模 ,倍数 ,增量 和种子 ,生成随机数公式是

有的时候,我们使用 的线性同余法,此时,我们称之为纯乘法生成器(pure multiplicative generator)。

线性同余法被用于很多任务,不过它生成的随机数不满足某些随机数统计属性。因此,在一些对随机数要求比较高的任务中,需要使用其他随机数生成方法。

Check Digits

例 奇偶校验比特(Parity Check Bit) 任意一串数据有 个比特,我们会增加第 位使得 如果检验位错了,那么数据不正确。不过即使检验位是对的,也不代表数据是正确的,比如有偶数个比特发生了反转。

例 通用产品代码(Universal Product Code, UPC) 一般有 12 位,第一位是产品类别,接下来五位是生产商,再接下来五位指定产品,最后一位是检验位。这些数字满足

例 国际标准书号(International Standard Book Number, ISBN) 一般有 ISBN-10 和 ISBN-13 两种。下面分析 ISBN-10。十个数字,最后一个可能是 10,用 X 表示,这些数字满足

常见的错误有单个数字错误(single error)和置换错误(transposition error),两个不同数字交换了位置。任意一种校验码都希望能校验出这些错误,甚至是其他类型的错误。下面考察 ISBN 和 UPC 的能力。

假定新的 ISBN 是 ,假定第 位出粗了,那么 ,其中 ,那么 因为 ,所以 。因此 不是合法的 ISBN。

现在来看置换错误,假定第 位置交换,那么 ,其余有 ,那么 原因类似,,所以 不是合法的 ISBN。

对于 UPC 而言,单个数字的错误与原来 UPC 的差值是 或者 ,因为 ,所以不是合法的 UPC。

对于交换错误,如果交换都在奇数位置或者都在偶数位置的两个值,前面的系数都是一样的,和不变,所以同余性质不变,无法检测。如果交换奇数和偶数位置的值,比如 变成了 ,那么和的差值是 ,如果差值是 5,那么能够整除 10,无法检测错误。