

新闻资讯
哈希游戏| 哈希游戏平台| 哈希游戏APP哈希游戏- 哈希游戏平台- 哈希游戏官方网站
【正文】 6 C=0时 直接定址法 以关键字 Key 本身或关键字加上某个数值常量 C 作为散列地址的方法。散列函数为: h(Key)=Key+C,若 C 为 0,则散列地址就是关键字本身。 除余法 选择一个适当的正整数 m,用 m 去除关键码,取其余数作为地址,即: h(Key)= Key mod m, 这个方法应用的最多,其关键是 m 的选取 ,一般选 m 为小于某个区域长度 n 的最大素数(如例 1 中 取 m=13),为什么呢?就是为了尽力避免冲突。假设取 m=1000 ,则哈希函数分类的标准实际上就 变成了按照关键字末三位数分类,这样最多 1000 类,冲突会很多。一般地说,如果 m 的约数越 多,那么冲突的几率就越大。 简单的证明:假设 m 是一个有较多约数的数,同时在数据中存在 q 满足 gcd(m,q)=d 1 ,即 有 m=a*d,q=b*d,则有以下等式: q mod m= q – m* [q div m] =q – m*[b div a] 。 其中, [b div a]的取值范围是不会超过 [0, b]的正整数。也就是说, [b div a]的值只有 b+1 种可 能,而 m 是一个预先确定的数。因此上式的值就只有 b+1 种可能了。这样,虽然 mod 运算之后 的余数仍然在 [0, m1]内,但是它的取值仅限于等式可能取到的那些值。也就是说余数的分布变得 不均匀了。容易看出, m 的约数越多,发生这种余数分布不均匀的情况就越频繁,冲突的几率越 高。而素数的约数是最少的,因此我们选用大素数。记住 “ 素数是我们的得力助手 ” 数字分析法 常有这样的情况:关键码的位数比存储区域的地址的位数多,在这种情况下可以对关键码的 各位进行分析,丢掉分布不均匀的位留下分布均匀的位作为地址。 本方法适用于所有关键字已知,并对关键字中每一位的取值分布情况作出了分析。 【 例 2】 对下列关键码集合(表中左边一列)进行关键码到地址的转换,要求用三位地址。 Key H(Key) 000319426 326 000718309 709 000629443 643 000758615 715 000919697 997 000310329 329 分析: 关键码是 9 位的,地