1、了解輸入數據的量和運行時間的關系
使用相同的算法,輸入數據的量不同,運行時間也會不同。比如對10個數字排序和對1000000個數字排序,很容易想到就是后者運行時間更長。實際上會長多少呢?后者是前者的100倍,還是1000000倍?不僅需要理解不同算法在運行時間上的區別,也要了解根據輸入數據量的大小,算法的運行時間具體會產生多大變化。
2、如何求運行時間
使用“步數”來描述運行時間。“1步”就是計算的基本單位。通過測試“計算機從開始到結束總共執行了多少步”來求得算法的運行時間。
根據理論層面求出選擇排序的運行時間,選擇排序的步驟如下:
①從數列中尋找最小值
②將最小的值和數列左邊的數字交換,排序結束。回到①
如果數列中有n個數字,那么①中“尋找最小值”步驟只需要確認n個數字即可。這里將“確認1個數字的大小”作為操作的基本單位,需要的時間設置為Tc,那么步驟①運行的時間就是n*Tc。
將“兩個數字進行交換”也作為基本操作單位,需要時間設置為Ts,那么①和②總共重復n次,每經過“1輪”需要查找的數字就減少1個,因此總的運行時間如下:
雖然只剩1個數字不需要確認了,但是方便起見還是進行對它進行確認和交換時間計算比較好。
3、運行時間的表示方法
Tc和Ts都是基本的單位,與輸入無關。會根據輸入變化而變化就是n,即數列的長度。所以需要考慮n變大的情況,n越大,n2就越大,其他部分就相對變小了。也就是說對結果影響最大的是n2。所以刪除其他部分,將其結果表示為下面的形式。
通過這個可以大概了解到排序算法的運行時間與輸入量n的平方成正比。例如某個算法的運行時間如下:
那么結果可以用O(n3)表示。
如果運行時間為:
則可以用O(nlogn)表示。
備注:O表示“忽略重要項以外的內容”,O(n2)的意思是“算法的運行時間最長就是n2的常數倍”。