📜  DAA哈希函数

📅  最后修改于: 2020-12-10 06:24:55             🧑  作者: Mango

散列函数

哈希函数用于索引原始值或键,然后在以后每次与该值或键关联的数据被检索时使用。因此,散列始终是单向操作。无需通过分析散列值对散列函数进行“反向工程”。

良好哈希函数的特征:

  • 哈希值完全由要哈希的数据确定。
  • 散列函数使用所有输入数据。
  • 哈希函数“均匀地”将数据分布在整个可能的哈希值集中。
  • 哈希函数为相似的字符串生成复杂的哈希值。

一些流行的哈希函数是:

1.除法:

选择一个比k中的n个键的数目小的m(通常选择m为质数或没有小除数的数字,因为这通常是最少的碰撞次数)。

哈希函数是:

例如:如果哈希表的大小为m = 12,并且密钥为k = 100,则h(k)=4。由于它仅需要单个除法运算,因此按除法进行哈希运算非常快。

2.乘法方法:

用于创建哈希函数的乘法方法分两个步骤进行。首先,我们将密钥k与0

哈希函数是:

其中“ k A mod 1”表示k A的分数部分,即k A-⌊kA⌋。

3.中方法:

密钥k平方。然后,函数H定义为

H (k) = L

其中L是通过从k 2的两端删除数字获得的。我们强调必须为所有键使用相同的k 2位置。

4.折叠方式:

密钥k分为多个部分k 1 ,k 2 …. k n ,其中除最后一个部分外的每个部分都具有与所需地址相同的位数。

然后将各部分加在一起,而忽略最后一个进位。

示例:公司有68名员工,并且每个员工都分配有唯一的四位数员工编号。假设L由2位地址组成:00、01和02 …. 99。我们将上述哈希函数应用于以下每个员工编号:

3205,        7148,        2345

(a)除法:选择一个接近99的素数m,例如m = 97,然后

H (3205) = 4,        H (7148) = 67,            H (2345) = 17.

将3205除以17得到的余数为4,将7148除以97得到的余数为67,将2345除以97得到的余数为17。

(b)中方法:

请注意,从哈希算起,选择了从右开始计数的第四和第五位数字。

(c)折叠方法:将密钥k分为2部分,并相加得出以下哈希地址:

H (3205) = 32 + 50 = 82        H (7148) = 71 + 84 = 55
H (2345) = 23 + 45 = 68