https://time.geekbang.org/column/article/72163
同余定理:可以用余数分类
hash/散列: 就是把任意长度的输入. 转成定长的数据, 就是和上面一样 , 把无效的数据分类, 而且这个过程是大映射到小 是不可逆的
例子
要快速读写 100 万条数据记录,
最理想的情况当然是开辟一个连续的空间存放这些数据,
但是并没有能够容纳 100 万条记录的连续地址空间
需要用100 个较小的连续空间,这些空间彼此之间是被分隔开来的,
内部足以容纳 1 万条记录连续存放,
剩下的, 就是要设计一个散列函数, 把100w映射到100
最直接想到的就是 求余
原来 | 取余 |
---|---|
1 | 1 |
101 | 1 |
可以加一个随机数, 更加随机
这个随机数MAX 要记录下来
原来 | 随机数MAX | hash值 |
---|---|---|
1 | 590199 | 0 |
101 | 627901 | 2 |
这样加随机数,更适合需要将数据重新洗牌的应用场景,比如加密算法、MapReduce 中的数据分发、记录的高速查询和定位
最大公约数,模幂运算(DES、AES、RSA),凯撒密码,孙子定理,都是以模运算为基础的。
网友评论