如何解决哈希冲突问题

哈希冲突产生的原因

哈希冲突产生的原因

哈希是通过对数据进行再压缩,提高效率的一种解决方法。但是由于通过哈希函数产生的哈希值是有限的,而书记可能比较多,导致经过哈希函数处理后任然有不同的数据对应相同的值。这时就产生了哈希值的冲突

产生哈希冲突的影响因素

装填因子(装填因子=数据总数/哈希表长) 、哈希函数、处理冲突的方法

解决哈希冲突的四种方法

1.开放地址方法

(1)线性探测

  按照顺序决定值时,如果某数据的值已经存在,则在原来的基础上往后加一个单位,直至不发生哈希冲突

(2)在平方探测

  按照顺序决定值时,如果某数据的值已经存在,则在原来值得基础上先加一在平方,若任然存在则减一在平方。随之是2的平方,3的平方....直至不发生哈希值冲突为止

(3)伪随机探测

  按照顺序决定值时,如果某个数据已经存在,通过随机函数随机生成一个数,在原来的值得基础上加上随机数,直至不发生哈希值冲突

2.链式地址法(hashMap的哈希冲突解决方法)

  对于相同的值,使用链式进行连接。使用数组存储每一个链表

  优点:

  (1)拉链法处理冲突简单,且无堆积现象,就是非同义词绝对不会发生冲突,因此平均查找长度短

  (2)由于拉链法中个链表上的节点空间是动态申请的,故它更适合于造表前无法确定表的长度的情况;

  (3)开放地址法为减少冲突,要求装填因子alpha比较小,故当然节点规模较大时就会浪费很多的空间。而拉链式中可取alpha>=1,且节点较大时,拉链法中增加的指针域可忽略不计,因此节约空间

  (4)在用拉链法构造的散列表中,删除节点的操作容易实现。只要简单的删去链表上相对应的节点即可

 

 

 

 

 

 

 

 

 

 

 

posted @ 2021-05-15 22:14  Fleeting__Time  阅读(233)  评论(0编辑  收藏  举报