导航:首页 > 使用方法 > 构造哈希表最常用的方法

构造哈希表最常用的方法

发布时间:2024-11-26 04:18:34

1. 哈稀函数怎么建立,

你的问题太不具体,其实建哈希函数不难,要看你用什么方法,可以参考一下数据结构相关的书,一般上面都会有介绍的.
哈希函数是一个映象,即:将关键字的集合映射到某个地址集合上,它的设置很灵活,只要这个地址集合的大小不超出允许范围即可。哈希表中元素是由哈希函数确定的。
以下是构造哈希函数的5种方法:
1 直接定值法:可以取用关键字本身或它的线性函数作为它的哈希地址。
即 H(K)= K 或者 H(K)= aK+b;
2 除留余数法:选取一个不大于哈希表长的正整数P,用P除关键字K,所得的余数作为哈希地址。
即 H(K)= K mod P
3 数字分析法:设关键字有d位数,选取其中若干位的值构成哈希地址的方法!
4 平方取中法:先计算出K的平方,取K平方的中间几位作为哈希地址!
5 折叠移位法:将太长的关键字尽可能的等长为若干段,然后将几段的值相加,并将最高位的进位舍去,所得的结果为哈希地址。
我举个简单的例子,有一关键序列21,35,68,2,54, 用除留余数法构造哈希函数h(k)=k mod p(令p=5)则
k=21,h(k)=21 mod 5=1
k=35,h(k)=0,
k=68,h(k)=3,
k=1,h(k)=2,
k=54,h(k)=4
h(k)就是相应元素的哈希地址,理解了吗?
因为这个例子比较简单,没有产生冲突,若产生冲突,还得用处理冲突的方法,在这里就不多讲了!

2. 哈希表的常用方法

散列函数能使对一个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快地定位。
实际工作中需视不同的情况采用不同的哈希函数,通常考虑的因素有:
· 计算哈希函数所需时间
· 关键字的长度
· 哈希表的大小
· 关键字的分布情况
· 记录的查找频率
1. 直接寻址法:取关键字或关键字的某个线性函数值为散列地址。即H(key)=key或H(key) = a·key + b,其中a和b为常数(这种散列函数叫做自身函数)。若其中H(key)中已经有值了,就往下一个找,直到H(key)中没有值了,就放进去。
2. 数字分析法:分析一组数据,比如一组员工的出生年月日,这时我们发现出生年月日的前几位数字大体相同,这样的话,出现冲突的几率就会很大,但是我们发现年月日的后几位表示月份和具体日期的数字差别很大,如果用后面的数字来构成散列地址,则冲突的几率会明显降低。因此数字分析法就是找出数字的规律,尽可能利用这些数据来构造冲突几率较低的散列地址。
3. 平方取中法:当无法确定关键字中哪几位分布较均匀时,可以先求出关键字的平方值,然后按需要取平方值的中间几位作为哈希地址。这是因为:平方后中间几位和关键字中每一位都相关,故不同关键字会以较高的概率产生不同的哈希地址。
例:我们把英文字母在字母表中的位置序号作为该英文字母的内部编码。例如K的内部编码为11,E的内部编码为05,Y的内部编码为25,A的内部编码为01, B的内部编码为02。由此组成关键字“KEYA”的内部代码为11052501,同理我们可以得到关键字“KYAB”、“AKEY”、“BKEY”的内部编码。之后对关键字进行平方运算后,取出第7到第9位作为该关键字哈希地址,如下图所示 关键字 内部编码 内部编码的平方值 H(k)关键字的哈希地址 KEYA 11050201 122157778355001 778 KYAB 11250102 126564795010404 795 AKEY 01110525 001233265775625 265 BKEY 02110525 004454315775625 315
4. 折叠法:将关键字分割成位数相同的几部分,最后一部分位数可以不同,然后取这几部分的叠加和(去除进位)作为散列地址。数位叠加可以有移位叠加和间界叠加两种方法。移位叠加是将分割后的每一部分的最低位对齐,然后相加;间界叠加是从一端向另一端沿分割界来回折叠,然后对齐相加。
5. 随机数法:选择一随机函数,取关键字的随机值作为散列地址,通常用于关键字长度不同的场合。
6. 除留余数法:取关键字被某个不大于散列表表长m的数p除后所得的余数为散列地址。即 H(key) = key MOD p,p<=m。不仅可以对关键字直接取模,也可在折叠、平方取中等运算之后取模。对p的选择很重要,一般取素数或m,若p选的不好,容易产生同义词。

3. 数据结构哈希算法

1,直接寻址法:
函数公式:f(key)=a*key+b (a,b为常数)
这种方法的优点是:简单,均匀,不会产生冲突。但是需要事先知道关键字的分布情况,适合查找表较小并且连续的情况。
2,数字分析法:
比如我们的11位手机号码“136XXXX7887”,其中前三位是接入号,一般对应不同运营公司的子品牌,如130是联通如意通,136是移动神州行,153是电信等。中间四们是HLR识别号,表示用户归属地。最后四们才是真正的用户号。
若我们现在要存储某家公司员工登记表,如果用手机号码作为关键字,那么极有可能前7位都是相同的,所以我们选择后面的四们作为哈希地址就是不错的选择。
3,平方取中法:
故名思义,比如关键字是1234,那么它的平方就是1522756,再抽取中间的3位就是227作为哈希地址。
4,折叠法:
折叠法是将关键字从左到右分割成位数相等的几个部分(最后一部分位数不够可以短些),然后将这几部分叠加求和,并按哈希表表长,取后几位作为哈希地址。
比如我们的关键字是9876543210,哈希表表长三位,我们将它分为四组,987|654|321|0 ,然后将它们叠加求和987+654+321+0=1962,再求后3位即得到哈希地址为962,哈哈,是不是很有意思。
5,除留余数法:
函数公式:f(key)=key mod p (p<=m)m为哈希表表长。
这种方法是最常用的哈希函数构造方法。
6,随机数法:
函数公式:f(key)= random(key)。
这里random是随机函数,当关键字的长度不等是,采用这种方法比较合适。
两种哈希函数冲突解决方法
我们设计得最好的哈希函数也不可能完全避免冲突,当我们在使用哈希函数后发现两个关键字key1!=key2,但是却有f(key1)=f(key2),即发生冲突。

阅读全文

与构造哈希表最常用的方法相关的资料

热点内容
快速开通原创的方法 浏览:728
小米平板的麦克风权限设置在哪里设置方法 浏览:644
正规系统治疗方法 浏览:473
孕期抗抑郁最佳方法 浏览:741
笔记本鼠标不亮失灵的解决方法 浏览:274
王国维的研究史学方法 浏览:895
电线室内安装方法 浏览:703
飞度遥控器漏电解决方法 浏览:260
菩提树的种植方法 浏览:210
惠普5740濹盒安装方法 浏览:929
制作大礼物盒的方法步骤视频 浏览:771
什么方法可以快速治牙疼 浏览:454
佳能80d使用方法 浏览:210
血瘀怎么祛除最快方法 浏览:877
毛笔首次使用方法 浏览:210
常用的菌种保存方法是什么 浏览:655
经痛有什么减痛方法 浏览:246
硫磺产品化验分析方法 浏览:440
个人所得税计算方法如何 浏览:377
鞋的裁剪方法图片 浏览:239