1.時間複雜度
1.1 時間頻度
乙個演算法中語句的執行次數稱為語句頻度或時間頻度。記為t(n)。n稱為問題的規模,當n不斷變化時,時間頻度t(n)也會不斷變化。
1.2 定義
一般情況下,演算法中基本語句重複執行的次數是問題規模n的某個函式,用t(n)表示。若有某個輔助函式f(n),使得當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式。記作:t(n)=o(f(n)) 。 o(f(n))稱作演算法的漸近時間複雜度,簡稱時間複雜度。
其中,o表示數量級。該式表示隨著問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,即當n趨於正無窮時t(n)的上界是c*f(n)。
1.3 時間複雜度按數量級遞增排序:
常數階o(1)、對數階o(log2^n)、線性階o(n),、線性對數階o(nlog2^n)、平方階o(n^2)、立方階o(n^3),…,k次方階o(n^k)、指數階o(2^n)。
1.4 計算時間複雜度的基本步驟
a. 找出所有語句中頻度最大(執行次數最多)的那條語句作為基本語句。
b. 計算基本語句執行次數的數量級。在計算時,可以忽略所有低次冪項和最高次冪項的係數。
c. 取其基本語句執行次數的數量級放入符號「o」中即可。
1.5 計算技巧
a. 如果演算法的執行時間不隨問題規模n的增加而增長,即演算法中的語句頻度是個常數,即使這個常數再大,演算法時間複雜度都是o(1)。
例:for(i=0;i<10000;i++)
b. 在時間頻度不相同時,時間複雜度有可能相同。如:t(n)=n^2+n+1與t(n)=2n^2+3n+2。它們的頻度不同,但時間複雜度相同,都為o(n^2)。
c. 當有若干個巢狀迴圈語句時,演算法的時間複雜度通常由最深層迴圈內的基本語句決定;如果演算法中包含並列的迴圈,則將並列迴圈的時間複雜度相加。例:
x=0;y=0;
for(k=1;k<=n;k++)
x++;
for(i=1;i
<=n;i++)
for(j=1;j
<=n;j++)
y++;
第乙個迴圈的時間複雜度為o(n),第二個迴圈的時間複雜度為o(n^2),則整個演算法的時間複雜度為o(n+n^2)=o(n^2)。
1.6 計算法則
a. 求和法則
若演算法的兩個部分時間複雜度分別為:t1(n)=o(f(n))、 t2(n)=o(g(n)),則t1(n)+t2(n)=o(max(f(n),g(n)))。另外,若t1(m)=o(f(m))、t2(n)=o(g(n)),則t1(m)+t2(n)=o(f(m)+g(n))。
用於順序結構,即需要依次執行一系列語句。
b. 乘法法則
若演算法的兩個部分時間複雜度分別為:t1(n)=o(f(n))、t2(n)=o(g(n)),則 t1*t2=o(f(n)*g(n))。
用於迴圈結構。迴圈語句的執行時間耗費:多次迭代中執行迴圈體以及檢驗迴圈條件。
c. 其餘運算法則
1)若g(n)=o(f(n)),則o(f(n))+o(g(n))=o(f(n))
2)o(cf(n))=o(f(n)) 其中,c為常數。
1.7 各種排序演算法時間複雜度和空間複雜度表
2.空間複雜度
2.1 定義
演算法所需儲存空間的量度。
2.2 儲存空間
乙個演算法在計算機儲存器上所占用的儲存空間包括:儲存演算法本身所占用的儲存空間、演算法的輸入輸出資料所占用的儲存空間、演算法在執行過程中臨時占用的儲存空間。
2.3 計算
當乙個演算法的空間複雜度為乙個常量,即不隨被處理資料量n的大小而改變時,可表示為o(1);當乙個演算法的空間複雜度與以2為底的n的對數成正比時,可表示為o(1og2^n);當乙個演算法的空間複雜度與n成線性比例關係時,可表示為o(n)。
演算法之時間複雜度簡析
最近準備對演算法進行一些系統的總結和學習,不積跬步無以至千里,不積小流無以成江海.此文主要對時間複雜度進行簡單梳理和個人總結,本人才疏學淺,有所疏漏在所難免,如有不當和錯誤之處,歡迎指正 時間複雜度,用簡單地話描述為 為了大概估算程式運算時間的一種概量。那用什麼來估算的呢?用簡單的程式執行 的次數,...
簡析時間複雜度和空間複雜度
時間複雜度和空間複雜度是用來評價演算法效率高低的2個標準,身為開發者肯定會經常會聽到這2個概念,但它們分別是什麼意思呢?其實這兩個概念從字面意思上也能看出一二 我們一般用 大o符號表示法 來表示時間複雜度 t n o f n n是影響複雜度變化的因子,f n 是複雜度具體的演算法。接下來再看一下不同...
簡析時間複雜度和空間複雜度
時間複雜度和空間複雜度是用來評價演算法效率高低的2個標準,身為開發者肯定會經常會聽到這2個概念,但它們分別是什麼意思呢?其實這兩個概念從字面意思上也能看出一二 我們一般用 大o符號表示法 來表示時間複雜度 t n o f n n是影響複雜度變化的因子,f n 是複雜度具體的演算法。接下來再看一下不同...