• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:多倍長演算における実行時間と計算量の差)

多倍長演算における実行時間と計算量の差

ur2cの回答

  • ur2c
  • ベストアンサー率63% (264/416)
回答No.8

> 質問2: 図のグラフは理論的に計算したグラフではなくて実験値でしょうか? そうです。ご質問にあった画像の数値です。ただし、説明をまちがえました。 > 横軸が n、縦軸が [(2) の実行時間] / [(1) の実行時間] です。 と書きましたけど、横軸は n でなく h := lg n です。そこで > 質問1: 実行時間が (1) 2n (2) 3n に比例する も同様に「(1) は 2h, (2) は 3h に比例」になります。それでも > ということは,比は > [(2) の実行時間] / [(1) の実行時間] = (3n)k / (2n)k = 3/2  > と一定 が [(2) の実行時間] / [(1) の実行時間] = 3h/(2h) = 3/2 となるだけです。つまり結論はおっしゃるとおり、実行時間の比が一定になるはずです。ご指摘ありがとうございます。 ところで実測値を見ると、 [(2) の実行時間] / [(1) の実行時間] = O(h) になってるように見えます。だから O(h^2) の O() に隠れた部分が効いてるのでしょう。その隠れた部分は入出力だと思います。なぜなら、入出力は内部記憶を用いた計算より桁違いに時間がかかるからです。つまり (2) では (1) にはない入出力が h に比例して、余計にかかっているということのような気がします。 (1) では長さ h の strings を 2 つ入出力しながら掛算します。時間は 2h + O(h^2) に比例。(2) では長さ 2h と h の strings を入出力しながら、割算します。時間は 3h + O(h^2) に比例。h が小さいときは O(h^2) 部分は内部記憶で処理されるので、入出力に比べれば無視できる、と仮定します。すると [(2) の実行時間] / [(1) の実行時間] は O(h) になります。h は最大でも 2 [MBytes] くらいなので、これはすくなくとも図と矛盾しません。 上は憶測にすぎませんので結局、prifile を見るのが確実と思います。

hourainoas
質問者

お礼

たびたびご回答ありがとうございます. #9さん の回答で解決致しました. ハードウェア上では乗算は除算よりも高速で, カラツバ法を用いるとO(h^1.585),除算はそのままO(h^2)として,実験データと比較しましたらほぼ一致いたしました. (2)/(1)が増加する原因ですが,(h^2)/(h^1.585) = h^0.415 となるためだと思います. たしかに,入出力量が3/2倍違うので,それも実験データに効いてきていると思います. 貴重な議論をありがとうございました.

関連するQ&A

  • 計算量の少ないn乗根の求め方

    現在C++であるクラスのインスタンスaのN乗根を求める関数を作成中なのですが、どうしても実行時間が長くなってしまいます。 現在ニュートン法に則って X(m+1)=((N-1)(Xm)^N+a)/(N*(Xm)^(N-1)) という漸化式を回して変化量が一定値以下になったら終了という関数なのですが、 値によっては累乗計算のところで時間を大幅にロスしてしまうようです。 原因としては累乗計算が同じ数をN回掛けるという単純な仕組みなため、 Nが大きすぎるとループがなかなか終わらないということがわかっています。 もしご存知であれば 1.極力累乗計算を使わないN乗根の求め方 2.計算量の少ない累乗計算の仕方 のどちらかを教えていただけないでしょうか? なお、クラスを使っている関係上powなどの既存の関数は使えません。 よろしくお願いいたします。

  • 2進アルゴリズムの時間計算量

    ベキ乗計算を2進アルゴリズムで解いた場合の時間計算量を求める方法を教えてください。 x^nの時の時間計算量でn=2,3以外の時でn=2p,2p+1の時で場合わけして(pは整数)数学的帰納法で解いてあるのは見た事はあるのですが、どこからその仮定を持ってきたのか見当がつきません。 どうかお願いします。 n>3のときの時間計算量kは k<=(2*log(n))-1 となっていました。

  • ソートの計算量などについて

    こんにちは ソートに関することの質問です。 1.バブルソートの計算量を出す式ですが O(n^2)=O(n-1)*O(n/2)*O(1)=O(n)*O(n)=O(n^2) で合っていますでしょうか? 2.クイックソートの(平均)計算量が nlog n(底は2)になるのは、なぜなのかを わかりやすく教えて下さい。(できれば式も) 3.クイックソートが最も高速に実行されるのは、ピボットの要素が真中にある場合で、反対に最も効率が悪いのはピボットが端にある場合ですが、この理由をやさしい言葉で教えて下さい。 どなたか教えて下さい。 よろしくお願いします

  • 演算対象の数字と演算子を入力して計算させる

    数字と演算子をそれぞれ入力し、優先順位の高い順に四則演算させるにはどのような考え方をすればよいのでしょうか。 数字をa[7]とおいて、演算子をop[7]としてそれぞれ配列に格納しましたが、そこから先に進めません。 オペランドと演算子の組み合わせならば優先順に計算してくれるのはわかっていますが、オペランドと演算子を格納した配列では上手く行きません。 実は既に全ての演算子の組み合わせをIfで表示させるプログラムを根性で作ったのですが、最適解を知りたいです。 言語はCでvisualstudioを使っております。 条件はn回数字を入力したらn-1回演算子を入力し、n回目に=を入力する。nの最大値は7とする。です。 だらだらと見辛い文章で申し訳ありませんが、何卒宜しくお願いします。

  • 計算量について

    プログラムの計算量について質問です。計算量には時間計算量と空間計算量がありますが、そのうち空間計算量の概念がいまいち分かりません。アルゴリズムが必要とする記憶容量といっても漠然としててどのように求めたらいいのか分かりません。 例えばプログラムの基本構成が for(n回){ for(n回){ 処理 } } のようだったら時間計算量がO(n^2)というのはわかるんですが、この場合の空間計算量はどのようになりますか?

  • ステップ数と計算量?

    ステップ数と計算量とは何でしょうか? 問題で、 int x = 0; for(int c = 0; c < n; ++c) a += c との問題があり「これのステップ数と計算量をnについて求めよ。」との問題でした。 しかしステップ数と計算量というものがよくわかりません。 ステップ、つまり行数でいいのでしょうか? 計算量もO(オーダ)を使うどうのと一応知人から教わったのですが、 知人自体もよくわかっていないようで結局何なのだか・・・。 ステップ数と計算量というものについて教えてください。 あとできれば上記の問題についても・・・

  • 計算量の下界の計算

    ある論文中の回路計算量の下界を求めようと思うのですが、どうも計算がうまくいかないので知恵をお貸しください。 l=√(k)(切り捨て) p=10√(k)log_{2}n(切り上げ) m=(p-1)^{l}*l! この時、size(C)・m^2・(n-l-1)Choose(k-l-1)≧(n)choose(k) という式からsize(C)の下界がn^{Ω(√(k))}と定まるらしいのですが、この導出がわからないのです。 Ωは下界オーダーの記号です。 size(C)≧~という式にしてこの右辺がn^{Ω(√(k))}で表せる式になればよいと思うのですがいまいちうまくいきません。 お分かりの方がいらっしゃいましたら教えていただけると幸いです。 よろしくお願いします。

  • 計算時間の問題

    基本情報技術者試験に出題された問題についての質問です。 ---------------------------------------- 問5 コンピュータで連立一次方程式の解を求めるのに,式に含まれる未知数の個数の3乗に比例する計算時間がかかるとする。あるコンピュータで 100元連立一次方程式の解を求めるのに2秒かかったとすると,その4倍の演算速度をもつコンピュータで1,000元連立一次方程式の解を求めるときの計算時間は何秒か。 ア 5 イ 50 ウ 500 エ 5,000 ---------------------------------------- 上記の問題において、某問題集の解説には次のような説明がありました。 ---------------------------------------- 未知数が1,000個ある場合の計算時間は100個のときと比べると(1000の3乗)÷(100の3乗)=1000倍になる。未知数が100個のとき2秒だから、同じコンピュータで計算した場合、1,000個のときは2×1000=2000秒かかる。ただし、コンピュータの演算速度は4倍なので、2000÷4=500秒になる。 ---------------------------------------- 私がよく理解できないのは、コンピュータの演算速度が4倍になるとどうして単純に4倍早い時間になるのですか?問題には計算時間が未知数の個数の3乗に比例するとありますが、解説の最後(2000÷4=500秒)で3乗が考慮されないのは何故なのかわかりません。 ご教授をお願い致します。

  • 離散フーリエによる時間計算量

    分割統治法を用いて、N点離散フーリエ変換を計算するとき(高速フーリエ)、その時間計算量T(N)=2T(N/2)+Nを再帰的に代入して次数を下げていくことにより、Nを大きくしたときの漸近的な振る舞いは T(N)=O(Nlog_2 N)となることを示そうと、代入を試みてやってみたのですが、まず T(N)=O(Nlog_2 N)の右辺は何を意味しているのか分からず、またどのようにそれを導けばいいのか検討がつきません。 ヒントを教えてもらえないでしょうか?

  • 計算量(PやNP)について

    ネット上で計算量理論に関する説明を読んでいますが、いまいち理解ができません。 例えば、木の形で表せれる問題で、一つのノードに対する子がN個(定数)あり、深さX(未知、変数)に答えがある場合、計算量は N^X(NのX乗) になると思います。 N^Xは計算量のクラス(NP困難やNP完全等)でいうと何に属するのでしょうか?