2017-09-15 14 views
-1

私はdivide and conquerメソッドを使ってpow(a、n)を見つけるためにこのコードを書いています。私はこのコードの大きな複雑さについてはわかりません。それはnかnlog nですか?このコードの実行時間は?それはn log nかnですか?

pow(a,n) 
{ 
    if n->1 return a 
    i<-floor(n/2) 
    j<-ceil(n/2) 
    return pow(a,i) * pow(a,j) 
} 

また、この場合の乗算である合成ステップの複雑さは何ですか?それは1かnか?

答えて

0

pow(a,n)を呼び出すたびにpow(a,n/2)が〜2コールされるため、おおよそO(n)です。

+0

は、問題をn/2に分割することを意味しません。これは、ログnレベルを意味し、各レベルの作業ではn/2です。それはそれをnlognにしますか? –

+0

p(1,8)* p(1,4)、p(1,2)* p(1,2)* p(1,2)のときにコール数を考慮してください。 (1,1)* p(1,1)* p(1,1)* p(1,1)* p(1,1)* p(1,2) p(1,1)* p(1,1)となる。呼び出しの総数は1 + 2 + 4 + 8 = 15です。 – jq170727

+0

各レベルでの作業は、呼び出しごとにO(1)作業しか行っていないため、n/2ではありません。 – templatetypedef

関連する問題