我是靠谱客的博主 俭朴蜜蜂,这篇文章主要介绍哈希(哈希表的应用),现在分享给大家,希望可以做个参考。

将一个由若干个不同正整数构成的整数序列插入到一个哈希表中,然后输出输入数字的位置。

哈希函数定义为 H(key)=key%TSize,其中 TSize 是哈希表的最大大小。

利用只具有正增量的二次探测法来解决冲突。

注意,哈希表的大小最好是素数,如果用户给出的最大大小不是素数,则必须将表大小重新定义为大于用户给出的大小的最小素数。

输入格式

第一行包含两个整数 MSizeN,分别表示用户定义的表的大小以及输入数字的数量。

第二行包含 N个不同的正整数,数字之间用空格隔开。

输出格式

在一行中,输出每个输入数字的相应位置(索引从 0 开始),数字之间用空格隔开,行尾不得有多余空格。

如果无法插入某个数字,则输出 -

数据范围

1≤MSize≤10^4,

1≤N≤MSize,

输入数字均在 [1,10^5]范围内。

输入样例:

复制代码
1
2
4 4 10 6 4 15

输出样例:

复制代码
1
0 1 4 -

题解

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include<iostream> #include<vector> #include<bits/stdc++.h> typedef long long int ll; const int N=1e5+10; using namespace std; ll str[N]; int main(){ ll n,m,a,t=0,x,c=0; vector<ll> mp; memset(str,0,sizeof(str)); cin>>m>>n; for(int i=0;i<n;i++){ cin>>a; mp.push_back(a); } if(m==1) m=2; else{ for(int i=m;;i++){ t=0; for(int j=2;j<i;j++){ if(i%j==0){ t=1; break; } } if(t==0){ m=i; break; } } } for(int i=0;i<n;i++){ t=mp[i]%m; if(str[t]==0){ cout<<t<<" "; str[t]=1; } else{ c=0; for(int j=1;j<m;j++){ x=(t+j*j)%m; if(str[x]==0){ c=1; cout<<x<<" "; str[x]=1; break; } } if(c==0) cout<<"-"<<" "; } } return 0; }

最后

以上就是俭朴蜜蜂最近收集整理的关于哈希(哈希表的应用)的全部内容,更多相关哈希(哈希表内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(96)

评论列表共有 0 条评论

立即
投稿
返回
顶部