知识大全 查找 - 散列技术 - 散列函数的构造方法
Posted 函数
篇首语:人还是要乐观,心碎了就对自己说,碎碎平安。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 查找 - 散列技术 - 散列函数的构造方法相关的知识,希望对你有一定的参考价值。
散列函数的构造方法
散列函数的选择有两条标准 简单和均匀
简单指散列函数的计算简单快速;
均匀指对于关键字集合中的任一关键字 散列函数能以等概率将其映射到表空间的任何一个位置上 也就是说 散列函数能将子
集K随机均匀地分布在表的地址集 … m 上 以使冲突最小化
常用散列函数
为简单起见 假定关键字是定义在自然数集合上
( )平方取中法
具体方法 先通过求关键字的平方值扩大相近数的差别 然后根据表长度取中间的几位数作为散列函数值 又因为一个乘积的中
间几位数和乘数的每一位都相关 所以由此产生的散列地址较为均匀
【例】将一组关键字( )平方后得
( )
若取表长为 则可取中间的三位数作为散列地址集
( )
相应的散列函数用C实现很简单
int Hash(int key) //假设key是 位整数
key*=key; key/= ; //先求平方值 后去掉末尾的两位数
return key% ; //取中间三位数作为散列地址返回
( )除余法
该方法是最为简单常用的一种方法 它是以表长m来除关键字 取其余数作为散列地址 即 h(key)=key%m
该方法的关键是选取m 选取的m应使得散列函数值尽可能与关键字的各位相关 m最好为素数
【例】若选m是关键字的基数的幂次 则就等于是选择关键字的最后若干位数字作为地址 而与高位无关 于是高位不同而低位相
同的关键字均互为同义词
【例】若关键字是十进制整数 其基为 则当m= 时 … 等均互为同义词
( )相乘取整法
该方法包括两个步骤 首先用关键字key乘上某个常数A(
>
该函数的C代码为:
int Hash(int key)
double d=key *A; //不妨设A和m已有定义
return (int)(m*(d-(int)d));//(int)表示强制转换后面的表达式为整数
(4)随机数法
选择一个随机函数,取关键字的随机函数值为它的散列地址,即
h(key)=random(key)
其中random为伪随机函数,但要保证函数值是在0到m-1之间。WINgwIt.CoM
cha138/Article/program/sjjg/201311/23686相关参考