補講:アルゴリズムと漸近的評価.

Slides:



Advertisements
Similar presentations
計算機科学と計算幾何学 草苅 良至 12 月学科会議. 計算機‐科学について 「計算」について考える学問 機械的な操作で行えること。 処理。 理想的なコンピュータ(=計算機モデル) での基本動作の組み合わせ。 計算機科学とは 英語だと、 Computer Sience です。
Advertisements

授業展開#12 コンピュータの扱いにくい問 題. 扱いにくい問題  処理時間がかかる。  メモリを大量に必要とする。  プログラムの優劣、アルゴリズムの優劣 を比較するためには、標準的なコン ピュータで比較する必要がある。  処理時間を計るのに、コンピュータのモ デルとして、チューリングマシンを考え、
アルゴリズムと データ構造 第 3 回 基本的なデータ構造(2) : 配列 1. 前回の復習 アルゴリズムの計算量 最悪(最大)計算量 計算量の漸近的評価 (オーダ)  多項式時間アルゴリズム( polynomial time algorithm )  指数時間アルゴリズム( exponential.
プログラミング論 第八回数字の計算,整数の入出力. 本日の内容 前回の課題(続き) 前回の課題(続き) 数字の計算をする 数字の計算をする – 加減乗除を行う – インクリメント演算子とデクリメン ト演算子.
2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
Ibaraki Univ. Dept of Electrical & Electronic Eng. Keiichi MIYAJIMA
0章 数学基礎.
演算、整数型と浮動小数点型 第3回目 [4月27日、H.16(‘04)] 本日のメニュー 1)前回の課題・宿題 2)ファイルサーバの利用
ソフトウェア工学 2007年 5セメスタ.
算法数理工学 第1回 定兼 邦彦.
Q q 情報セキュリティ 第6回:2005年5月20日(金) q q.
4-3:高度なソートアルゴリズム① (分割統治法にもとづくソート)
データ構造と アルゴリズム 理工学部 情報システム工学科 新田直也.
3 一次関数 1章 一次関数とグラフ §3 一次関数の式を求めること          (3時間).
1. アルゴリズムと計算量.
2009/10/9 良いアルゴリズムとは 第2講: 平成21年10月9日 (金) 4限 E252教室 コンピュータアルゴリズム.
プログラミング言語論 第6回 型 情報工学科 篠埜 功.
基礎プログラミング (第五回) 担当者: 伊藤誠 (量子多体物理研究室) 内容: 1. 先週のおさらいと続き (実習)
論理式の表現を数学的に取り扱いやすくするために代数学の助けを借りる.
データ構造と アルゴリズム 第二回 知能情報学部 新田直也.
線形代数学 4.行列式 吉村 裕一.
データ構造と アルゴリズム 知能情報学部 新田直也.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
電気回路学Ⅱ エネルギーインテリジェンスコース 5セメ 山田 博仁.
7.時間限定チューリングマシンと   クラスP.
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
第7回 条件による繰り返し.
プログラムの制御構造 選択・繰り返し.
第二回 VB講座 電卓を作ろう.
関数の定義.
第10回関数 Ⅱ (ローカル変数とスコープ).
アルゴリズムとデータ構造1 2006年6月16日
プログラミング演習I 2003年5月7日(第4回) 木村巌.
情報工学概論 (アルゴリズムとデータ構造)
第7回 条件による繰り返し.
高度プログラミング演習 (08).
第3回 アルゴリズムと計算量 2019/2/24.
高度プログラミング演習 (05).
高度プログラミング演習 (05).
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
整数データと浮動小数データ.
情報処理Ⅱ 第2回:2003年10月14日(火).
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
11.再帰と繰り返しの回数.
コンパイラ 2011年10月20日
データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏
基礎プログラミング演習 第6回.
第14回 前半:ラムダ計算(演習付) 後半:小テスト
Q q 情報セキュリティ 第5回:2006年5月19日(金) q q.
プログラミング言語論 第10回 情報工学科 篠埜 功.
ウェブデザイン演習 第6回.
計算機プログラミングI 第4回 2002年10月31日(木) 問題解決とアルゴリズム クラスメソッドと手続きの抽象化 最大公約数
電気回路学Ⅱ 通信工学コース 5セメ 山田 博仁.
Q q 情報セキュリティ 第6回:2005年5月26日(金) q q.
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
Q q 情報セキュリティ 第8回:2004年5月28日(金) の補足 q q.
参考:大きい要素の処理.
高度プログラミング演習 (07).
関数と再帰 教科書13章 電子1(木曜クラス) 2005/06/22(Thu.).
第10回 関数と再帰.
Q q 情報セキュリティ 第7回:2005年5月27日(金) q q.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
プログラミング基礎a 第5回 C言語によるプログラミング入門 配列と文字列
第2章 数値の入力と変数 scanfと変数をやります.
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング論 バイナリーサーチ 1.
Presentation transcript:

補講:アルゴリズムと漸近的評価

アルゴリズム

アルゴリズムと問題 「アルゴリズム」とは「問題」を解くために、 「基本操作」(命令)を有限個組み合わせ てできる手順。 色々な問題 命令 データのソート アルゴリズム 四則演算 2進数への変換 代入演算 連立方程式を解く 比較演算 組み合わせ方 最大公約数

アルゴリズム例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

最大公約数を求める方法(ユークリッドの互除法) アルゴリズム例2 最大公約数を求める方法(ユークリッドの互除法) 2つの自然数m,nの最大公約数を求めるアルゴリズム [step1]:mをnで割って余りをrとする。 [step2]:r=0ならアルゴリズム終了する。このときのnが 最大公約数 [step3]:r0なら、mにnを代入し、nにrを代入してstep1にもどる。 実行例 m=12 n=8 の最大公約数 1回前の余り で割り算 余り 次回の値 12/8=1・・・4 m=8 n=4 8/4=2 ・・・0 最大公約数は4

アルゴリズムとプログラム アルゴリズム プログラミング プログラム + プログラム言語 データ構造 int gcd(int m, int n){ int r; do { r= m % n; m=n; n=r; }while(r != 0); return m; } ユークリッドの互除法 + 整数型データ

アルゴリズムの評価

問題の大きさ 同じ問題でも、 その大きさ毎に必要な演算数(総ステップ数、計算時間)は異なる。 大きさも考えた問題 n桁の足し算 n桁の10進数をmビットの2進数へ変換 n変数の連立方程式 n個のデータに対する、ソート n桁の数とm桁の数の最大公約数 通常入力サイズは、n,m等の文字で表します。

アルゴリズムの評価 アルゴリズムは通常「問題」を解くためのものであり、 どんな大きさでも解けないといけない。 総ステップ数を、入力サイズnの関数T(n)で評価します。 (使用メモリ量を、入力サイズnの関数S(n)で 評価することもあります。)

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年 甚大

関数の分類(オーダー記法) 関数の増加傾向により、 関数を大まかに分類したい。 指数(時間) 対数(時間) 多項式(時間)

O記法

O記法 定義 2つの正の値しかもたない数列を とする。 2つの定数 , が存在し、 なる全てのnに対し, ならば、 と書き、 はオーダー 2つの正の値しかもたない数列を         とする。 2つの定数    ,    が存在し、       なる全てのnに対し, ならば、 と書き、        はオーダー と読む。 注意1:O記法では、「=」の左辺と右辺の交換は不可。

O記法のイメージ

O記法の例 とすれば、 に対して、 よって、 とすれば、 に対して、 よって、 注意2:通常O記法では、最も簡単な関数で表す。

O記法の例 とすれば、 に対して、 よって、 とする。 なので、 に対して、 よって、

O記法の練習 次の数列の一般項(関数)をO記法で表せ。

プログラムと漸近的評価 仮定1 プログラム内の加減算は、ある定数 時間以下で実行できる。 仮定2 プログラム内の加減算は、ある定数  時間以下で実行できる。 仮定2 プログラム内の乗除算は、ある定数  時間以下で実行できる。 仮定3 プログラム内の比較は、ある定数  時間以下で実行できる。 仮定4 プログラム内の代入は、ある定数  時間以下で実行できる。 . プログラムでは、このように仮定できることが多い。

プロうグラムの漸近的評価

仮定1-4より、               なる  をとると、 プログラム内の4則演算、比較等はある定数時間以下で実行できる。 つよめて プログラム内では、 繰り返し構造、 (再帰関数を含む)関数呼び出し、 以外は定数時間で実行できると仮定できることが多い。

プログラムにおける計算時間の漸近評価例 function1() { for(k=0;k<n;k++) ・・・・ } この部分がn回 実行されることに 注意する。 function1の計算時間は、 である。

プログラムにおける計算時間の漸近評価例2 function2() { for(k=0;k<n;k++) for(j=0;j<n;j++) ・・・・ } この部分は  回 実行されることに 注意する。 この部分は  回 実行されることに 注意する。 この部分は  回 実行されることに 注意する。 function2の計算時間は、 で ある。

プログラムにおける計算時間の漸近評価例3 function3の計算時間 を評価してみましょう。 function3() { for(k=0;k<n;k++) for(j=0;j<k;j++) ・・・・・・ } function3の計算時間 を評価してみましょう。

プログラムにおける計算時間の漸近評価例4 int function4(int n) { if(n<1) return(0); } else function4(n-1); function4の計算時間 を評価してみましょう。 この漸化式より、 である。

プログラムにおける計算時間の漸近評価例5 int function5(int n) { if(n<1) return(0); } else function5(n/2); function5の計算時間 を評価してみましょう。 この漸化式より、 である。

プログラムにおける計算時間の漸近評価例6 function6の計算時間 を評価してみましょう。 この漸化式より、 である。 int function6(int n) { if(n<1) return; } else function6(n-1); function6の計算時間 を評価してみましょう。 この漸化式より、 である。

プログラムにおける計算時間の漸近評価練習1 次のプログラムの計算時間をO記法で求めよ。 ただし、入力サイズは仮引数nに入っている数とする。

(1) exercise1(int n) { for(j=0;j<n;j++) for(k=0;k<n;k++) ・・・・・・ } for(l=0;l<n;l++) ××××

(2) exercise2(int n) { if(n<2) return; } else exercise2(n-1);