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

5 11rgfslwdrzmiugiobmernjumq

Sample Output

5 4 6 2 3

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;}
}

数据结构记录--散列法实验相关推荐

  1. 哈希表(Hash Table)及散列法(Hashing)

    bigshuai 哈希 源地址 http://www.cnblogs.com/bigshuai/articles/2398116.html 哈希表(Hash Table)及散列法(Hashing) 数 ...

  2. 区块链基础:散列法 (Hashing)

    灯泡,比特(bits)与字节(bytes) 你可能知道计算机中所有的数据都是由0或1组成的,最小的数据单位就是一个比特(bit,或位),它也是0或者1.想象一下,一台计算机拥有着很多的灯泡,而这个灯泡 ...

  3. 散列表相关题目(线性探测再散列法)

    散列表相关题目(线性探测再散列法) 一.题目 将关键字序列(7.8.30.11.18.9.14)散列存储到散列表中.散列表的存储空间是一个下标从0开始的一维数组,散列函数为H(key)=(key×3) ...

  4. hash table(全域散列法实现的哈希表)

    hash table(全域散列法实现的哈希表) 利用每次重建哈希表时随机生成散列函数 #ifndef C11LEARN_HASHUNIVERSAL_H #define C11LEARN_HASHUNI ...

  5. hash table(用乘法散列法实现)

    hash table(用乘法散列法实现) #ifndef C11LEARN_HASHMULTI_H #define C11LEARN_HASHMULTI_H #include "HashDi ...

  6. Hash-table(用除法散列法实现)

    Hash-table(用除法散列法实现) 关键字只支持int型,初学者版本 用链表解决冲突问题 #ifndef C11LEARN_HASHDIVISION_H #define C11LEARN_HAS ...

  7. java 散列集_java数据结构之散列集HashSet与散列表Hashtable

    java数据结构之散列集HashSet与散列表Hashtable 1.散列集HashSet HashSet类在java.util包中 A.构造方法:HashSet() B.常用方法 public bo ...

  8. c#加密:二、散列法 MD5、SHA256、SHA512

    散列法提供了一种单向加密的方式.这种方式非常适用于在数据库中存储密码.因为我们无须(也不希望)提供解密的信息.在登录验证时,只需简单地将用户的输入进行散列,并和数据库中存储的散列值进行比较即可. 由于 ...

  9. 散列(2)线性探测法和双重散列法

    接上篇 散列的简要描述和链地址法 解决散列冲突的方法: 1. 线性探测法 如果我们能够预测将要存入表中元素的数目,而且我们有足够的内存空间可以容纳带有空闲空间的所有关键字,那么使用链地址法是不值得的. ...

最新文章

  1. 解决load cycle count的一个偏方,告别硬盘卡卡响
  2. cass插件_南方CASS专题系列,全套教程+视频讲解+插件汇总,全部打包速带走
  3. 应用于服务供应商网络的IP+光纤业务实现解决方案
  4. 用什么擦地最干净脑筋急转弯_脑筋急转弯:手机的反义词是什么?答案让人笑得肚子疼!...
  5. PowerShell 收集计算机相关信息
  6. android 传感器 balance filter,Android 传感器 API.doc
  7. 终极结束进程方法API
  8. Android实现圆形圆角图片
  9. 使用KELI调试单片机代码时,一定要用Open Project的方式打开。
  10. 盖洛普Q12测评法(转载)
  11. matlab 的滤波器分析,滤波器matlab分析
  12. 怎么查看内网ip?如何分辨IP是公网IP还是内网IP?
  13. 天大计算机研究生毕业工资,本科生VS研究生工资差距这么大?又一高校薪资排行曝光,看完扎心了……...
  14. 点阵发光管怎么用C语言编程,LED点阵经验各种点阵驱动方法讲解
  15. tolower c语言,tolower_字符串 | Strings_C_参考手册_非常教程
  16. php7.0 phalcon_phalcon php7
  17. java freemarker转PDF和Word
  18. RPA拾取界面元素方式
  19. 用计算机弹出记事本,win7电脑开机就会弹出Desktop.ini记事本怎么办?
  20. 12. FolderDialog、FileDialog、FolderListModel的简单使用

热门文章

  1. 5g基站服务器需要芯片吗,华为发布业内5G基站的核心“天罡芯片”,估计他们肠子都悔青了吧...
  2. 大神手把手教源码阅读的方法、误区以及三种境界
  3. Eunomia: 让 ebpf 程序的分发和使用像网页和 web 服务一样自然
  4. JavaScript:实现字符串是否是有效的电子邮件地址算法(附完整源码)
  5. Generic Timer Module (GTM)
  6. OSError: cannot load library ‘C:\...\site-packages\_soundfile_data\libsndfile64bit.dll‘: error 0x7e
  7. CAN通信(一)——认识CAN总线
  8. 聊一聊单片机和服务器
  9. html rfftq15.gif,stm32F4固件库
  10. 【效率】好用到爆!GitHub 星标 32.5k+的命令行软件管理神器,功能真心强大!...