我想通过查看算法的运行时性能来测试哪种数据结构最好,我该怎么做?
例如我已经有hashmap<string, int> hmp
;假设我"apple"
中有hashmap
我想知道执行以下语句需要多长时间:hmp["apple"]
。
我该如何计时?
谢谢!
答案 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时间复杂度。