2015-10-23 140 views
5

的問題相當多狀態就是我要問的運行時間。比較算法

我有一個算法,我在徘徊什麼是更好的方法來實現啊'大哦'運行時間 - 通過圖形和繪製輸入的數量與運行時間或通過漸近分析?

對於我的圖我目前使用:

private int startTime = System.currentTimeMillis(); //At start of algorithm 
private int endTime = System.currentTimeMillis(); //At the end of algorithm 
int runningTime = endTime - startTime; 

什麼是「測量」的alogrithm的運行時間的兩種方法之間的區別?

回答

4

「經驗」(繪製運行時間與輸入大小對比)的問題是它僅適用於提供的測試案例

的「理論」的分析爲您提供了算法的所有缺陷,可以分析出真正的最佳案例/平均情況/ ...利用數學,它是保證是正確的。

一個很好的常見的例子是simplex algorithm,這是相當快的一般,但確實有一些輸入偶爾指數最壞情況下的運行時間。另一方面,由於漸近分析忽略了常量,並且僅適用於「足夠大的輸入」,所以如果輸入預期相對較小,那麼它們幾乎沒有用處,並且很難區分2種算法在相同的複雜度類中,但具有不同的常量,並且常量在生產代碼中很重要。

tl; dr:每個都有自己的用法,並且兩者結合比僅使用其中一個更好。

作爲一個側面說明,使用經驗方法時,一定要使用統計工具,並statistical hypothesis testing專門作出結論。此外,永遠記住,實證工具只適用於類的你檢查問題(所以如果你不檢查,例如排序後的數組,你不會知道,如果它遇到一個快速排序可能需要顯著更長的時間)。