時間複雜度的演算法

2021-09-06 04:34:36 字數 1865 閱讀 9930

求解演算法的時間複雜度的具體步驟是:

⑴ 找出演算法中的基本語句;

演算法中執行次數最多的那條語句就是基本語句,通常是最內層迴圈的迴圈體。

⑵ 計算基本語句的執行次數的數量級;

只需計算基本語句執行次數的數量級,這就意味著只要保證基本語句執行次數的函式中的最高次冪正確即可,可以忽略所有低次冪和最高次冪的係數。這樣能夠簡化演算法分析,並且使注意力集中在最重要的一點上:增長率。

⑶ 用大ο記號表示演算法的時間效能。

將基本語句執行次數的數量級放入大ο記號中。

如果演算法中包含巢狀的迴圈,則基本語句通常是最內層的迴圈體,如果演算法中包含並列的迴圈,則將並列迴圈的時間複雜度相加。例如:

for (i=1; i<=n; i++)

x++;

for (i=1; i<=n; i++)

for (j=1; j<=n; j++)

x++;

第乙個for迴圈的時間複雜度為ο(n),第二個for迴圈的時間複雜度為ο(n²),則整個演算法的時間複雜度為ο(n+n²)=ο(n²)。

常見的演算法時間複雜度由小到大依次為:

ο(1)<ο(log₂n)<ο(n)<ο(nlog₂n)<ο(n²)<ο(n³)<…<ο(2ⁿ)<ο(n!)

ο(1)表示基本語句的執行次數是乙個常數,一般來說,只要演算法中不存在迴圈語句,其時間複雜度就是ο(1)。ο(log₂n)、ο(n)、ο(nlog₂n)、ο(n²)和ο(n³)稱為多項式時間,而ο(2ⁿ)和ο(n!)稱為指數時間。計算機科學家普遍認為前者是有效演算法,把這類問題稱為p類問題,而把後者稱為np問題。

這只能基本的計算時間複雜度,具體的執行還會與硬體有關。

上面的這部分內容是比較可靠的,理解的時候,可以參看著下面的這部分內容。

在計算演算法時間複雜度時有以下幾個簡單的程式分析法則:

1.對於一些簡單的輸入輸出語句或賦值語句,近似認為需要o(1)時間

2.對於順序結構,需要依次執行一系列語句所用的時間可採用大o下"求和法則"

求和法則:是指若演算法的2個部分時間複雜度分別為 t₁(n)=o(f(n))和 t₂(n)=o(g(n)),則 t₁(n)+t₂(n)=o(max(f(n), g(n)))

特別地,若t₁(m)=o(f(m)), t₂(n)=o(g(n)),則 t₁(m)+t₂(n)=o(f(m) + g(n))

3.對於選擇結構,如if語句,它的主要時間耗費是在執行then字句或else字句所用的時間,需注意的是檢驗條件也需要o(1)時間

4.對於迴圈結構,迴圈語句的執行時間主要體現在多次迭代中執行迴圈體以及檢驗迴圈條件的時間耗費,一般可用大o下"乘法法則"

乘法法則: 是指若演算法的2個部分時間複雜度分別為 t₁(n)=o(f(n))和 t₂(n)=o(g(n)),則 t₁*t₂=o(f(n)*g(n))

5.對於複雜的演算法,可以將它分成幾個容易估算的部分,然後利用求和法則和乘法法則技術整個演算法的時間複雜度

另外還有以下2個運算法則:

(1) 若g(n)=o(f(n)),則o(f(n))+ o(g(n))= o(f(n))

(2) o(cf(n)) = o(f(n)),其中c是乙個正常數

可以用以上法則對下面程式段進行簡單分析

①for (i=0; i② for (j=0; j③ c[i][j] = 0;

④ for (k=0; k⑤ c[i][j]= c[i][j]+ a[i][k]* b[k][j];/ * t5(n) = o(1) */

第①條與②③④⑤是迴圈巢狀t₁(n)*t₂(n)* (t₃(n)+ t₄(n)* t5(n))= o(n*n*n)即為整個演算法的時間複雜度

o(1)

演算法時間複雜度空間複雜度

演算法 是解決某一類問題的通法,即一系列清晰無歧義的計算指令。每個演算法只能解決具有特定特徵的一類問題,但乙個問題可由多個演算法解決。乙個演算法應該有以下五個方面的特性 比較演算法的優劣我們從兩個維度去進行考量 時間 空間 時間複雜度,空間複雜度 找出基本語句 演算法中執行次數最多的那條語句就是基本...

演算法 時間複雜度 空間複雜度

1 if i 1 2 a 1 result 3 4 result n 2 result 1000 1000 3 array.push a array.pop 4 map.set 1,1 map.get 1,1 在計算複雜度的時候,o 1 一般會被忽略。1 for let i 0 i n i 2 wh...

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

時間複雜度和空間複雜度是度量演算法效率的常用指標 事後統計,不常用 事前統計影響因素 演算法策略 問題規模 程式語言 質量 機器執行指令的速度 撇開軟硬體的影響,演算法執行工作量的大小只依賴於問題的規模 通常用整數n表示 乙個演算法是由控制結構 順序,分支,迴圈三種 和原操作 指固有資料型別的操作 ...