2017-02-27 63 views
0

这可能是一个非常开放的问题。 我必须快速测量某段代码的时间。我正在使用std::chrono::high_resolution_clock功能。我必须运行此代码进行多次迭代并测量持续时间。代码的统计抽样

所以,这里是问题:我可以测量最小和最大持续时间值,并使用采样数计算平均值。在这种情况下,我只需要存储4个值。但我也想知道数据是如何分布的。计算标准偏差或直方图需要存储所有数据点。但是,这将需要一个巨大的初始数据结构或动态增长的数据结构 - 两者都会影响我嵌入式系统上测量的代码。 有没有一种方法可以使用前一个样本的标准偏差来计算此样本的标准偏差?

回答

0

标准偏差或直方图的计算要求所有数据点来存储

这就是平凡假。您可以使用Welford算法计算运行标准偏差,只需要一个额外的变量,除了运行平均值和当前元素数。

至于直方图,你不需要保留所有的数据 - 你只需要保留每个箱的计数,每次你有新的样本时增加正确的箱。当然,为了支付这种简单的方法,您需要事先知道预计的范围和垃圾箱数量。如果这不可行,则始终可以从较小范围内的小容器开始,并在遇到当前范围外的元素时缩放容器大小(合并相邻容器)。同样,所有这些只需要一个固定数量的内存(每个bin有一个整数,范围有两个值)。

+0

这是正确的,我不知道预期值的范围。自动调整垃圾箱可能工作。你知道一个开源代码的例子吗?感谢Welford的算法。 – ilya1725