算法性能評估:時間複雜度和空間複雜度(面試)

算法的性能分析是算法設計中很是重要的方面,要想編寫出能高效運行的程序,咱們就須要考慮到算法的效率。 
算法的效率主要由如下兩個複雜度來評估:算法

 
時間複雜度:評估執行程序所需的時間。能夠估算出程序對處理器的使用程度。算法的時間複雜度通常是問題規模的函數,一般用T=T(n)表示,其中,n表示問題的規模,即算法所處理的數據量。T表示算法所用時間。數據結構

算法的執行時間=該算法全部語句執行次數(包括重複執行次數)* 執行每條語句所花費時間總和。因爲每條語句的執行時間是cpu速度決定的,對計算機而言是常數,所以能夠忽略不計,只考慮語句的執行次數(頻率或頻度)。爲了進一步簡化計算,能夠只用算法中某條重要語句(執行時間最長的語句)的執行頻度。換句話說就是時間複雜度是主要語句頻度的倍數。函數

備註:一個算法執行所耗費的時間,從理論上是不能算出來的,必須上機運行測試才能知道。但咱們不可能也沒有必要對每一個算法都上機測試,只需知道哪一個算法花費的時間多,哪一個算法花費的時間少就能夠了。而且一個算法花費的時間與算法中語句的執行次數成正比例,哪一個算法中語句執行次數多,它花費時間就多。一個算法中的語句執行次數稱爲語句頻度或時間頻度。記爲T(n)。性能

 
空間複雜度:評估執行程序所需的存儲空間。能夠估算出程序對計算機內存的使用程度。不包括算法程序代碼和所處理的數據自己所佔空間部分。一般用所使用額外空間的字節數表示。其算法比較簡單,記爲S=S(n),其中,n表示問題規模。測試

設計算法時,通常是要先考慮系統環境,而後權衡時間複雜度和空間複雜度,選取一個平衡點。不過,時間複雜度要比空間複雜度更容易產生問題,所以算法研究的主要也是時間複雜度,不特別說明的狀況下,複雜度就是指時間複雜度。 設計

評價算法時間複雜度大小須要考慮的因素:內存

1,計算機硬件系統的運行速度。性能分析

2,所使用的軟件環境。效率

3,算法自己的策略,採用不一樣的存儲結構和不一樣的算法過程,是影響時間複雜度的本質緣由之一。軟件

4,所處理的數據量多少。

算法性能的評價方法:

1,過後統計法。

2,預先計算估算法。

 1>精確計算法

 2>近似估算法

這裏我介紹數據結構最經常使用的方法,也就是第二種的第二類。

T(n)=O(f(n));S(n)=O(g(n))

其中,f(n)和g(n)是一個已知的函數,做爲計較的尺度。

一般的比較尺度有:

O(1)稱爲常量級,算法的時間複雜度是一個常數。

O(n)稱爲線性級,時間複雜度是數據量n的線性函數。

O(n²)稱爲平方級,與數據量n的二次多項式函數屬於同一數量級。

O(n³)稱爲立方級,是n的三次多項式函數。

O(logn)稱爲對數級,是n的對數函數。

O(nlogn)稱爲介於線性級和平方級之間的一種數量級

O(2ⁿ)稱爲指數級,與數據量n的指數函數是一個數量級。

O(n!)稱爲階乘級,與數據量n的階乘是一個數量級。

 

它們之間的關係是: O(1)<O(logn)<O(n)<O(nlogn)<O(n²)<O(n³)<O(2ⁿ)<O(n!)

相關文章
相關標籤/搜索