Download presentation
Presentation is loading. Please wait.
1
補講:アルゴリズムと漸近的評価
2
アルゴリズム
3
アルゴリズムと問題 「アルゴリズム」とは「問題」を解くために、 「基本操作」(命令)を有限個組み合わせ てできる手順。 色々な問題 命令
データのソート アルゴリズム 四則演算 2進数への変換 代入演算 連立方程式を解く 比較演算 組み合わせ方 最大公約数
4
アルゴリズム例1 25の2進数は? 25/2 =12 ・・・1 12/2 = 6 ・・・0 6/2 = 3 ・・・0
10進数を2進数に変換する方法 25の2進数は? 2で割り算 商 余 25/2 =12 ・・・1 12/2 = 6 ・・・0 6/2 = 3 ・・・0 3/2 = 1 ・・・1 1/2 = 0 ・・・1
5
最大公約数を求める方法(ユークリッドの互除法)
アルゴリズム例2 最大公約数を求める方法(ユークリッドの互除法) 2つの自然数m,nの最大公約数を求めるアルゴリズム [step1]:mをnで割って余りをrとする。 [step2]:r=0ならアルゴリズム終了する。このときのnが 最大公約数 [step3]:r0なら、mにnを代入し、nにrを代入してstep1にもどる。 実行例 m=12 n=8 の最大公約数 1回前の余り で割り算 余り 次回の値 12/8=1・・・4 m=8 n=4 8/4=2 ・・・0 最大公約数は4
6
アルゴリズムとプログラム アルゴリズム プログラミング プログラム + プログラム言語 データ構造
int gcd(int m, int n){ int r; do { r= m % n; m=n; n=r; }while(r != 0); return m; } ユークリッドの互除法 + 整数型データ
7
アルゴリズムの評価
8
問題の大きさ 同じ問題でも、 その大きさ毎に必要な演算数(総ステップ数、計算時間)は異なる。 大きさも考えた問題 n桁の足し算
n桁の10進数をmビットの2進数へ変換 n変数の連立方程式 n個のデータに対する、ソート n桁の数とm桁の数の最大公約数 通常入力サイズは、n,m等の文字で表します。
9
アルゴリズムの評価 アルゴリズムは通常「問題」を解くためのものであり、 どんな大きさでも解けないといけない。
総ステップ数を、入力サイズnの関数T(n)で評価します。 (使用メモリ量を、入力サイズnの関数S(n)で 評価することもあります。)
10
1000MIPS(1秒間に10億回の演算可能)の コンピュータで考えてみましょう。 関数 n 10秒 1秒 0.01秒 約 秒 20秒
計算時間と関数 1000MIPS(1秒間に10億回の演算可能)の コンピュータで考えてみましょう。 関数 n サイズ 10秒 1秒 0.01秒 約 秒 20秒 10秒 1秒 約3京世紀 30秒 1分40秒 1分40秒 甚大 40秒 16分40秒 約2時間47分 甚大 50秒 約2時間47分 約11.5日 甚大 1分 約1日 約3.2年 甚大
11
関数の分類(オーダー記法) 関数の増加傾向により、 関数を大まかに分類したい。 指数(時間) 対数(時間) 多項式(時間)
12
O記法
13
O記法 定義 2つの正の値しかもたない数列を とする。 2つの定数 , が存在し、 なる全てのnに対し, ならば、 と書き、 はオーダー
2つの正の値しかもたない数列を とする。 2つの定数 , が存在し、 なる全てのnに対し, ならば、 と書き、 はオーダー と読む。 注意1:O記法では、「=」の左辺と右辺の交換は不可。
14
O記法のイメージ
15
O記法の例 とすれば、 に対して、 よって、 とすれば、 に対して、 よって、 注意2:通常O記法では、最も簡単な関数で表す。
16
O記法の例 とすれば、 に対して、 よって、 とする。 なので、 に対して、 よって、
17
O記法の練習 次の数列の一般項(関数)をO記法で表せ。
18
プログラムと漸近的評価 仮定1 プログラム内の加減算は、ある定数 時間以下で実行できる。 仮定2
プログラム内の加減算は、ある定数 時間以下で実行できる。 仮定2 プログラム内の乗除算は、ある定数 時間以下で実行できる。 仮定3 プログラム内の比較は、ある定数 時間以下で実行できる。 仮定4 プログラム内の代入は、ある定数 時間以下で実行できる。 . プログラムでは、このように仮定できることが多い。
19
プロうグラムの漸近的評価
20
仮定1-4より、 なる をとると、 プログラム内の4則演算、比較等はある定数時間以下で実行できる。 つよめて プログラム内では、 繰り返し構造、 (再帰関数を含む)関数呼び出し、 以外は定数時間で実行できると仮定できることが多い。
21
プログラムにおける計算時間の漸近評価例 function1() { for(k=0;k<n;k++) ・・・・ } この部分がn回
実行されることに 注意する。 function1の計算時間は、 である。
22
プログラムにおける計算時間の漸近評価例2 function2() { for(k=0;k<n;k++)
for(j=0;j<n;j++) ・・・・ } この部分は 回 実行されることに 注意する。 この部分は 回 実行されることに 注意する。 この部分は 回 実行されることに 注意する。 function2の計算時間は、 で ある。
23
プログラムにおける計算時間の漸近評価例3 function3の計算時間 を評価してみましょう。 function3() {
for(k=0;k<n;k++) for(j=0;j<k;j++) ・・・・・・ } function3の計算時間 を評価してみましょう。
24
プログラムにおける計算時間の漸近評価例4 int function4(int n) { if(n<1)
return(0); } else function4(n-1); function4の計算時間 を評価してみましょう。 この漸化式より、 である。
25
プログラムにおける計算時間の漸近評価例5 int function5(int n) { if(n<1)
return(0); } else function5(n/2); function5の計算時間 を評価してみましょう。 この漸化式より、 である。
26
プログラムにおける計算時間の漸近評価例6 function6の計算時間 を評価してみましょう。 この漸化式より、 である。
int function6(int n) { if(n<1) return; } else function6(n-1); function6の計算時間 を評価してみましょう。 この漸化式より、 である。
27
プログラムにおける計算時間の漸近評価練習1
次のプログラムの計算時間をO記法で求めよ。 ただし、入力サイズは仮引数nに入っている数とする。
28
(1) exercise1(int n) { for(j=0;j<n;j++) for(k=0;k<n;k++) ・・・・・・
} for(l=0;l<n;l++) ××××
29
(2) exercise2(int n) { if(n<2) return; } else exercise2(n-1);
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.