1023. 简单哈希2 哈希冲突的平方探测法
来源:互联网 发布:变声软件手机版 编辑:程序博客网 时间:2024/05/22 07:05
Description
哈希表也称为散列表,它是通过关键码值而进行直接访问的数据结构。即它通过把一个关键码映射到表中的一个位置来访问记录,以加快查找速度。当然了在做关键码映射的时候,难免会把不同的关键码映射到相同的位置,这时冲突就产生了。使用平方探测法(Quadratic Probing)可以解决哈希中的冲突问题它的基本思想是:设hash函数为h(key) = d,并且假定其存储结构为循环数组,则当冲突发生时,它接下来需要探测的位置为h+1, h+4, h+9, ……, h+i^2,……直到冲突得到解决。
例如, 现有关键码集为 {47,7,29,11,16,92,22,8,3},
设:哈希表表长为m=11;哈希函数为Hash(key)=key mod 11;采用平方探测法处理冲突。建哈希表如下:
现在给定哈希函数为Hash(key)= key mod m,要求按照上述规则, 使用平方探测法处理冲突的方法建立相应哈希表,并且处理以下操作。
Add a——表示把a(|a| <= 1000000000)加入到hash表中。
Query a——表示查询a是否在hash表中
Pint——表示打印出当前的hash表状态
End——结束操作
Input
输入的第一行为一个整数m(1<m<=1000),表示hash表所用的数组的大小,同时也表示hash函数需要模的值,见题意描述。
接下来会有若干行,表示操作(如题所述),当输入为End时结束程序。
Output
对于每一个Query a操作,如果a在hash表里面,输出yes,否则输出no,对于每一个Print函数,打印当前的hash表状态,格式为idx#key,其中idx表示数组下标,key表示关键值,如果该位置没有关键值,则输出NULL,每个元素占一行,如对应于上面所述hash表,它的Print结果为
0#11
1#22
2#NULL
3#47
4#92
5#16
6#3
7#7
8#29
9#8
10#NULL
Sample Input
5Add 1Add 5Add 6Query 1Query 7PrintEnd
Sample Output
yesno0#51#12#63#NULL4#NULL
#include<stdio.h>#include <string.h>#include<stdlib.h>int main(){int hash_len;int j;long long key[10000];int hash[10000];char op[10];for(int i=0;i<10000;i++)hash[i]=-1;int query;scanf("%d",&hash_len);int jj=0;while(1){ scanf("%s",op); if(strcmp(op,"End")==0) break; if(strcmp(op,"Add")==0){ scanf("%lld",&key[jj]); int h = key[jj]%hash_len;//哈希取模 int conflic = 1;//用于解决冲突的计数器 int ii=0; while(1){ if(hash[h]==-1) {//没有哈希地址冲突 hash[h] = key[jj]; break; } else { h= h+conflic*conflic-ii*ii; if((h+conflic*conflic-ii*ii)>=hash_len){ h%=hash_len;//链表循环 } ii++; conflic++; } } jj++; } if(strcmp(op,"Print")==0){ for(int i=0;i<hash_len;i++){ printf("%d",i); printf("#"); if(hash[i]==-1) printf("NULL\n");else printf("%d\n",hash[i]); } } if(strcmp(op,"Query")==0){ int exit=0; scanf("%d",&query); for(int i=0;i<hash_len;i++){ if(hash[i]==query) exit=1; } if(exit) printf("yes\n"); else printf("no\n"); } }return 0;}
- 1023. 简单哈希2 哈希冲突的平方探测法
- 详细图解什么叫平方探查法即二次探测再散列和线性探测再散列(数据结构 哈希函数 哈希冲突)
- 哈希查找之平方探测
- 处理哈希冲突的线性探测法
- 哈希冲突的处理【闭散列方法-线性探测和二次探测】
- 数据结构--解决散列冲突,平方探测法
- 散列表(平方探测法解决冲突)
- 平方探测和线性探测解决散列表冲突的区别(优点及缺点)
- 平方探测法hash
- 第十五周项目2 利用线性探测解决哈希冲突
- hash解决冲突之---平方探测
- 计算使用线性探测、平方探测以及双散列插入的长随机序列所需要的冲突次数
- 【代码】key-value模式下的哈希二次探测与简单的哈希类的实现
- 哈希之线性探测法
- 从平方探测法引申——平方数列取模的规律数列
- 平方探测的另一种插入方式
- 散列表实现(平方探测法)
- 【除留余数法定义hash函数+平方探测法解决hash冲突】数据结构实验之查找五:平方之哈希表
- Sublime Text3常用快捷键
- 【四圣龙神录的编程教室】第7章、把面板表示出来吧
- 防止ISE综合时内部信号/模块被综合掉
- ubuntu下安装和配置java开发环境
- C#汉字分词程序
- 1023. 简单哈希2 哈希冲突的平方探测法
- C++中缀表达式转换后缀表达式
- OSPF选路问题
- py2exe 打包 pyqt程序的图片不显示的问题
- win7 eclipse: selection does not contain a main type
- GetLogicalDriveStrings的体验
- 安卓基础学习_ Android数据存储与IO
- 黑马程序员——jdk1.5新特性
- 笔记本网络连接状况未知,依赖服务或组无法启动