当前位置:网站首页>取余操作是一个哈希函数
取余操作是一个哈希函数
2022-07-05 04:21:00 【蓝染k9z】
哈希
哈希有时候也被翻译为散列。
就是将任意长度的输入,通过哈希算法,压缩为某一固定长度的输出。
- 假如要快速读写100万条数据记录,要达到高速地存取,但是由于条件的限制,我们并没有能够容纳100万条记录的连续地址空间,该怎么办。
- 看看系统是否可以提供若干个较小的连续空间,而每个空间又能存放一定数量的记录。
- 比如我们找到了100个较小的连续空间。也就是说,这些空间彼此之间是被分隔开来的,但是内部是连续的,并足以容纳1万条记录连续存放,那么我们就可以使用余数和同余定理来设计一个散列函数,并实现哈希表的结构。

- 假设有两条记录,它们的记录标号分别是1和101.
- 我们把这些模100之后余数都是1的,存放到第1个可用空间里。
- 依此类推,将余数为2的2、102、202等,存放到第2个可用空间。
- 这样,我们就可以根据求余的快速数字变化,对数据进行分组,并把它们存放到不同的地址空间里。
- 而求余操作本身非常简单,因此几乎不会增加寻址时间。

为了增加数据散列的随机程度,可以在公式中加入一个较大的随机数MAX
在新的计算公式作用下,就会被分配到不同的可用空间中
使用了MAX这个随机数之后,被分配到同一个空间中的记录就更加“随机”,更适合需要将数据重新洗牌的应用场景,比如加密算法、MapReduce中的数据分发、记录的高速查询和定位等等。
加密
假设要加密一组三位数,那么设定一个这样的加密规则:
- 先对每个三位数的个、十和百位数,都加上一个较大的随机数。
- 然后将每位上的数都除以7,用所得的余数代替原有的个、十、百位数。
- 最后将第一位和第三位交换。
这就是一个基本的加密变换过程。
假如说,我们要加密625,随机数选择590127.
那百、十、个位分别加上这个随机数,就变成了590133 590129 590132,三位分别除以7求余后得到5 1 4。
最终得到的数字就是415。
如果加密的人知道加密的规则,那就可以算出原始的数据是625.
(提示:590127%7=6)
边栏推荐
- SPI read / write flash principle + complete code
- Function (basic: parameter, return value)
- Function (error prone)
- NetSetMan pro (IP fast switching tool) official Chinese version v5.1.0 | computer IP switching software download
- [finebi] the process of making custom maps using finebi
- 根据入栈顺序判断出栈顺序是否合理
- Clickpaas low code platform
- Convert Boolean to integer value PHP - Convert Boolean to integer value PHP
- Learning notes 8
- Introduction to RT thread kernel (5) -- memory management
猜你喜欢
随机推荐
北京程序员的真实一天!!!!!
长度为n的入栈顺序的可能出栈顺序种数
Technical tutorial: how to use easydss to push live streaming to qiniu cloud?
C26451: arithmetic overflow: use the operator * on a 4-byte value, and then convert the result to an 8-byte value. To avoid overflow, cast the value to wide type before calling the operator * (io.2)
Realize the attention function of the article in the applet
File upload bypass summary (upload labs 21 customs clearance tutorial attached)
这是一个不确定的时代
【UNIAPP】系统热更新实现思路
Threejs realizes the drawing of the earth, geographical location annotation, longitude and latitude conversion of world coordinates threejs coordinates
Mxnet imports various libcudarts * so、 libcuda*. So not found
mysql的七种join连接查询
揭秘技术 Leader 必备的七大清奇脑回路
SPI read / write flash principle + complete code
Behavior perception system
小程序中实现文章的关注功能
长度为n的入栈顺序的可能出栈顺序
Web开发人员应该养成的10个编程习惯
PHP读取ini文件并修改内容写入
首席信息官如何利用业务分析构建业务价值?
防护电路中的元器件









