所以,我只是在C++中實現一些排序算法,但我發現它在此刻進行基準測試令人氣憤,因爲它花費的時間太長運行算法,但創建輸入數據。我目前測試每個輸入的長度(1000,2000,...)10次,以獲得平均的時間。對於這些10倍,我創建了正確長度的新的隨機vector
,這樣做:最快的方法來創建基準的隨機向量
// Each of the 10 times.
for(int j = 0; j < 10; j++) {
A.clear();
// 'i' is the current input size.
for(int k = 0; k < i; k++) {
A.push_back(rand() % 10000);
}
// Other stuff
}
有沒有更好的方式來做到這一點?我是否應該打算在10000上限rand(),還是隻是我的OCD腦袋喜歡數字? (也就是說,當你認爲它的執行達到 - 目前爲止,這個模操作實際上會佔用大量的時間 - 每10次循環10,000次)。或者,我應該每次運行時都創建一個新的向量分類?我一直這樣做是因爲我覺得有可能創建的向量可能有偏差,所以如果生成這個向量並且使用了10次,答案可能會完全失敗......
我無法想象相比,隨機數生成的模數是相關的。但是,測試很容易:只需將其刪除並測量即可。 (你做測試版本,不是嗎?) – sbi 2010-07-24 16:05:54
Sorting algorithms * really * like random data。你不是創建一個準確的基準,使用*真實*數據。 – 2010-07-24 16:10:18
@Hans Passant你能舉出我能在哪裏找到一些不錯的預製真實數據的例子嗎?因爲恐怕在考慮如何生成*真實*數據時我不知道從哪裏開始......特別是當我嘗試甚至想象有多少種不同類型(非常預先排序,非常混亂等),以及哪些會更普遍... – Stephen 2010-07-24 16:17:05