關於for迴圈的時間複雜度

2022-03-21 05:36:09 字數 1653 閱讀 8435

今天在看演算法時,遇見了一些問題,想了很久,現總結如下,關於for迴圈的時間複雜度。我們知道當一重for迴圈時

package

suanfa;

public

class

fortest

}}}

這是最簡單的for迴圈,count執行n次,時間複雜度是n;

如果是for的二重迴圈呢

package

suanfa;

public

class

fortest

system.out.println("k值為:"+k);

system.out.println("count值為 :"+count);

}}

可以看見count輸出4950;一般剛接觸時,就會覺得這事件複雜度是n的平方,當然一般這樣說也沒錯,但是你有沒想過,為什麼k輸入是100時,count輸出是4950,如果k是其他值呢,

count又會是什麼,兩者之間有什麼關係?如果for是三重迴圈又會是怎樣呢?

三重迴圈的情況如下:

package

suanfa;

public

class

test

system.out.println("k值為:"+k);

system.out.println("count值為 :"+count);

}}

可以看見count輸出為161700,當然你也可以試著把k改小一點,當然你要試著**k和count的關係,在二重for迴圈、三重for迴圈、甚至

i    0   1  2  3  ...... n-2  n-1

j   1   2        3       4      ......   n-1.     

當i為0時,j可取1到n-1,使得if語句能夠有效執行;同理i=1時,j可取2到n-1;

i=0;  j = 1,2,3,4.....n-1;(if語句執行 (n-1)-1+1 次  即 n-1次)

i =1 ,j =2,3,4....n-1;  (if語句執行 (n-1)-2+1 次  即n-2次)

i=2 , j =3,4,5...n-1;

i=n-2,j =n-1  (if語句執行一次)

可得if語句執行的總次數為:  (n-1+1)(n-1-1+1)/2 = (n-1)*n/2,你也可以理解為c(2 n)(姑且這樣表示吧),這個東東不知道怎麼表示,就是和二項式係數有關的那個,2是上角標,n是下角標;

c(2 n)=n*(n-1)/(2*1);

三重迴圈時:假定k值為n;那麼要使if語句能夠執行;需滿足:

i    0   1  2  3  ......         n-3  

j   1   2        3       4      ......          n-2.     

x   2  3  4  5  ........        n-1

經過如上推算,可得 if語句執行總次數為  c(3 n) = n*(n-1)*(n-2)/(3*2*1)=n*(n-1)*(n-2)/6;

四重for迴圈 , 可得 if語句執行總次數為    c(3 n) = n*(n-1)*(n-2)*(n-4)/(4*3*2*1)=n*(n-1)*(n-2)/24;

關於時間複雜度

1.演算法複雜度分為 時間複雜度和空間複雜度。作用 時間複雜度是度量演算法執行的時間長短 而空間複雜度是度量演算法所需儲存空間的大小。2.一般情況下,演算法的基本操作重複執行的次數是模組n的某乙個函式f n 因此,演算法的時間複雜度記做 t n o f n 分析 隨著模組n的增大,演算法執行的時間的...

關於時間複雜度

關於時間複雜度 o 的定義 若f n 是正整數n的乙個函式,則o f n 表示 m 0 使得當n n0時,f n m f n0 表示時間複雜度的階有 o 1 常量時間階 o n 線性時間階 o n 對數時間階 o n n 線性對數時間階 o n k k 2,k次方時間階 例 兩個n階方陣的乘法 fo...

關於時間複雜度和空間複雜度

如何判別乙個演算法的好壞 首先,這個演算法必須是正確的 其次,好的演算法應具有幸福感,便於人們理解和交流,並且是機器可執行的。這個演算法還需要足夠健壯,即當輸入的資料非法或不合理時,也能適當的做出正確的反應或進行相應的處理 最後它還必須擁有高效率和低儲存量要求。也就是時間複雜度和空間複雜度佔的地方越...