2016-07-05 11 views
2

私は現在、質問の1つが与えられたアルゴリズムからbig-oを計算する私の試験のために勉強しています。与えられたアルゴリズムからBig-Oを計算する


T_compute(n) ∈ O(n) 

:アルゴリズム:昨年からの質問の一つは次のようになります

void func2(const int n) { 
    for (int i = 1; i <= n; i++) 
     compute(i); 
} 

関数func2のtimecomplexityは何ですか? T_func2(N)∈


今ソリューションは、時間の複雑さが

T_func2(n) ∈ O(n/2(n-1)) 

であることを述べている誰もが、彼らがこの溶液になったか私に説明できますか?

+3

私は彼らがどのように正確な式に到達したのかわかりませんが、明らかにその動作は 'O(n^2)'であり、小さな用語は重要ではありません。 –

答えて

5

我々はO(n)するcompute(n)の複雑さを知っているので、我々は、一般性を失うことなく、私たちがきた最後のステップでそのcompute(n) = n、すなわち

T_func2(n) ∝ sum_{i = 1 to n} compute(i) 
      = sum_{i = 1 to n} i 
      = n(n+1)/2 

仮定の下func2(n)の複雑さを分析することができますused this summation rule

ここでT_func2 ∈ O(n(n+1)/2)と書いてありますが(n(n-1)はあなたのためにタイプミスです)、これはちょうどO(n^2)です。

+0

あなたの説明をありがとう!これは本当に私を助けました。しかし、私は解決策でタイプミスをしませんでした。多分私の教授はそれをやった – whileFalse

+0

@whileFalse喜んで助けてください。上記の合計の正確な値は、私たちが複雑さを分析しており、賢明なものであるという前提( 'compute(n)= n')の下で働いているので、本当の価値はありません。 (func2'の実際の反復回数ではなく) 'func2'の複雑さの分析です。 – dfri

+1

@whileFalse(厳密な不等式、 'i dfri

関連する問題