算法的時間複雜度、空間複雜度

時間複雜度和空間複雜度是度量算法效率的常用指標

時間度量

  1. 事後統計,不常用
  2. 事前統計影響因素:
    算法策略 問題規模 程序語言 代碼質量 機器執行指令的速度

撇開軟硬件的影響,算法運行工作量的大小隻依賴於問題的規模(通常用整數n表示)
一個算法是由控制結構(順序,分支,循環三種)和原操作(指固有數據類型的操作)構成,則算法時間取決於兩者的綜合效果。

爲了便於比較同一問題的不同算法,通常從算法中選取一種對於所研究問題來說是基本操作的原操作,以該基本操作重複執行的次數作爲算法的時間度量。
算法的時間複雜度記做 T(n)=O(f(n))
它表示隨問題規模n的增大,算法執行時間的增長率和 f(n) 的增長率相同

原操作的執行次數與包含他的語句的執行次數相同

  • {++x; s = 0; }
  • for( i = 1 ; i <= n ; ++i ) { ++x ; s += x;}
  • for( j = 1 ; j <= n ; ++j )
    for( k = 1 ; k <= n ; ++k ) { ++x ; s += x;}

含基本操作“x+1”的語句的頻度分別爲1,n和n^2,所以這三個程序段的時間複雜度分別爲O(1)、O(n)、O( n^2 ) ,分別稱爲常量階,線性階和平方階。

有些情況下,算法中基本操作重複執行的次數還隨問題的輸入數據集不同而不同。例如在冒泡排序算法中,“交換序列中相鄰兩個整數”這個基本操作執行次數可能爲0,或者O(n^2)。這類算法時間複雜度有兩種表示方法:一是考慮所有情況下時間複雜度的期望值(麻煩,而且出現概率難確定,所以不常用);另一種是以最壞的情況下的時間複雜度作爲該算法的時間複雜度。

空間複雜度

S(n)=O(f(n))
存儲空間,工作空間(計算等),輔助存儲空間等
空間複雜度感覺不怎麼常用。。。不研究了。。。。

參考 嚴蔚敏,吳偉民編著的《數據結構》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章