1、hash法

来源:互联网 发布:linux搭建局域网 编辑:程序博客网 时间:2024/06/03 14:25

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所示。

                       3

                       6

                       7

                       1

+                 +    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、建立一个公共溢出区











原创粉丝点击