主要考察散列表平均查找失败长度,掌握概念也就不难了
平均查找不成功概念及计算方法可参考:哈希表查找——成功和不成功时的平均查找长度
#include <iostream>
#include <vector>
using namespace std;
int main() {
int tsize,m,n,num;
cin>>tsize>>m>>n;
vector<int> rec(tsize,-1);
for(int i=0;i<n;i++){
cin>>num;
for(int j = 0; j < tsize; j++){
int pos = (num % m + j) % tsize;
if(rec[pos] == -1){
rec[pos] = num;
break;
}
}
}
double sum = 0;
//根据哈希函数地址为MODm,因此任何一个数经散列函数计算以后的初始地址只可能在0~m-1的位置
for(int i = 0; i < m; i++){
for(int j = 0; j <= tsize; j++){
sum++; //计算到此位置离空位置的距离
//找到空位置
int pos = (i + j) % tsize;
if(rec[pos] == -1){
break;
}
}
}
printf("%.1f", sum/m);
return 0;
}