for(i 1 in i 2 i)的時間複雜度

2022-12-20 23:46:39 字數 4004 閱讀 2801

1樓:輕候綠苼

for(i=m;i>=1;i*=2);

當m小於等於0時,只判斷了一次便退出迴圈,時間複雜度為1;

當m大於等於1時,時間複雜度為n,但是由於i永遠大於等於1,這個迴圈是個死迴圈,n為無窮大。

計算方法

1. 一般情況下,演算法的基本操作重複執行的次數是模組n的某一個函式f(n),因此,演算法的時間複雜度記做:t(n)=o(f(n))

分析:隨著模組n的增大,演算法執行的時間的增長率和f(n)的增長率成正比,所以f(n)越小,演算法的時間複雜度越低,演算法的效率越高。

2. 在計算時間複雜度的時候,先找出演算法的基本操作,然後根據相應的各語句確定它的執行次數,再找出t(n)的同數量級(它的同數量級有以下:1,log2n ,n ,nlog2n ,n的平方,n的三次方,2的n次方,n!

),找出後,f(n)=該數量級,若t(n)/f(n)求極限可得到一常數c,則時間複雜度t(n)=o(f(n))

例:演算法:

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

}則有 t(n)= n的平方+n的三次方,根據上面括號裡的同數量級,我們可以確定 n的三次方 為t(n)的同數量級

則有f(n)= n的三次方,然後根據t(n)/f(n)求極限可得到常數c

則該演算法的 時間複雜度:t(n)=o(n的三次方)

3.分類

按數量級遞增排列,常見的時間複雜度有:

常數階o(1),對數階o(log2n),線性階o(n),

線性對數階o(nlog2n),平方階o(n2),立方階o(n3),...,

k次方階o(nk), 指數階o(2n) 。

隨著問題規模n的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低。

2樓:最後一隻恐龍

i的取值依次是2^0, 2^1, 2^2, ... 2^x

有2^x=n得x=以2為底n的對數,這就是它的時間複雜度。

for(int i=1;i<=n;i=i*2)++x; 的時間複雜度

3樓:木子思曰

程式每執行一次,i就乘以2,但是i又是小於n的

所以2的a次方小於等於n

所以時間複雜度為log2(n)

for(i=1;i<=n,i++)時間複雜度為什麼是n+1

4樓:詞藻

為什麼是n+1,不是o(n)嗎,好像o(n+1)也等於o(n),只看最高階的

、下面程式段的時間複雜度是 。 for(i=1;i<=n;i++) for(j=1;j<=

5樓:匿名使用者

雙重for迴圈,當然就是n的平方了,故選擇d

i=1; while(i<=n) i=i*2 這個演算法的時間複雜度怎麼算

6樓:娛樂小八卦啊

這個演算法的時間複雜度為logn。

一個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。

並且一個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多。一個演算法中的語句執行次數稱為語句頻度或時間頻度。記為t(n)。

一般情況下,演算法的基本操作重複執行的次數是模組n的某一個函式f (n),因此,演算法的時間複雜度記做:t (n) =0 (f (n) )。隨著模組n的增大,演算法執行的時間的增長率和f (n)的增長率成正比,所以f (n)越小,演算法的時間複雜度越低,演算法的效率越高。

在計算時間複雜度的時候,先找出演算法的基本操作,然後根據相應的各語句確定它的執行次數,再找出t (n)的同數量級。

擴充套件資料

演算法的時間效能分析

演算法耗費的時間和語句頻度

一個演算法所耗費的時間=演算法中每條語句的執行時間之和

每條語句的執行時間=語句的執行次數(即頻度(frequency count))×語句執行一次所需時間

演算法轉換為程式後,每條語句執行一次所需的時間取決於機器的指令效能、速度以及編譯所產生的**質量等難以確定的因素。

若要獨立於機器的軟、硬體系統來分析演算法的時間耗費,則設每條語句執行一次所需的時間均是單位時間,一個演算法的時間耗費就是該演算法中所有語句的頻度之和。

7樓:匿名使用者

你可以分析i,和迴圈次數之間的關係

i = 1, 2, 4, 8, 16 ...

所以假設迴圈次數是x。

那麼i = 2^x

條件是i <= n

2^x <= n

所以x <= logn

所以x 從1 到logn,一共執行迴圈體logn次,所以複雜度是logn

時間複雜度 for(i=1;i<=n;i++) 這個語句為什麼執行的是n次,不是n+1次啊,多重迴圈每個語句執行次數咋看

8樓:匿名使用者

從1 到 n 不是 0到n

還有時間複雜度 是不需要怎麼準確的

比如 2*n^2 時間複雜度 表示成 n^2 就可以了 常數可以省略

9樓:悠久纖塵

i的初始值為1。

當中間的條件為<=時,執行次數為 n-i的初始值+1

當中間的條件為 《時,執行次數為 n-i的初始值

10樓:十之九點五

第一個分號前的是初始條件,也就是說一開始設定i=1然後進入第二個分號判斷,正確了就執行下面的語句,執行完下面的語句之後再執行第二個分號後的語句,如果第二個分號前的條件不符合,就不會執行下面的語句和第二個分號後的語句。第一次:i=1,下面執行一次,整個括號裡的語句都被執行了一次;第二次:

i=2,如果n〉=2則下面的語句和括號的語句都會被完整地執行一次,如果n=1,這個語句就不會被完整地執行。可見,當n=1時這個語句只執行了1次,同理,當n=2時這個語句只會被執行到第2次,第三次就不符合第二個分號前的條件瞭然後語句就不能被完整地執行,以此類推,這個語句只會被執行n次。

for(i=1;i<=n;i++) for(j=1;j<=i;j++) s++;求時間複雜度

11樓:匿名使用者

總執行次數為1 + 2 + ... + n = n(n+1)/2 ,所以時間複雜度為o(n^2)

12樓:匿名使用者

時間複雜度應該是o(n^3)

for(i=1;i<=n;i++) for(j=i;j<=n;j++) s++; 分析語句段執行的時間複雜度、

13樓:匿名使用者

i從1迴圈到n,j從i迴圈到n,s++這條語句總共被執行了(1+n)*n/2次,屬於n^2數量級,所以時間複雜度是o(n^2)

14樓:匿名使用者

內迴圈 for(j=i;j<=n;j++) s++; 的總執行次數是n-i+1

i的取值範圍是外迴圈就是1到n

所以總的執行次數是 n-i+1 i=1,...n 求和代入即 n+(n-1)+...+1 也就是(n+1)n/2

15樓:匿名使用者

。稍有誇張地說,如果一個語句i = 0,cpu需要的1,那麼你需要的系統延遲10秒,在迴圈執行i = 0的10倍,你可以。你自然10秒,然後後面的**執行。

cpu執行每個**只是很短的時間耗費。

找到這個程式,你可以觀察到的延遲,總的週期數為ms * 110正如上面說的1 ms的週期耗時的,如果你想達到你的延遲段長度的目的只能是決定傳入的ms。毫秒更大的延遲就越長。

3。有關的**,這中for(j = 110; j - j> 0);執行正常,但部分沒有任何意義。要麼改變

為(j = 110; j - ;);前面的**一致更改為(j = 110; j> 0,j - );

16樓:匿名使用者

n+n*n+n*n=n*n

時間複雜度for i 1 in i這個語句為什麼執行的是n次,不是n 1次啊,多重迴圈每個語句執行次數咋看

從1 到 n 不是 0到n 還有時間複雜度 是不需要怎麼準確的 比如 2 n 2 時間複雜度 表示成 n 2 就可以了 常數可以省略 i的初始值為1。當中間的條件為 時,執行次數為 n i的初始值 1 當中間的條件為 時,執行次數為 n i的初始值 第一個分號前的是初始條件,也就是說一開始設定i 1...

c語言,for i 1 i《10 i 2 的i 2是什

這裡的i 2 就是i i 2 的簡略形式。在這裡,for i 1 i 10 i 2 i 1 是迴圈前的初始化。為進入迴圈作準備。中間的i 10 可是有點錯誤的 和 必須連在一起,成為 才是一個邏輯運算子,否則會出錯的。當這個邏輯表示式的值為真時,就執行後面的迴圈體語句。最後是迴圈體語句每次執行完成後...

面程式段的時間複雜度是i 1 while in i i

i 1,只是賦初值,只賦值一次的。若n 100 i 1 while i n i i 3 則迴圈退出後,i 的值是 243 i 的值的變化過程為 3,9,27,81,243。擴充套件資料 各程式設計語言有自己的賦值語句,賦值語句也有不同的型別。所賦 值 可以是數字,也可以是字串和表示式。注意很多語言都...