如何知道在c ++中计算算法的执行时间?

时间:2009-12-22 22:57:20

标签: c++ algorithm hash time

我想通过查看算法的运行时性能来测试哪种数据结构最好,我该怎么做?

例如我已经有hashmap<string, int> hmp;假设我"apple"中有hashmap我想知道执行以下语句需要多长时间:hmp["apple"]

我该如何计时?

谢谢!

4 个答案:

答案 0 :(得分:5)

首先看看我对this question的回复;它包含一个便携式(windows / linux)函数来获取以毫秒为单位的时间。

接下来,做这样的事情:

int64 start_time = GetTimeMs64();
const int NUM_TIMES = 100000; /* Choose this so it takes at the very least half a minute to run */

for (int i = 0; i < NUM_TIMES; ++i) {
   /* Code you want to time.. */
}

double milliseconds = (GetTimeMs64() - start_time) / (double)NUM_TIMES;

全部完成! (注意我还没有尝试编译它)

答案 1 :(得分:1)

您可以调整程序以执行数千或数百万个散列映射查找,理想情况是随机选择,以及时间。

答案 2 :(得分:0)

如果您真的想在数据结构之间做出决定,则需要设计一个至少近似于您将如何使用该结构的测试。一些结构对于少量数据表现更好,一些结构对于大量数据表现更好。有些内容在执行大量读取时表现更好,有些在执行大量插入/写入时性能更好。有些数据几乎完全相同,有些表现更好,有些数据表现更好,非常独特。如果你只执行一次算法,一些算法的表现会更好,如果你做了一百万次,其他算法的表现会更好,因为它们具有更好的代码局部性,使得缓存命中率更高。我的意思是说,祝你好运:)。

答案 3 :(得分:0)

您可以考虑绘制数据图并导出其(数学)函数。例如,使用10,100,1000,10000和100000次迭代运行一些试验。使用迭代次数作为x变量并将结果时间作为y变量,绘制图表。从这里你可以确定描述代码性能的函数,使用线性回归(也称为软件中的曲线拟合) - 我使用 Graphical Analysis 对此。

使用其他数据结构/代码重复试验并执行相同的图形程序,然后比较图形和函数。

您还可以使用此数据来确定每个数据结构的有效Big O时间复杂度。