PAT 1078. Hashing (25)
来源:互联网 发布:linux 司机售票员问题 编辑:程序博客网 时间:2024/05/01 00:01
哈希表问题,注意要点,1不是prime,最小的prime number是2.
二次探测即,hi = (h(x) + i^2) % Msize,0 <= i <= m-1;
下面的方法用了等式:i^2 = (i - 1)^2 + 2*i - 1,来用加法替代乘法。
代码如下:
#include <iostream>using namespace std;int a[10001];int findPos(int x,int Msize){int offset = 1;int currentPos = x % Msize;bool flag = false;while(a[currentPos] != -1 && a[currentPos] != x) {currentPos += offset;offset += 2;if(currentPos >= Msize)currentPos -= Msize;if(offset > (2*Msize - 3)){flag = true;break;}}if(flag)return -1;return currentPos;}bool isPrime(int x){if(x == 1)return false;for(int i = 2;i<=x/2;i++)if(x % i == 0)return false;return true;}int findMsize(int x){while(!isPrime(x)){x= x + 1; }return x;}int main(){int Msize,N;cin >> Msize >> N;Msize = findMsize(Msize);int i;for(i = 0;i<Msize;i++)a[i] = -1;for(i = 0;i<N;i++){int num;cin >> num;int k = findPos(num,Msize);if(i == 0)if(k != -1){cout << k;a[k] = num;}elsecout << "-";else{if(k != -1){cout << " " << k;a[k] = num;}elsecout << " -";}}return 0;}
0 0
- PAT 1078. Hashing (25)
- pat 1078. Hashing (25)
- PAT 1078. Hashing (25)
- PAT 1078. Hashing (25)
- PAT 1078. Hashing (25)
- PAT 1078. Hashing (25)
- PAT 1078. Hashing (25)
- 【PAT】1078. Hashing (25)
- 1078. Hashing (25) PAT
- pat 1078. Hashing (25)
- PAT 1078. Hashing (25)
- PAT 1078.Hashing (25)
- PAT 1078. Hashing (25)
- PAT (Advanced) 1078. Hashing (25)
- PAT A 1078. Hashing (25)
- PAT(A) - 1078. Hashing (25)
- 1078. Hashing (25) PAT甲级
- PAT-A-1078. Hashing (25)
- 哈希(hash) 之 开放地址法(poj)
- 静态链接库和动态链接库
- 【Git管理】Git 远程操作
- apache.commons.lang.StringUtils&ArrayUtils
- WoSign数字证书产品有何特别优势? ---- UTN-WoSign根证书系统
- PAT 1078. Hashing (25)
- C和C++中如何互相调用(#ifdef __cplusplus)
- 原始图像数据
- 太阳无限哈哦一
- Terrascan去除地面点
- .net using的用途
- nyoj844 A+B Problem(V)
- SQL表结构复制及表数据复制
- 常见查看LINUX配置命令