二、解决Hash冲突的主要方法

二、解决Hash冲突的主要方法
1、几个概念
    (1)什么是hash表?
        散列表(Hash table,也叫哈希表),是根据键值对直接进行访问的数据结构。它通过建立关键字和存储位置之间的一个确定的对应关系f,使得,每个关键字与结构中唯一一个存储位置相对应。这个对应关系f叫做哈希函数,存放记录的数组叫做哈希表。
    (2)什么是冲突?
        对于不同的关键字可能得到同一哈希地址,即key1 != key2,而f(key1)=f(key2),这种现象称冲突。


    (3)如何处理冲突?
        假设哈希表的地址集为0~(n-1),冲突是指由关键字得到的哈希地址为j(0<= j <=n-1)的位置上已存有记录,则"处理冲突"就是为该关键字的记录找到另一个"空"的hash地址。
2、处理冲突的几个方法
    (1)开放定址法
        Hi(key) = (H(key)+di) MOD m i=1,2,...,k(k<=m-1)
        其中:H(key)为哈希函数;m为哈希表表长;di为增量序列
        a、di=1,2,3,...,m-1,称线性探测再散列
        b、二次探测再散列
        c、di=伪随机数序列,称伪随机探测再散列
        例:在长度为11的哈希表中已经填有关键字分别为17,60,29的记录(哈希函数H(key)=key MOD 11),现有第四个记录,其关键字为38,由哈希函数得到哈希地址为5,产生冲突。若用称线性探测再散列的方法处理时,得到下一个地址6仍冲突;下一个7仍冲突;直到哈希地址为8的位置为"空"为止,处理冲突的过程结束。

   (2)再哈希法
        Hi=RHi(key)  i=1,2,…,k
        RHi均是不同的哈希函数,即在同义词产生地址冲突时计算另一个哈希函数地址,直到冲突不再产生。这种方法不易产生聚集,但增加了计算时间。
    (3)链地址法
        将所有关键字对应的值相同(同义词)的记录,存储在同一线性链表中。
    (4)建立公共溢出区
        所有关键字和基本表中关键字为同义词的记录,不管它们由哈希函数得到的哈希地址是什么,一旦发生冲突,都填入溢出表。
        Hi=RHi(key)  i=1,2,…,k
        RHi均是不同的哈希函数,即在同义词产生地址冲突时计算另一个哈希函数地址,直到冲突不再产生。这种方法不易产生聚集,但增加了计算时间。
    (3)链地址法
        将所有关键字对应的值相同(同义词)的记录,存储在同一线性链表中。
    (4)建立公共溢出区
        所有关键字和基本表中关键字为同义词的记录,不管它们由哈希函数得到的哈希地址是什么,一旦发生冲突,都填入溢出表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值