1、hash法

1、hash法

1、1 哈希函数的常用构造方法

a、 直接寻址法

直接寻址法,就是将关键字和关键字的线性表达作为哈希值。h(key) = key 或 h(key) = a x key + b.

b、取模法

选取一个p,h(key) = key mod p,p一般取哈希长度

c、折叠法

例如:key=12360324711202065,哈希表长度为1000,则应把关键字分成3位一段,在此舍去最低的两位65,分别进行移位叠加和折叠叠加,求得哈希地址为105907,如图8.24所示。

1  2  3                   1  2   3

6  0  3                   3  0   6

2  4  7                   2  4   7

1  1  2                   2  1   1

+  0  2  0              + 0  2   0

        ————————            —————————

       1  1  0  5                   9  0   7

 

a)移位叠加                   (b) 折叠叠加

d、除留余数法

h(key) = key %p,p一般选取小于和等于表长的质数。

1、2 解决冲突方法

a、开放地址法

意思就是,当哈希值产生冲突的时候,会继续向其他空的地址进行探索。例如,我们算出哈希值为2,但是2已经存在,那么,我们就加1(加其他也可以)也就是3,判断3是否已经存在,如存在则继续探索,否则,就将其存储。

b、再哈希法

意思就是,我们可能有多个哈希函数h1、h2、h3等,当我们通过h1得到的哈希值冲突时,则继续通过h2计算直到不再冲突位置。

c、链地址法(适合冲突比较严重的情况下)

比如,我们有元素{a,b,c,d,e,f,g,h},通过某种哈希函数我们得到哈希值 {0,2,4,1,0,8,7,2}。我们通过链表的形式,将冲突的地方用链表来存储。

d、建立一个公共溢出区











猜你喜欢

转载自blog.csdn.net/qq_35703954/article/details/73499772