2017-02-27 62 views
0

這可能是一個非常開放的問題。 我必須快速測量某段代碼的時間。我正在使用std::chrono::high_resolution_clock功能。我必須運行此代碼進行多次迭代並測量持續時間。代碼的統計抽樣

所以,這裏是問題:我可以測量最小和最大持續時間值,並使用採樣數計算平均值。在這種情況下,我只需要存儲4個值。但我也想知道數據是如何分佈的。計算標準偏差或直方圖需要存儲所有數據點。但是,這將需要一個巨大的初始數據結構或動態增長的數據結構 - 兩者都會影響我嵌入式系統上測量的代碼。 有沒有一種方法可以使用前一個樣本的標準偏差來計算此樣本的標準偏差?

回答

0

標準偏差或直方圖的計算要求所有數據點來存儲

這就是平凡假。您可以使用Welford算法計算運行標準偏差,只需要一個額外的變量,除了運行平均值和當前元素數。

至於直方圖,你不需要保留所有的數據 - 你只需要保留每個箱的計數,每次你有新的樣本時增加正確的箱。當然,爲了支付這種簡單的方法,您需要事先知道預計的範圍和垃圾箱數量。如果這不可行,則始終可以從較小範圍內的小容器開始,並在遇到當前範圍外的元素時縮放容器大小(合併相鄰容器)。同樣,所有這些只需要一個固定數量的內存(每個bin有一個整數,範圍有兩個值)。

+0

這是正確的,我不知道預期值的範圍。自動調整垃圾箱可能工作。你知道一個開源代碼的例子嗎?感謝Welford的算法。 – ilya1725