偶数の加算

ページトップへ 一つ上へ

ポイント


アルゴリズム



さてさて、今回は久しぶりにアルゴリズム講座。
以前にソートのプログラミングでアルゴリズムを学びましたが、
今回は中学生でも解ける練習問題を一つ。

問.0〜100までの偶数の合計はいくつでしょう?

さて、この問題を解く方法は大きく3つあるといっていいでしょう。

1.0〜100まで偶数ならば加算(方法1)
2.0〜100まで2づつ増加していき加算(方法2)
3.0〜50まで加算して2倍(方法3)

さて、それぞれの方法はどれで解いても間違いではないです。
どれが一番速く解けるでしょう??

では実際のプログラムは以下のように
まずは方法1から
function even1

% 
% 偶数の加算
% 方法1
%
%

n=0;

for ii = 1 : 100
    if (mod(ii,2)==0)
        n = n + ii;
    end
end
disp(n);



つぎは方法2を
function even2

% 
% 偶数の加算
% 方法2
%
%

n=0;

for ii = 0 : 2 : 100
    n = n + ii;
end
disp(n);



最後に方法3を
function even3

% 
% 偶数の加算
% 方法3
%
%

n = 0;

for ii = 0 : 50
    n = n + ii;
end
n=n*2;
disp(n);


さて、実行してみましょう。
100ぐらいの数字では差が見えないので、
いろんな数字を使って実行時間を測ってみました。

方法データ数
100
データ数
500
データ数
1000
データ数
10000
データ数
100000
方法10.050.210.4914.12540.248
方法20.010.010.010.040.521
方法30.010.010.010.040.491
単位(秒)

方法1は時間たっぷりかかります。
方法2と3はほとんど差がないという事がわかりました。
人が計算すれば方法3の方が早いでしょう。

ちなみに、ここで最速だった方法3をデータ1千万でやってみた所、
時間は38.875秒かかりました。
ここで紹介しなかったですが、ガウスの方法の応用でやると
0.01秒でできました。
いかにガウスの計算が速いかというのがわかります。