コンピュータプラクティ スⅠ
比較実験
水野嘉明
本日の予定
計算量について
「比較実験」
パラメータを変化させての比較 ⇒ 実験1
二つのプログラムの比較 ⇒ 実験2
実験レポート R3として提出2
計算量の表現
速度の評価① 実行時間を実測 前回の実験
② 文を実行する回数をカウント プログラムの文面を見
て、計算 できる (概算)
3
計算量の表現
次のプログラムを考える4
sum = 0;
for (i = 0; i < N; i+
+){
for (j = 0; j < N;
j++) {
sum += data[i][j];
} }
① ②
③ ④
計算量の表現
各文の実行回数は、① : 1回
② : N+1 回
③ : N*(N+1) 回
④ : N 2回
合計は、2 N 2+ 2N + 2 回
5
計算量の表現
f(N)= 2 N 2 + 2N + 2
N=10 ⇒ f(N)= 222
N=100 ⇒ f(N)= 20202
N=1000 ⇒ f(N)= 2002002
N=10000 ⇒ f(N)= 2000200026
ほぼN2に比例する と言える O
(
N2)
N が 大 き け れ ば
計算量の表現
計算量を考える時、比例定数はあ まり意味がない
実行時間は、コンパイラやCP U能力により左右されるパラメータ N について、どんな オーダーであるかが重要
O(N) 、 O(N ・ log(N)) 、 O(N
2) 、 O(2N) ・・
7
計算量の表現
アルゴリズムを評価する場合は、その計算量のオーダーを考える
O(N ・ log(N)) のアルゴリズム は、 O(2N) のアルゴリズムより はるかに速いといえる
実行回数を厳密に 数えるわけではない8
比較実験
パラメータを変化させての比較 ⇒ 傾向分析
二つのプログラムの比較 ⇒ 比較実験9
傾向分析
プログラムがパラメータにより異な る振る舞いをする場合パラメータを変化させる
振る舞いの変化を明確にする
(一度に複数の項目を変化させる 変化の原因がわからなくなる)と、
10
実験1
プログラム L06Y01 について、
パラメータ RANGE を変化させ、実行時間の変化を調べよ
また、グラフを描いてその傾向 について考察せよ(対数グラフがよい)
11
プログラムの説明 ( L06Y0 1 )
「時間の測定」にて使用
RANGE 以下の素数の数を求める(数える範囲を、 #define 文で 定義している)
2~ RANGE の各々について、kで割り切れるかどうかを調べ ている ( n%k は n を k で 割った余り)
12
実験1についての注意
科学的方法を思い出すこと観察により(つまり、プログ ラムの文面 を見て)仮説を立て る
実行時間 の測定により、仮説 を検証する
13
実験1についての注意
オーダーの考え方( O 記法)を用 いて、仮説を立てること
『 RANGE が大きくなったら実行 時間も増大』お粗末な仮説
実験しなくてもわかる!
14
実験1についての注意
実行時間の測定は、前回と同じ仕 組みを用いる(バッチではない! time() 関数 により、ラップを測る。実行時 間測定ツール (measure.cpp) を 使うとよい。)
何桁の有効数字で求めるかを、考えること
15
実験1についての注意
プログラムを繰り返すのは、測定 精度を上げるため(繰返し回数を増やしても速度は 変わらない 、つまり
P10 の「複
数の項目」には入らない)繰返し回数を固定してはならない
16
比較実験
他のプログラムとの比較により、
プログラムの評価を行なう
二つの実験対象を比較比較実験
17
実験2
付録Aのプログラムは、任意の整
数を4つの整数の2乗和で表すプ ログラムである 付録Bは、付録Aの改良版
元のプログラム ( 付録A)と改良 版
(付録B)を比較せよ
プログラムの文面と、実行時間の両方を比較すること
18
プログラムの説明 (付録 A )
if 文 xが4個の整数の二乗和となっ
たとき printf で表示
a,b,c,d の for 文
変数 a が 0 からxまで変化
その各々の値について、b
が a からx
まで変化
c,d も同様19
⇒ O(x)
⇒ O(x
2)
⇒ if
文のオーダは ?プログラムの説明 (付録 B )
A プログラムの繰り返し回数は、減らすことができる
a > √x ( a 2> x )の時、
明らかに if 文の条件式は成り 立たない
a 2 +b 2> x の時も同様
B
は、これらを改良20
実験2についての注意
実行時間の測定は、前回および実 験1と同じ仕組みを用いる
scanf をループ内に入れないこ と(ループ内にあると、それだ けの回数キーボードからの入力 が必要)21
実験2についての注意
測定のための繰返し回数は、必要 な有効数字の桁数が出るように適当な値を設定する
固定する必要もないし、しては
ならない AプログラムとBプログラムで
は、当然異なるはず22
実験2についての注意
仮説を検証するためには、入力値xはどのような値を何種類くらい 試せばよいのかを考える
悪い例
x = 1 のみで実験したら、どう
なるか?23
課題
O
記法について O
記法の正確な定義について、文献を調査せよ
O
記法の利点について、考察せ よ実験レポート
実験1、2と課題を、レポートR 3として提出せよ
表題は、「比較実験」 章立ては、
R1 と同じ(実験は二つなので、第4章が