Algorithm 通过折叠然后除以素数来散列密钥?
我想使用一个简单的散列函数对以下键“LOWELL”进行散列,该散列函数使用了3个步骤: 步骤1:将关键点转换为数字Algorithm 通过折叠然后除以素数来散列密钥?,algorithm,hash,hashcode,hash-function,Algorithm,Hash,Hashcode,Hash Function,我想使用一个简单的散列函数对以下键“LOWELL”进行散列,该散列函数使用了3个步骤: 步骤1:将关键点转换为数字 LOWELL = | L | O | W | E | L | L | | | | | | | ASCII code: 76 79 87 69 76 76 32 32 32 32 32 32 我在这里的问题是,为什么它添加了6个带有固定ASCII码32的空位置 第二步:折叠并添加(切掉数字并添加) (把他们放在一起) 第三步:取一个素数的mod 33820 mod 19937=13
LOWELL = | L | O | W | E | L | L | | | | | | |
ASCII code: 76 79 87 69 76 76 32 32 32 32 32 32
我在这里的问题是,为什么它添加了6个带有固定ASCII码32的空位置
第二步:折叠并添加(切掉数字并添加)
(把他们放在一起)
第三步:取一个素数的mod
33820 mod 19937=13883
这里还有一个问题,为什么我会用素数除法呢
答:当存在序列的时候,除以一个数字是好的
连续的数字。如果有许多中间序列
连续数,除以有许多小因子的数
可能会导致大量碰撞。质数是更好的选择。但我没有明白
步骤4:除以地址空间的大小(最好是素数)。13883模101=46
最后,为什么要划分地址空间
您可以找到详细的步骤(幻灯片350)
非常感谢您的帮助,因为您的地址空间只包含
101
插槽,所以您不能将记录放在地址超过此限制的位置
因此,您需要提醒将哈希函数的输出(13883
)除以地址空间,以确保记录的位置位于允许的地址空间中
因此h(s)%address\u space
将始终在您的地址空间中提供允许的位置
关于您的第一个问题,为什么我们在哈希中使用质数,此线程将帮助您:
注意:
Welloll
将给出完全相同的值。。。和woell
。。。而且。。。
7679|8769|7676|3232|3232|3232|
7679+8769+7676+3232+3232+3232 = 33,820