解决散列表冲突方法



1 解决冲突方法

1.1 链接法

又叫拉链法,将具有同一散列地址的记录存储在一条线性链表中



1.2 开放定址法

通过对原hash函数进行修改,添加探查函数,当出现冲突时,往下一个地址写数据


图中p(i)为探查函数

探查函数分为以下四种:

        线性探查法:(p(i)为1,2,...,...n)

        二次探查法

        随机探查法:(p(i)为随机数)

        双散列函数法

使用开放定址法时最好能确保散列表的装填因子处于较低的水平.


1.3 桶地址法

为表中的每个地址关联一个桶,一个桶可以存储多个元素.如果桶满了,可以使用开放地址法.


1.4 建立公共溢出区

把冲突元素统一放到公共溢出区,遇到冲突时直接将冲突元素定向到公共溢出区的位置上,在冲突极少时比较常见.


2 散列表性能

2.1 衡量性能

使用平均查找长度衡量查找效率


2.2 影响产生冲突因素

散列函数是否均匀

处理冲突的方法

散列表的装填因子

    装填因子定义=填入表中的元素个数 / 散列表的长度


2.3 散列函数

有以下三种:

求模散列法:假设有一个元素E,其键值为k,将键值k映射到m个槽上的某一个,即散列函数为h(k)=kmodm

乘法散列法:构造散列函数的乘法散列法包含两个步骤,第一步:用关键字k乘上常数A(0<A<1),并提取kA的小数部分.

                第二步:用m乘以这个值,并向下取整:h(k) =[m(kAmod1)]

全域散列法:在全域散列法里面,散列函数都是随机的,随机散列函数不能任意设计的








阅读更多
换一批

没有更多推荐了,返回首页