我需要计算哈希插入的运行时间。我一直在用时钟来做时间,但我一直都是零。有没有哪种方式最有效?
到目前为止,这是我的代码:
cout << "Testing chaining probing...\n";
HashTable_chaining ChainingHT( ITEM_NOT_FOUND, 101 );
int i = 0;
while(i != DataArray.size())
{
clock_t tStart = clock();
ChainingHT.insert(DataArray[i]);
cout<<"Time taken:"<<(double)(clock() - tStart)/100000<<endl;
if(i != NULL)
{
collision_count++;
}
i++;
}
答案 0 :(得分:3)
单个哈希插入太快无法测量。放
clock_t tstart = clock();
在您的计划开始时,执行百万次插入和
clock_t tend = clock();
最后。然后以浮点计算:
cout << "cpu time="
<< ((double)tend - (double)tstart) / CLOCKS_PER_SEC << endl;
典型的当前计算机每秒执行几次数十亿次基本机器指令(但时钟分辨率最好以毫秒为单位)。
答案 1 :(得分:1)
我的第一个猜测是插入非常快,所以你得到了零...我永远不会在你的代码中尝试。相反,我会做10000次插入,然后计算需要多长时间,并将该数字除以10000以获得插入所需的平均时间。
答案 2 :(得分:0)
运行10000/100000/1000000插入循环是可以的(您需要使用插入次数,直到获得一个永远无法运行的值)。
如果您在Windows中工作,请考虑使用performance counters来获得更好的分辨率(请参阅内部代码)。