• ベストアンサー

数のサイズのO記法について

代数学の勉強をしています。O記法についてわからないところがあります。 「a,b∈N,a,b≦nとしk:=[log(n)]+1とする。 加法a+bの計算に対するビット演算の数はO(k)で 乗法a・bに対してはO(k^2)である。 もし高速乗算アルゴリズムが使用されれば、乗法 はO(klog(k))にまで改良することができる。」 とあるのですが、加法がO(k)、乗法がO(k^2)と表せるのはO記法の考え方からわかりました。 しかし、「高速乗算アルゴリズムが使用されれば、乗法はO(klog(k))にまで改良することができる」 というところがどうしてそうなるのかがわかりません。 ※logの底は2です。

質問者が選んだベストアンサー

  • ベストアンサー
  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.3

No.2さんの意見は飛躍があると思う。 ちなみに実際に乗算を分割統治法で演算するアルゴリズムはO(klog(k))ではなくO(k^log(3))になる。 これはk桁の乗算はk/2桁の乗算3回に分割されるためである。

wicky
質問者

お礼

ありがとうございました。 参考になりました。

その他の回答 (2)

  • sunasearch
  • ベストアンサー率35% (632/1788)
回答No.2

乗算アルゴリズムに限らず、べたな方法でO(k^2)のアルゴリズムは、改良によって、O(klogk)のアルゴリズムにできることが知られています。 イメージとしては、データ数k(下記の例では8)に対して、 1111111 1111,1111 11,11,11,11 1,1,1,1,1,1,1,1 全体の問題を半分の大きさの問題に分割を繰り返して解く方法を考えると、繰り返しの回数がlogk(log8=3)回になることから、 データ数k×繰り返し回数logk = klogkのオーダになると言った感じです。

wicky
質問者

お礼

ありがとうございました。 参考になりました。

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

代数学というよりは演算量の理論の話ですね。 実際に多バイト長の乗算を高速に実行するアルゴリズムがあって、それを使うと桁数kに対してO(klog(k))になるんです。 具体的なアルゴリズムは高速フーリエ変換(FFT)に関して調べると出てきます。

関連するQ&A