散列碰撞_散列中的碰撞和碰撞解决技术

散列碰撞

Prerequisite: Hashing data structure

先决条件: 哈希数据结构

碰撞 (Collisions)

Hash functions are there to map different keys to unique locations (index in the hash table), and any hash function which is able to do so is known as the perfect hash function. Since the size of the hash table is very less comparatively to the range of keys, the perfect hash function is practically impossible. What happens is, more than one keys map to the same location and this is known as a collision. A good hash function should have less number of collisions.

哈希函数可以将不同的键映射到唯一的位置(哈希表中的索引),任何能够做到这一点的哈希函数都称为完美哈希函数。 由于哈希表的大小相对于键范围而言非常小,因此理想的哈希函数实际上是不可能的。 发生的事情是,有多个键映射到同一位置,这称为碰撞 。 良好的哈希函数应具有较少的冲突数。

To understand what collision is let's check the below example,

要了解什么是碰撞,让我们检查以下示例,

Say, the set of keys are;
{123, 124, 135, 1267, 2378, 9087} 
and hash table size is 10(0-9 indices)
Now,
If our hashing function is
F(x)=digits in x
Then
123->3
124->3
135->3
1267->4
2378->4
9087->4

The hash table will look like,

哈希表看起来像

collisions in hashing

In the above example, we can see though there are 10 indices only 2 are being used and the collision rate is too high. 123, 124, 135 have collided while 1267, 2378, 9087 have collided.

在上面的示例中,我们可以看到尽管有10个索引,但仅使用了2个,并且冲突率太高。 123、124、135发生了碰撞,而1267、2378、9087发生了碰撞。

#include <bits/stdc++.h>
using namespace std;
//collision
int main()
{
//set of input numbers
vector<int> arr{ 123, 124, 135, 1267, 2378, 9087 };
//using hashh function f(x)=no of digits in x
cout << "using hashh function 1\n";
for (int a : arr) {
cout << a << "->" << to_string(a).length() << endl;
}
return 0;
}

Output:

输出:

using hashh function 1
123->3
124->3
135->3
1267->4
2378->4
9087->4

碰撞解决技术 (Collision Resolution Techniques)

Collision resolution is finding another location to avoid the collision. The most popular resolution techniques are,

碰撞解决方案正在寻找另一个位置来避免碰撞。 最受欢迎的解析技术是

  1. Separate chaining

    单独链接

  2. Open addressing

    开放式寻址

Open addressing can be further divided into,

开放式寻址可以进一步分为:

  1. Linear Probing

    线性探测

  2. Quadratic Probing

    二次探测

  3. Double hashing

    双重哈希

翻译自: https://www.includehelp.com/data-structure-tutorial/collisions-in-hashing-and-collision-resolution-techniques.aspx

散列碰撞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/380513.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA JDK环境渲染

①&#xff08;随便在哪个盘里都行&#xff09;创建一个文件夹名称&#xff1a;Java&#xff1b; ②在文件夹Java下创建一个子文件夹 名称&#xff1a;jdk&#xff1b; ③在子文件夹jdk下再创建一个子文件夹 名称jre&#xff1b; &#xff08;文件夹名称随便&#xff0c;我这…

使用C和汇编实现一个加法操作

在C/C嵌入汇编指令格式&#xff1a; __asm{;汇编指令 }代码&#xff1a; #include "stdio.h"int main() {int a1;int b2;int c0;__asm{mov eax,amov ebx,badd eax,ebxmov c,eax}printf("ab%d\n",c);return 0; }结果&#xff1a;

FPU数据寄存器

FPU有8个独立的、可寻址的80位数据寄存器R0-R7&#xff0c;如下图所示&#xff0c;这些寄存器合称为寄存器栈。FPU 状态字中名为 TOP 的一个 3 位字段给出了当前处于栈顶的寄存器编号。例如&#xff0c;在下图中&#xff0c;TOP 等于二进制数 011&#xff0c;这表示现在栈顶为 …

C#多线程学习笔记(三)

刚刚把前两天的笔记整理完了&#xff0c;发现做笔记可以加深印象。要坚持做下去&#xff0c;可以学到一些细节的东西。a.今天学到一个非常试用的lock语法:lock(expression) statement_block expression代表你希望跟踪的对象&#xff0c;通常是对象引用。一般地&#xff0c;如果…

C和汇编混合编程----printf

今天终于用c和汇编成功调试出第一个程序了&#xff0c;程序很简单&#xff0c;我太菜了&#xff0c;花了几天的时间&#xff0c;才调试好&#xff0c;来记录一下&#xff0c;以防忘记了 先上程序&#xff1a; #include "stdio.h" int main() {char *str"begin\…

linux清理缓存cache,Linux清理cache缓存

当cache缓存占用太大&#xff0c;服务起不来&#xff0c;需要查看清理缓存查看缓存&#xff1a;free -m输入运行下面一行&#xff1a;echo 3 > /proc/sys/vm/drop_caches# 释放缓存区内存的方法1)清理pagecache(页面缓存)# echo 1 > /proc/sys/vm/drop_caches 或者 # sys…

c和汇编混合编程----shellcode----弹出计算器

先用c和汇编混合编程成功弹出计算器&#xff08;在VC里运行&#xff09; #include "stdio.h" #include "windows.h"int main(int argc, char* argv[]) {printf("begin\n");HINSTANCE libHandle;char *dll"kernel32.dll";libHandleLoa…

linux系统的层次结构,关于Linux操作系统层次结构分析

本文转自http://www.jb51.net/LINUXjishu/214104.html首先来看一张图(这是Linux操作系统的大致层次结构)&#xff1a;最内层是硬件&#xff0c;最外层是用户常用的应用&#xff0c;比如说firefox浏览器&#xff0c;evolution查看邮件&#xff0c;一个计算流体模型等等。硬件是物…

shellcode---c和汇编混合编程---弹出cmd

首先用C/C语言实现弹出cmd #include "stdio.h" #include "windows.h"int main(int argc, char* argv[]) {printf("begin\n");HINSTANCE libHandle;char *dll"kernel32.dll";libHandleLoadLibrary(dll);WinExec("cmd.exe",S…

C和汇编混合编程---栈平衡

最近在搞C和汇编混合编程&#xff0c;对栈平衡有点小理解&#xff0c;记录一下 当我们调用一个API或者子程序时时&#xff0c;API和子程序可以理解为函数&#xff0c;我们不必在返回的时候平衡栈里面的函数参数&#xff0c;但C语言库函数要我们自己平衡栈数据&#xff0c; 比如…

如何创建Java程序

(1),点击 (2),点击OK (3),File->New->Project… (4),Java Project->Next> (5),Project name随便填&#xff08;这里以qweqwe为例&#xff09; 然后Finish (6),鼠标右击qweqwe&#xff08;随便名称都可以&#xff09;->New->Class (7),同理&#xff0c;…

c语言数据转移,重温C语言(2)之数据

一 数据类型数据就是代表某些信息的数字和字符。按计算机的储存方式可分为两大基本类型&#xff1a;整数类型和浮点数类型。1 关键字初始C90C99intsigned_Boollongvoid_Complexshort_Imaginaryunsignedcharfloatdouble2 存储单元首先得记住&#xff0c;计算机内部都是以二进制进…

对esp和ebp分析来了解函数的调用过程

esp&#xff1a;扩展栈指针寄存器&#xff0c;是指针寄存器的一种&#xff0c;用于存放函数栈顶指针&#xff08;栈顶指针&#xff09; ebp&#xff1a;扩展基址指针寄存器&#xff0c;也被称为帧指针寄存器&#xff0c;用于存放函数栈底指针&#xff08;栈底指针&#xff09;。…

仿射变换 c语言,c语言数字图像处理(三):仿射变换

仿射变换及坐标变换公式几何变换改进图像中像素间的空间关系。这些变换通常称为橡皮模变换&#xff0c;因为它们可看成是在一块橡皮模上印刷一幅图像&#xff0c;然后根据预定的一组规则拉伸该薄膜。在数字图像处理中&#xff0c;几何变换由两个基本操作组成&#xff1a;(1)坐标…

C和汇编混合编程----实现浮点数的加减乘除

加法 C程序&#xff1a; #include "stdio.h"int main() {float a1.0;float b2.34;float c;cab;printf("c%f",c);return 0; }反汇编之后&#xff0c;实现加法的关键程序 5: float a1.0; 00401028 C7 45 FC 00 00 80 3F mov dword ptr [eb…

【Wordpress】分享500多款国外WordPress经典主题 其之三

从国外网站上淘来的WordPress主题&#xff0c;以前都是放在本人博客xcodeland.mooo.com上的后来空间挂掉了就转到这里来与大家分享。 modernclean 下载地址 just-business 下载地址 redrum 下载地址 aneducation 下载地址 artsie 下载地址 eveningalone 下载地址 wasabi …

C和混编混合编程----strcpy缓存溢出原理

今天老师给了一到程序&#xff0c;让我们分析分析原理&#xff0c;关于strcpy缓存溢出原理的&#xff0c;反汇编一遍遍调试&#xff0c;终于看明白了&#xff0c;记录一下 C程序&#xff1a; #include "string.h" #include "stdio.h" char *shellcode&quo…

C和汇编混合编程--------函数调用后ebp、esp值问题

今天老师又给了一个程序&#xff0c;让我们分析&#xff0c;记录一下分析过程 程序&#xff1a; #include "stdio.h" #include "string.h"char *shellcode"\x64\x65\x66\x67\x68\x69\x70\x71\x05\x10\x40\x00"; void fun1(int a, int b) {print…

android游戏黑屏,第五人格游戏进不去黑屏解决办法

小编今天给各位玩家朋友们带来的是第五人格游戏进不去黑屏解决办法&#xff0c;很多的玩家朋友们在第五人格更新后都出现了黑屏、游戏无法进入等情况&#xff0c;这应该怎么办呢&#xff1f;小编把解决方法给大家整理在了下方&#xff0c;感兴趣的小伙伴们快来跟小编一起往下看…