• Hash冲突的几种解决方法


    1.  开放定值法:

       也叫再散列法,当关键字key的哈希地址p=H(key)出现冲突时,以p为基础,产生另一个哈希地址p1,如果p1仍然冲突,再以p为基础,产生另一个哈希地址p2,…,直到找出一个不冲突的哈希地址pi ,将相应元素存入其中。

       通常都是用以下公式计算:Hi=(H(key)+di% m   i=1,2,…,n

       其中H(key)为哈希函数,m 为表长,di称为增量序列。增量序列的取值方式不同,相应的再散列方式也不同。主要有三种:线性探测再散列(冲突发生时,顺序查看表中下一单元,直到找出一个空单元或查遍全表),二次探测再散列(冲突发生时,在表的左右进行跳跃式探测,直到找到空单元),伪随机探测再散列。

    2.  链地址法:

       这种方法的基本思想是将所有哈希地址为i的元素构成一个称为同义词链的单链表,并将单链表的头指针存在哈希表的第i个单元中,因而查找、插入和删除主要在同义词链中进行。链地址法适用于经常进行插入和删除的情况。像之前看到的HashMap 就是利用这种方法解决Hash冲突的。

    3.  再哈希法:

       多写几个哈希函数,算出来一个hashcode 重复的就用另一个哈希函数算,直到算出来不一样。

    4.  建立一个公共溢出区域,就是把冲突的都放在另一个地方,不在表里面。

       

  • 相关阅读:
    微信redirect_uri域名与后台配置不一致,错误代码10003
    windows安装centos7子系统
    c++中的var_dump
    egret3.x升级5.2
    PHP更改自动加载的顺序
    重定向如何携带cookie
    elasticsearch和mysql排序问题
    npm错误:Error: listen EADDRNOTAVAIL
    Spring Boot WebFlux 集成 Mongodb 数据源操作
    泥瓦匠:程序猿为啥要坚持写原创技术博客?
  • 原文地址:https://www.cnblogs.com/jkzr/p/10535439.html
Copyright © 2020-2023  润新知