数据结构记录--散列法实验
Home | Web Board | ProblemSet | Standing | Status | Statistics |
Problem A: 散列法的实验
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 1008 Solved: 310
[Submit][Status][Web Board]
Description
散列法中,散列函数构造方法多种多样,同时对于同一散列函数解决冲突的方法也可以不同。两者是影响查询算法性能的关键因素。
在此用以下散列函数来实现字符串哈希值的计算。
H(key) = (s[0] * 31^(n – 1) + s[1] * 31 ^ (n – 2) + ….. + s[n – 1] * 31 ^ 0) % mod;
此处 ^ 代表乘方,s[i] 代表字符的ASCII值
用二次探测再散列的方法处理冲突Hi = ( H(key) + di ) % mod
di=1,-1,4,-4,9, -9, 16, -16… 注:输入必须保证冲突处理所取的步长小于(1 << 31)
INPUT
样例包含多组,到EOF结束。
对于每组样例,第一行输入两个数N和mod (其中1 <= N <= 1000,N < mod <= 2000且mod为素数,字符串长度小于1000),N和mod分别表示字符串个数和模。
接下来n行,每行一个只含有小写字母的字符串。
Input
样例包含多组,到EOF结束。
对于每组样例,第一行输入两个数N和mod (其中1 <= N <= 1000,N < mod <= 2000且mod为素数,字符串长度小于1000),N和mod分别表示字符串个数和模。
接下来n行,每行一个只含有小写字母的字符串。
Output
依次输出每个关键字在Hash函数中的存储下标序列(按照哈希值从小到大输出字符串)。
Sample Input
Sample Output
HINT
哈希值计算过程中要注意取模,防止溢出
可能用到的两个取模公式:(a + b) % mod = (a % mod + b % mod) % mod
(a – b) % mod = (a % mod – b % mod + mod) % mod
Append Code
[Submit][Status][Web Board]
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define m 10005
typedef string KeyType;
typedef struct
{KeyType key;
} HashTable;
long long int pow(int a,int b,int mod)
{long long int x=1,y=a;while(b){if(b&0x1)x=x*y%mod;y=y*y%mod;b>>=1;}return x;
}
int H(string s,int mod)
{int key;long long int k=0;for(int i=0; i<s.length(); i++){k+=(long long int)s[i]*pow(31,s.length()-1-i,mod);}key=k%mod;return key;
}
int put(HashTable *HT,string s,int n,int mod)
{int k=H(s,mod);int Hi=H(s,mod);if(HT[k].key.length()==0){HT[k].key=s;return k;}else{for(int i=1; i<31; i++){Hi = ( H(s,mod)% mod+ pow(i,2,mod)) % mod;if(HT[Hi].key.length()==0){HT[Hi].key=s;return Hi;}else{Hi = ( H(s,mod)%mod- pow(i,2,mod)+mod) % mod ;if(HT[Hi].key.length()==0){HT[Hi].key=s;return Hi;}}}}
}
int main()
{string st;int n,mod;while(scanf("%d %d",&n,&mod)!=EOF){HashTable HT[m];int temp[n];for(int i=0; i<n; i++){cin>>st;temp[i]=put(HT,st,n,mod);}for(int i=0; i<n; i++){if(i==0)cout<<temp[i];elsecout<<" "<<temp[i];}cout<<endl;}
}
数据结构记录--散列法实验相关推荐
- 哈希表(Hash Table)及散列法(Hashing)
bigshuai 哈希 源地址 http://www.cnblogs.com/bigshuai/articles/2398116.html 哈希表(Hash Table)及散列法(Hashing) 数 ...
- 区块链基础:散列法 (Hashing)
灯泡,比特(bits)与字节(bytes) 你可能知道计算机中所有的数据都是由0或1组成的,最小的数据单位就是一个比特(bit,或位),它也是0或者1.想象一下,一台计算机拥有着很多的灯泡,而这个灯泡 ...
- 散列表相关题目(线性探测再散列法)
散列表相关题目(线性探测再散列法) 一.题目 将关键字序列(7.8.30.11.18.9.14)散列存储到散列表中.散列表的存储空间是一个下标从0开始的一维数组,散列函数为H(key)=(key×3) ...
- hash table(全域散列法实现的哈希表)
hash table(全域散列法实现的哈希表) 利用每次重建哈希表时随机生成散列函数 #ifndef C11LEARN_HASHUNIVERSAL_H #define C11LEARN_HASHUNI ...
- hash table(用乘法散列法实现)
hash table(用乘法散列法实现) #ifndef C11LEARN_HASHMULTI_H #define C11LEARN_HASHMULTI_H #include "HashDi ...
- Hash-table(用除法散列法实现)
Hash-table(用除法散列法实现) 关键字只支持int型,初学者版本 用链表解决冲突问题 #ifndef C11LEARN_HASHDIVISION_H #define C11LEARN_HAS ...
- java 散列集_java数据结构之散列集HashSet与散列表Hashtable
java数据结构之散列集HashSet与散列表Hashtable 1.散列集HashSet HashSet类在java.util包中 A.构造方法:HashSet() B.常用方法 public bo ...
- c#加密:二、散列法 MD5、SHA256、SHA512
散列法提供了一种单向加密的方式.这种方式非常适用于在数据库中存储密码.因为我们无须(也不希望)提供解密的信息.在登录验证时,只需简单地将用户的输入进行散列,并和数据库中存储的散列值进行比较即可. 由于 ...
- 散列(2)线性探测法和双重散列法
接上篇 散列的简要描述和链地址法 解决散列冲突的方法: 1. 线性探测法 如果我们能够预测将要存入表中元素的数目,而且我们有足够的内存空间可以容纳带有空闲空间的所有关键字,那么使用链地址法是不值得的. ...
最新文章
- 解决load cycle count的一个偏方,告别硬盘卡卡响
- cass插件_南方CASS专题系列,全套教程+视频讲解+插件汇总,全部打包速带走
- 应用于服务供应商网络的IP+光纤业务实现解决方案
- 用什么擦地最干净脑筋急转弯_脑筋急转弯:手机的反义词是什么?答案让人笑得肚子疼!...
- PowerShell 收集计算机相关信息
- android 传感器 balance filter,Android 传感器 API.doc
- 终极结束进程方法API
- Android实现圆形圆角图片
- 使用KELI调试单片机代码时,一定要用Open Project的方式打开。
- 盖洛普Q12测评法(转载)
- matlab 的滤波器分析,滤波器matlab分析
- 怎么查看内网ip?如何分辨IP是公网IP还是内网IP?
- 天大计算机研究生毕业工资,本科生VS研究生工资差距这么大?又一高校薪资排行曝光,看完扎心了……...
- 点阵发光管怎么用C语言编程,LED点阵经验各种点阵驱动方法讲解
- tolower c语言,tolower_字符串 | Strings_C_参考手册_非常教程
- php7.0 phalcon_phalcon php7
- java freemarker转PDF和Word
- RPA拾取界面元素方式
- 用计算机弹出记事本,win7电脑开机就会弹出Desktop.ini记事本怎么办?
- 12. FolderDialog、FileDialog、FolderListModel的简单使用
热门文章
- 5g基站服务器需要芯片吗,华为发布业内5G基站的核心“天罡芯片”,估计他们肠子都悔青了吧...
- 大神手把手教源码阅读的方法、误区以及三种境界
- Eunomia: 让 ebpf 程序的分发和使用像网页和 web 服务一样自然
- JavaScript:实现字符串是否是有效的电子邮件地址算法(附完整源码)
- Generic Timer Module (GTM)
- OSError: cannot load library ‘C:\...\site-packages\_soundfile_data\libsndfile64bit.dll‘: error 0x7e
- CAN通信(一)——认识CAN总线
- 聊一聊单片机和服务器
- html rfftq15.gif,stm32F4固件库
- 【效率】好用到爆!GitHub 星标 32.5k+的命令行软件管理神器,功能真心强大!...