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

2021-07-12 17:39:52 字數 3475 閱讀 8097

1樓:匿名使用者

從1 到 n 不是 0到n

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

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

2樓:悠久纖塵

i的初始值為1。

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

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

3樓:十之九點五

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

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

求時間複雜度 x=0; for(i=1;i

4樓:2走著走著就

要求時間複雜度,可以先考慮各語句的頻度

語句1:x=0;

語句2:for(i=1;i

語句3:for(j=1;j<=n-i;j++)語句4:x++;

語句1執行1次;

語句2 中迴圈控制變數i 要增加到n,測試 i=n成立才會終止,故頻度是n+1。但它的迴圈體卻只能執行n次;

語句3作為語句2迴圈體內的語句,應該執行n次,但語句3本身要執行n+1次,所以頻度為n*(n+1);

語句4作為語句3迴圈體內的語句,所以要執行 n的平方 次;故其頻度為 n的平方 次。

故可以算出演算法的執行時間t(n),即所有語句的頻度之和。

時間複雜度 t(n)=o(n的平方)

5樓:匿名使用者

時間複雜度

1.時間頻度

一個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且一個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多。

一個演算法中的語句執行次數稱為語句頻度或時間頻度。記為t(n)。

2.計算方法

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的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低

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

6樓:匿名使用者

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

7樓:匿名使用者

內迴圈 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

8樓:匿名使用者

。稍有誇張地說,如果一個語句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 - );

9樓:匿名使用者

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

for(i=1;i<=n;i++) for(j=1;j<=n;j++) s++ 根本就沒有出現n的係數次數之類的怎麼能知道它的時間複雜度

10樓:匿名使用者

可以得到這個迴圈的執行次數是n^2,

然後根據時間複雜度的概念,樓主可以得出結論了。

迴圈語句「for(i=0;i<=n;i++)s」中迴圈體s被執行的次數為

11樓:瘋狂的門

n+1 次,迴圈語句「for(i=0;i

12樓:

n+1次

0~n 你自己算算~

13樓:毓惠君戊環

你好,對於for迴圈語句,首先判斷i是否小於等於n,如果是執行迴圈體,然後再i++,因此這裡面的s應該執行n-0+1=n+1次。

求講解: for(i=1;i

14樓:儒雅的

n=1時x++執行

n次;n=2時x++執行n-1次;

........

n=n-1時x++執行2次;

n=n時x++執行1次;

綜上所述x++執行的頻度時1~n的等差和(n2+n)/2演算法時間複雜度o(n2);

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

for i m i 1 i 2 當m小於等於0時,只判斷了一次便退出迴圈,時間複雜度為1 當m大於等於1時,時間複雜度為n,但是由於i永遠大於等於1,這個迴圈是個死迴圈,n為無窮大。計算方法 1.一般情況下,演算法的基本操作重複執行的次數是模組n的某一個函式f n 因此,演算法的時間複雜度記做 t ...

時間複雜度和空間複雜度,時間複雜度和空間複雜度

這個來輸入很複雜,最好在 源書上找。演算法的時間複雜度是一個函式,它定性描述了該演算法的執行時間。這是一個關於代表演算法輸入值的字串的長度的函式。時間複雜度常用大o符號表述,不包括這個函式的低階項和首項係數。使用這種方式時,時間複雜度可被稱為是漸近的,它考察當輸入值大小趨近無窮時的情況。對於一個演算...

時間複雜度和空間複雜度有什麼區別

時間複雜度,就是計算程式執行的時間,空間複雜度,就是所佔的記憶體空間 什麼叫時間複雜度和空間複雜度?時間複雜度 是程bai序執行的時間du,也可以說是次zhi數 空間複雜度是程式佔用dao的空間 內 如下程式 int a 1000000 int t 0 for int i 0 i 1000 i fo...