发布时间:2025-05-30 23:38:08 点击量:
HASH GAME - Online Skill Game GET 300
1、2016数据结构Data structure讲授:贺宁哈希函数及其构造方法常州信息职业技术学院02031、哈希查找的定义哈希查找 以往的查找方法都是建立在比较的基础之上的。我们希望能够在记录的关键字与其存储地址之间建立一一对应关系,通过这一关系直接找到对应的记录。 哈希查找就是通过某个函数(规则)将记录存储到线性表中,然后再按照该函数在线性表中进行查找的方法。2、有关哈希查找的几个概念 哈希表与哈希方法 冲突和同义词04哈希表与哈希方法 选取某个函数H,按记录的关键字key计算出记录的存储位置H(key),称为哈希地址,并将记录按哈希地址存放;查找时,由函数H对给定值K计算地址,将K与地址单元
2、中元素关键字进行比较,确定查找是否成功,这种查找方法称为哈希(散列)方法。哈希方法中使用的记录关键字与地址之间的函数称为哈希(散列)函数(Hash function)。按这个方法构造的表称为哈希(散列)表(Hash table)。Hash table05哈希表与哈希方法设有11个记录关键字的值分别是:18,27,1,20,22,6,10,13,41,15,25。选取关键字与元素位置间的函数为:H(key)=key mod 11,则这11个记录存放在数组a中的下标分别为:7,5,1,9,0,6,10,2,8,4,3。图示 哈希表06冲突和同义词设哈希函数为:H(key)=key mod 11,如
3、果两个记录关键字的值分别为2和13,则H(2)= H(13)=2,即以2和13为关键字的记录发生了冲突,2和13是同义词。利用哈希函数存储记录时,可能发生冲突,冲突是难免的,只能尽量减少。所以,哈希方法需要解决以下两个问题:(1)如何构造哈希函数?(2)如何解决冲突?对于某个哈希函数H和两个关键字k1,k2,如果k1k2,而H(k1)=H(k2),即经过哈希函数变换后,将不同的关键字映射到同一个哈希地址上,这种现象称为冲突, k1和k2称为同义词。07哈希函数的构造方法(1)简单:即哈希函数的计算简单快速;(2)均匀:对于关键字集合中的任一关键字,哈希函数能以等概率将其映射到表空间的任何一个位
4、置上。也就是说,散列函数能将关键字集合随机均匀地分布在表的地址集0,1,n-1上,以使冲突最小化。 1、哈希函数的构造原则 2、哈希函数的构造方法 直接定址法 除余法 平方取中法08哈希函数的构造方法H(key)=akey+b (a、b为常数)取关键字的某个线性函数值为哈希地址,这类函数是一一对应函数,不会产生冲突,但要求地址集合与关键字可能取值的集合大小相同,因此,对于较大的关键字集合不适用。 直接定址法设关键字集合为20,30,50,60,80,90,关键字可能取值的集合为100以内10的倍数,所以可选取哈希函数为:H(key)=key/10,则哈希表下图所示。09哈希函数的构造方法H(k
5、ey)=key mod P(Pm)取关键字被P除的余数作为哈希地址,其中m为表长,P为小于m的整数。用C语言可表示为H(key)=key % P(Pm),显然该方法可能会发生冲突,为尽量减少冲突,P应选取小于等于m的最大素数。该方法是最为简单常用的一种方法。 除余法10哈希函数的构造方法先通过求关键字的平方扩大相近数的差别,然后根据表长取中间的几位数作为哈希函数值。因为一个乘积的中间几位数和乘数的每一位都相关,所以由此产生的哈希地址较为均匀。【例】将一组关键字(0110,1010,1001,0111)平方后得(0012100,1020100,1002001,0012321)若取表长为1000,则可取中间的三位数作为散列地址集:(121,201,020,123)。 平方取中法THANKS