2016年06月18日

単純な計算がコンピュータでは人間より早くできるといのもあたりまえだけど、計算数が大きくならないように数学的に整理することもプログラムのパフォーマンス改善には必要でしょうね

プログラマーはなぜ手書きするのか? : SIerブログ
単純な 1 から N までの和 の計算、プログラムなら for ループで 1 からNまでN回の足し算をすれば確かに答えは出るでしょう。

でも これには和の公式というものがあって
数列の和
1 から N までの和 は (1/2)*(N+1)N を一回計算するだけで済みます。
Nがどんなに大きくなっても膨大な回数N回ループする必要性はないんです。

プログラムの設計書にForループで計算せよと書いてあるならまだしも 1 から N までの和 を求めると書いてあるなら 、これをチューニングと呼ぶのかはさておき 公式を探すくらいはしてもいいのではないのかしらん。

フィボナッチ数列は Nが増えると計算量が速やかに増える例として挙げられていますが フィボナッチ数の計算と計算量
これにも一般項を求めることができます。ルート5とかが混じっているけれども計算すると自然数になるのが不思議ではありますが。
【数列】フィボナッチ数列の一般項を求める | 大人が学び直す数学
フィボナッチ数列のN項めを求めるには一般的には N-1, N-2 項目の値が必要で、N-1、N-2 の値を求めるにはさらにさかのぼって、、、、とやる必要はなく一発でN番目の値は計算できるんです。
実際にこれをプログラムにしたことがないので、ルートや、割り算を含む公式がきちんと整数の結果をコンピュータが出してくれるかどうかは保証しませんが。

まあ何が言いたいのかというと、コンピュータに単純な計算を任せるのはいいけど、その指示を出すほうがもう少し効率化を考えればコンピュータの無駄な計算がなくなり 結果的にもっと早く所定の処理が終わるってことにつながることもあるかもしれないから、「その単純処理で負荷がかかってるんじゃない?、もっと早くなるんじゃない?」って考えるのは重要だろうと思った次第です。
@2016/06/18 23:51 | Comment(0) | TrackBack(0) | 日記

・おすすめ楽天ショップ1:trendyimpact楽天市場店
・おすすめサプリショップ:iHerb.com
・おすすめ楽天ショップ2:上海問屋
Powered by さくらのブログ