解决哈希碰撞的方法

article/2025/9/22 18:24:18

什么是hash表

根据设定的哈希函数H(key)和处理冲突的方法将一组关键字映像到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“像”作为记录在表中的存储位置,这种表便称为哈希表,这一映像过程称为哈希造表或者散列,所得的存储位置称哈希地址或散列地址。

什么是Hash哈希碰撞(也叫“冲突”)

对应不同的关键字可能获得相同的hash地址,即 key1 ≠ key2,但是H(key1) = H(key2)。
这种现象就是冲突,而且这种冲突只能尽可能的减少,不能完全避免。为什么不能完全避免?
因为哈希函数是从关键字集合和地址集合的映像,通常关键字集合为无限大、长度不受限制(密码、或者文件都可以作为关键字),而地址集合确有限,无限量 映射到 有限量 上肯定是存在重合的部分,这就是冲突。
你想啊,200个男的匹配100个女的,那肯定是存在冲突的啊,保不准哪两个就打起来了。

1 开放地址法(再散列法)

开放地执法有一个公式:Hi=(H(key)+di) MOD m i=1,2,…,k(k<=m-1)
其中,m为哈希表的表长;di 是产生冲突的时候的增量序列。

  • 如果di值可能为1,2,3,…m-1,称线性探测再散列。
  • 如果di取1,则每次冲突之后,向后移动1个位置.如果di取值可能为1,-1,2,-2,4,-4,9,-9,16,-16,…kk,-kk(k<=m/2),称二次探测再散列。
  • 如果di取值可能为伪随机数列。称伪随机探测再散列。

2 再哈希法Rehash

当发生冲突时,使用第二个、第三个、哈希函数计算地址,直到无冲突时。
这种方法是同时构造多个不同的哈希函数:
Hi=RH1(key) i=1,2,…,k

当哈希地址Hi=RH1(key)发生冲突时,再计算Hi=RH2(key)……,直到冲突不再产生。
这种方法不易产生聚集,但增加了计算时间。

3 链地址法(拉链法)

将所有关键字为同义词的记录存储在同一线性链表中,基本思想就是,将所有哈希地址为i的元素构成一个称为同义词链的单链表,并将单链表的头指针存在哈希表的第i个单元中,因而查找、插入和删除主要在同义词链中进行。链地址法适用于经常进行插入和删除的情况。
在这里插入图片描述

优点:

  1. 拉链法处理冲突简单,且无堆积现象,即非同义词决不会发生冲突,因此平均查找长度较短;
  2. 由于拉链法中各链表上的结点空间是动态申请的,故它更适合于造表前无法确定表长的情况;
  3. 开放定址法为减少冲突,要求装填因子α较小,故当结点规模较大时会浪费很多空间。而拉链法中可取α≥1,且结点较大时,拉链法中增加的指针域可忽略不计,因此节省空间;
  4. 在用拉链法构造的散列表中,删除结点的操作易于实现。只要简单地删去链表上相应的结点即可。而对开放地址法构造的散列表,删除结点不能简单地将被删结 点的空间置为空,否则将截断在它之后填人散列表的同义词结点的查找路径。这是因为各种开放地址法中,空地址单元(即开放地址)都是查找失败的条件。因此在 用开放地址法处理冲突的散列表上执行删除操作,只能在被删结点上做删除标记,而不能真正删除结点。

缺点:

  1. 指针需要额外的空间,故当结点规模较小时,开放定址法较为节省空间,而若将节省的指针空间用来扩大散列表的规模,可使装填因子变小,这又减少了开放定址法中的冲突,从而提高平均查找速度。

4 建立一个公共溢出区

假设哈希函数的值域为[0,m-1],则设向量HashTable[0…m-1]为基本表,另外设立存储空间向量OverTable[0…v]用以存储发生冲突的记录。


http://chatgpt.dhexx.cn/article/4itIVUSF.shtml

相关文章

公网IP/内网IP:

转自&#xff1a;http://hi.baidu.com/qkjzsjqsehailte/item/1042151cc0959f426926bbb4 IP地址分配 IP地址标识着网络中一个系统的位置。我们知道每个IP地址都是由两部分组成的&#xff1a;网络号和主机号。其中网络号标识一个物理的网络&#xff0c;同一个网络上所有主机需要同…

公网ip、内网ip

首先解释一下“内网”与“外网”的概念&#xff1a; 内网&#xff1a;即所说的局域网&#xff0c;比如学校的局域网&#xff0c;局域网内每台计算机的IP地址在本局域网内具有互异性&#xff0c;是不可重复的。但两个局域网内的内网IP可以有相同的。 外网&#xff1a;即互联网&a…

什么是公网IP和内网IP?

1、引言 搞网络通信应用开发的程序员&#xff0c;可能会经常听到外网IP&#xff08;即互联网IP地址&#xff09;和内网IP&#xff08;即局域网IP地址&#xff09;&#xff0c;但他们的区别是什么&#xff1f;又有什么关系呢&#xff1f;另外&#xff0c;内行都知道&#xff0c…

内网地址与公网地址及作用

下个礼拜就要过年喽 每天离假期更近了一步&#xff0c;就充满了动力 大家回家路上也要注意防护安全哦 ———————————————————— 一般内网指的就是我们园区内网&#xff0c;用的地址一般都是私有地址 私有地址在RFC1918草案中被提到&#xff0c;指的就是10…

java如何获得内网ip、外网ip、以及如何根据ip查询地址

今天突发奇想地想要用java写一个小的工具类。 用来实现如何获得本机的内网ip&#xff0c;外网ip和根据ip获得相应的地址。 花了几个小时才弄清&#xff0c;然后整理了一下&#xff0c;希望有用。 首先要明白以下三种ip地址的区别&#xff1a; &#xff08;1&#xff09;127.0.0…

简单介绍 内网与外网IP地址,域名,子网掩码,网关与路由器,ping

IP地址 IP地址是在网络给主机分配的地址如53.159.232.5或者192.168.1.1 。具体格式就是00000000.00000000.00000000.00000000&#xff0c;32位二进制&#xff0c;平时都用十进制。 但是主机在网络上不是一个主机连一个主机&#xff0c;而是网络连接网络&#xff0c;在一个网络…

局域网固定内网IP地址的方法(亲测有效)

公司有十来台电脑&#xff0c;想要做文件共享&#xff0c;但是碍于内网IP经常变动共享文件很不方便。 网上查了一些资料&#xff0c;局域网中的电脑ip若不是设置固定的话&#xff0c;一般都是动态获取的ip&#xff0c;若是需要固定ip&#xff0c;那要如何设置呢&#xff1f; 经…

查询自己的IP地址(内网和外网)

查询自己的内网IP和外网IP的方法&#xff0c;以及判断是否直接连接到公网 本方法使用命令行&#xff0c;无需其他软件 内网IP&#xff0c;即局域网IP&#xff1a; 打开cmd窗口&#xff0c;输入 ipconfig 后回车 IPv4地址一栏下即为内网IP&#xff0c;我的电脑是192.168.3.19 顺…

192.168.和10.0.开头的IP、内网IP段、IP简介、分类——(IP观止)

在这三类地址中&#xff0c;绝大多数的IP地址都是公有地址&#xff0c;需要向国际互联网信息中心申请注册。但是在IPv4地址协议中预留了3个IP地址段&#xff0c;作为私有地址&#xff0c;供组织机构内部使用。 这三个地址段分别位于A、B、C三类地址内&#xff1a; A类地址&…

VS2019安装+IVF2020安装+abaqus2021安装+关联(亲测有效附安装包)

VS2019安装IVF2020安装abaqus2021安装关联&#xff08;亲测有效附安装包&#xff09; 0. 说明1. 安装与汉化abaqus20211.1 下载解压安装包1.2 参考以下链接的安装步骤安装1.3 安装注意事项和提示 2. VS2019安装IVF2020安装2.1 下载解压VS2019在线安装包2.2 安装配置VS20192.3 下…

abaqus一维固结模拟

初学者学习ABAQUS时&#xff0c;真可谓一头雾水&#xff0c;为什么&#xff1f; 第一因为它是全英文界面&#xff08;不过这是可以汉化的哦&#xff09;&#xff1b;第二因为它是有限元分析软件&#xff0c;俗称“CAE”即计算机辅助求解分析复杂工程&#xff08;不同于CAD即计算…

Abaqus安装在lincense server1出错

问题描述&#xff1a;LMtools显示启动成功&#xff0c;但是安装abaqus时填写过License Server1后测试链接不上 原因&#xff1a;Lincense server1中应为27011主机名&#xff08;格式不要错了&#xff09;&#xff0c;而我输入成了27500主机名&#xff08;原因是找的一个安装教程…

基于Python向Abaqus导入txt、dat数据(附abaqus中python二次开发课程)

这次推送聚焦于解决采用Python向Abaqus里导入txt、dat数据的问题&#xff08;dat文件只需要将txt文件的后缀名改为dat就可以生成dat文件&#xff09;&#xff0c;Abaqus基于Python读入txt、dat数据主要有read()、readlines()、readlines()、numpy.loadtxt()函数&#xff0c;导入…

ABAQUS后处理常用功能

ABAQUS分析完成后&#xff0c;除了看看动画&#xff0c;看看云图&#xff0c;可能还需要进行其他操作&#xff0c;此处记录自己常用的一些功能在哪设置。 使用版本6.14&#xff0c;进行了中文汉化 修改背景颜色 修改图例坐标轴标题文字大小 修改图例应力范围颜色 不显示模型上…

搅拌摩擦焊有限元仿真分析学习笔记(一)——comsol、abaqus相关案例学习

目录 COMSOL搅拌摩擦焊官方案例△ 原理及分析△ 操作流程△ 分析 ABAQUS搅拌摩擦焊有限元仿真△ 操作流程○ 创建模型○ 配置材料属性○ 模型装配○ 分析步设置○ 创建相互作用○ 创建载荷○ 划分网格○ 建立温度场○ 运算求解○ 结果与分析 △ 总结分析 ABAQUS搅拌摩擦焊CEL模…

abaqus帮助文档翻译,中英对照

abaqus2016在线帮助文档因为比较简洁&#xff0c;打开响应速度较快&#xff0c;相对于需要注册的高版本帮助文档算是一大优点。 但文档内容对于英文水平一般的同学不太友好&#xff0c;为了提高阅读效率隧寻找网页翻译的方法。 1.浏览器右键的网页翻译&#xff0c;实测无效。…

Abaqus运行脚本print时中文乱码问题

脚本打印输出时出现乱码问题 运行脚本想要直接输出位移数据&#xff0c;发现中文打印出现乱码。 #!/usr/bin/env python # -*- coding:utf-8 -*- #codingutf-8a 位移数据为:0.25555 print(a)运行上面代码出现以下情况 解决办法 将打印内容使用UTF-8解码&#xff0c;然后使…

Abaqus相关报错合集

1&#xff0c;Abaqus安装后打不开的解决办法 打开后显示错误提示&#xff08;如下图&#xff09;&#xff1a; &#xff08;如果不是此提示框&#xff0c;请尝试用右键管理员方式运行Abaqus CAE&#xff09; 解决方案 第一步&#xff1a;打开开始菜单 第二步&#xff1a;打开…

Abaqus 2022安装教程

文章目录 前言一、添加环境变量二、解压缩包三、运行.bat文件四、安装ABAQUS五、汉化六、其他可能遇到的问题&#xff1a;与UG NX12.0许可证冲突 前言 ABAQUS 2022安装包&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/127Pz2Zev8zsM5-qGE7bZgw 提取码&#xff1a;123…