我試圖找出在使用線性探測公式(h(k)= k%T)的指定大小的哈希表中發生碰撞之前的平均插入次數,其中T是表大小)。我正在做100次「實驗」來計算碰撞前插入的平均次數。這是我寫這樣做,只是大小23臺代碼:矢量沒有正確填充
#include <iostream>
#include <vector>
#include <algorithm>
#include <time.h>
using namespace std;
int main()
{
int sizeArray[7] = { 7, 11, 13, 17, 19, 23, 29 }; // ignore for now
double resultArray[7] = { 0 }; // ignore for now
vector<double> hashNumVec; // stores hash keys
int hashValue = 0;
int count = 0;
double average;
vector<double> resultVec;
int randNum;
srand(time(NULL));
for (int k = 0; k < 100; k++){ // 100 experiments
randNum = rand() % 100 + 1; // generate random number
hashValue = (randNum) % 23; // hash value for T = 23
vector<double>::iterator it;
it = find(hashNumVec.begin(), hashNumVec.end(), hashValue);
if (it == hashNumVec.end()){ //no collision
count++;
hashNumVec.push_back(hashValue);
}
else
{
resultVec.push_back(count); // add the amount of insertions to vector
break;
}
}
for (auto i = resultVec.begin(); i != resultVec.end(); ++i)
cout << *i << ' ';
return 0;
}
我期待我的矢量與100點的值來填充。它們中的每一個都是計算碰撞次數的計數值。但是,當我打印出來時,它只顯示我在矢量中有一個值。我究竟做錯了什麼?
編輯:我只是試圖存儲每次碰到碰撞所需的插入次數。因此,讓我們說第一次碰撞前需要6次插入,然後碰撞前需要5次插入,碰撞前需要4次插入..等等我想讓我的向量讀取6 5 4 ...
我該如何解決它?如果我不休息,我的矢量充滿了許多沒有意義的價值。 – FlameDra
我做到了。我的結果向量現在看起來像是'5 12 13 14 14 14 14 14 15 16 16 16 16 16 17 18 18 18 18 18 19 19 19 20 20 20 20 20 20 21 21 22 22 22 22 22 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23'這應該是不正確的。碰撞前插入物的平均數量應該在6-8左右。 – FlameDra
我試過你的編輯,其值更像'8 2 3 1 3 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0所以不應該有那麼多的零。 – FlameDra