2016-12-01 63 views
0

任何人都可以告訴我下面的代碼的複雜性,並解釋計算?三個循環的複雜性

int count=0; 
for(int i=0; i<n;i++) 
    for(int j=i; j<n;j++) 
     for(int k=j;k>i;k--) 
      count++; 

感謝

+4

他們能?是的,但他們在這個網站上這樣做不合適。 (人們不喜歡被要求在這裏爲其他人做功課) – byxor

+0

我不是要求任何人做功課,我只需要一些幫助 –

+1

它肯定覺得像功課。這裏有一個提示:統計嵌套循環的數量。找出答案是至關重要的。 – byxor

回答

2

這僅僅是一個 「簡單」 的數學:

對於第一循環,其相當簡單,它會做n迭代。

二回路是不是要複雜得多:

  • i=0:你將有n迭代。
  • i=1n-1迭代
  • i=2n-2迭代
  • ...
  • i=n-1:總的1迭代

n(n+1)/2

  • i=n-1:你有0迭代

    第三循環中,我們當j>i只是感興趣。

  • i=n-21迭代,那就是當j=n-1
  • i=n-32迭代時j=n-11迭代時j=n-2
  • i=n-43迭代時j=n-12迭代時j=n-21迭代時j=n-3
  • ...
  • i=0n-1迭代時j=n-1n-2迭代時j=2,...,1迭代時j=1

運行的這段時間是:

O((n-1)n/2 + (n-2)(n-1)/2+...+(n-n+2)(n-n+1)/2+(n-n+1)(n-n)/2)=O((n-1)*(n^2)/2)=O(n^3)