散列中的折叠方法:它将键值分解为精确的段,这些段相加形成散列值,另一种技术是在添加之前分别对每个段应用乘法散列函数。一些折叠方法更进一步,在添加之前每隔一块翻转一次。这种折叠方法与分布无关。
算法:
- 折叠方法用于创建散列函数,从将项目分成相等大小的部分开始,即最后一个部分可能不相等。
- 将这些位加在一起的结果是哈希值, H(x) = (a + b + c) mod M ,其中 a、b 和 c 表示分解为三个部分的预处理键, M是表大小, mod代表模数。
- 换句话说,预处理键的三个部分的总和除以表大小。余数是散列键。
解释:
示例 1:任务是将键123456789折叠成一个 10 个空格(0 到 9)的哈希表。
- 假设密钥,比如X是 123456789 和表大小(即, M = 10)。
- 因为它可以按任意顺序将X分成三个部分。让我们把它平均分。
- 因此,a = 123,b = 456,c = 789。
- 现在, H(x) = (a + b + c) mod M即, H(123456789) =(123 + 456 + 789) mod 10 = 1368 mod 10 = 8 。
- 因此, 123456789 被插入到地址8的表中。
示例 2:任务是将键452378912折叠成一个 10 个空格(0 到 9)的哈希表。
- 假设密钥,比如说X是452378912和表大小(即, M = 10)。
- 因为它可以按任意顺序将X分成三个部分。让我们把它平均分。
- 因此,a = 452,b = 378,c = 912。
- 现在, H(x) = (a + b + c) mod M即,H(452378912) =(452 + 378 + 912) mod 10 = 1742 mod 10 = 2 。
- 因此, 452378912 被插入到地址2的表中。
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。