与えられたCコード
for(i=n,j=0 , i>0,i/=2 , j+=i)
forループの終了後のjの値は何ですか?
私の本の解決策では、それは次のように始まります。
j=n+n/2 +n/4+....+log n terms.
これで、上記のシリーズにlogn項がどのように存在するかを理解できます。
助けてくれてありがとう。
与えられたCコード
for(i=n,j=0 , i>0,i/=2 , j+=i)
forループの終了後のjの値は何ですか?
私の本の解決策では、それは次のように始まります。
j=n+n/2 +n/4+....+log n terms.
これで、上記のシリーズにlogn項がどのように存在するかを理解できます。
助けてくれてありがとう。
これは、 log2n要素の等比数列の合計です。合計はあなたによって異なりますn
が、いずれの場合も。によって制限され2n
ます。理論はここにあります:http://en.wikipedia.org/wiki/Geometric_progression
これはlog2nであり、これはnのバイナリ表現のバイナリビット数(または最上位1ビットのランク)です。
そして、あなたはタイプミスをしました、あなたはおそらく意味します
for(i=n,j=0 ; i>0 ; (i/=2), (j+=i));
したがって、最初はi==n
0に達するまで半分にします(したがって、log 2 nループ数)。