計算機プログラミングI 第6回 2002年11月14日(木) アルゴリズムと計算量 第1回課題の説明 平方根を計算するアルゴリズム 計算量

Slides:



Advertisements
Similar presentations
山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
Advertisements

コンピュータプラクティ スⅠ 比較実験 水野嘉明. 本日の予定 計算量について 「比較実験」  パラメータを変化させての比較 ⇒ 実験1  二つのプログラムの比較 ⇒ 実験2  実験レポート R3として提出 2.
放射線の計算や測定における統計誤 差 「平均の誤差」とその応用( 1H) 2 項分布、ポアソン分布、ガウス分布 ( 1H ) 最小二乗法( 1H )
プログラミング演習( 2 組) 第 9 回
MS-EXCEL、 OpenCalcを 用いた表計算
看護学部 中澤 港 統計学第5回 看護学部 中澤 港
アルゴリズムとデータ構造 2012年6月27日
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
電子情報工学科5年(前期) 7回目(21/5/2015) 担当:古山彰一
近似アルゴリズム 第10章 終了時刻最小化スケジューリング
プログラミング論 I 補間
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
プログラミングができるようになるには…. 一週間に1回では無理! 自分の力でできるだけがんばる
6/19 前回復習 for文による繰り返し計算 演習1:1から10まで足して画面に結果を表示する 提出者: 1人
アルゴリズムとプログラミング (Algorithms and Programming)
多重ループ 繰り返し構造:補足事項 第8回目 [6月12日、H.15(‘03)] 本日のメニュー 1)前回の課題について
第2回ネットワークプログラミング 中村 修.
2009/10/9 良いアルゴリズムとは 第2講: 平成21年10月9日 (金) 4限 E252教室 コンピュータアルゴリズム.
流れ(3時間分) 1 ちらばりは必要か? 2 分散・標準偏差の意味 3 計算演習(例題と問題) 4 実験1(きれいな山型の性質を知ろう)
放射線の計算や測定における統計誤差 「平均の誤差」とその応用(1H) 2項分布、ポアソン分布、ガウス分布(1H) 最小二乗法(1H)
数値解析シラバス C言語環境と数値解析の概要(1回) 方程式の根(1回) 連立一次方程式(2回) 補間と近似(2回) 数値積分(1回)
非線形方程式の近似解 (2分法,はさみうち法,Newton-Raphson法)
2008年6月12日 非線形方程式の近似解 Newton-Raphson法
配列(1) 第9回目 [6月15日、H.16(‘04)] 本日のメニュー 1)前回の課題について 2)前回の宿題について 3)配列 4)課題
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
第7回 条件による繰り返し.
繰り返し計算 while文, for文.
繰り返し計算 while文, for文.
数値積分.
第10回関数 Ⅱ (ローカル変数とスコープ).
プログラミング演習I 2003年5月7日(第4回) 木村巌.
第7回 条件による繰り返し.
第9回関数Ⅰ (簡単な関数の定義と利用) 戻り値.
確率と統計 メディア学部2008年後期 No.3 平成20年10月16日(木).
関数の再帰呼び出しとは ハノイの塔 リダイレクト レポート課題
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
プログラミング入門2 第13回、14回 総合演習 情報工学科 篠埜 功.
プログラミング 4 探索と計算量.
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
復習 一定回数を繰り返す反復処理の考え方 「ループ」と呼ぶ false i < 3 true i をループ変数あるいはカウンタと呼ぶ
プログラミング入門2 総合演習課題 2008年 12/22(月), 2009年 1/14(水) 実施 これまでの講義内容についての腕試し
アルゴリズムとデータ構造1 2006年7月11日
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
アルゴリズムとデータ構造 2011年6月23日
データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏
プログラミングⅡ 第2回.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
プログラミング入門2 第13回、14回 総合演習 情報工学科 篠埜 功.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
計算機プログラミングI 第3回 プリミティブ値 クラスメソッド クラス変数 式と演算 変数の利用
~sumii/class/proenb2010/ml2/
計算機プログラミングI 第4回 2002年10月31日(木) 問題解決とアルゴリズム クラスメソッドと手続きの抽象化 最大公約数
13.ニュートン法.
アルゴリズムとデータ構造 2012年6月25日
~sumii/class/proenb2009/ml6/
2008年6月5日 非線形方程式の近似解 2分法,はさみうち法,Newton-Raphson法)
Cプログラミング演習 ニュートン法による方程式の求解.
第3章 統計的推定 (その2) 統計学 2006年度 <修正・補足版>.
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
@kagamiz (Jayson Sho Toma)
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
コンピュータの高速化により, 即座に計算できるようになってきたが, 手法的にはコンピュータ出現以前に考え出された 方法が数多く使われている。
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
プログラミング言語によっては,複素数が使えない。
知能情報工学演習I 第10回( C言語第4回) 課題の回答
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
プログラミング論 バイナリーサーチ 1.
Presentation transcript:

計算機プログラミングI 第6回 2002年11月14日(木) アルゴリズムと計算量 第1回課題の説明 平方根を計算するアルゴリズム 計算量 1. 単純なもの 2. 二分法 練習 計算量 その目的 定義 平方根のアルゴリズムの計算量 第1回課題の説明

平方根の計算 ある数xの平方根をδ以内の誤差で求める 単純なアルゴリズム: a=0, δ, 2δ, 3δ, ...のように変化させ a2と x を比較し、 x < a2となったら終了 (a- δ)2<x < a2なので a が x の平方根の近似値

平方根:単純なプログラム 単純なアルゴリズム: a=0, δ, 2δ, 3δ, ...のように変化させ a2と x を比較し、 x < a2となったら終了 public static double linear(double x) { double a = 0; // 平方根の推定値 while (aの自乗がx未満か) { aをδだけ増やす } return a;

平方根: 単純なアルゴリズムの問題 例: 106の平方根を誤差10-6以内で求めよ 1回目: a=0, a2 =0 < 106 ・・・ cf. 辞書を1ページずつめくって探す 解から遠いところを細く探しても無駄

平方根: 二分法 ポイント: 推測値から正解のある範囲が分かる 解のありそうな区間を狭めてゆく 例: 辞書で「programming」を引く romanticism learning onslaught price war Z ポイント: 推測値から正解のある範囲が分かる A

平方根: 二分法 2乗した値: 区間の幅はいずれδ以下に 1 1.25 1.5625 1.375 1.890625 1.4375 2.06640625 1.5 2.25 2 区間の幅はいずれδ以下に 2乗した値:

平方根: 二分法 min, max: 区間の下限・上限とする はじめ: min=0, max=x 区間の幅がδ以下になるまでの間 区間の中央値midの2乗と x を比較 mid2 < x のとき: 下限をmidまで上げる mid2 > x のとき: 上限をmidまで下げる 1.25 1.5625 1 1.5 2 min mid max 2乗した値:

平方根: 二分法のプログラム min, max: 区間の下限・上限とする はじめ: min=0, max=x 区間の幅がδ以下になるまでの間 区間の中央値 midの2乗と x を 比較 mid2 < x のとき: 下限をmidまで 上げる mid2 > x のとき: 上限をmidまで 下げる public static double binary(double x) { double min = 0, max = x; // 区間の下限・上限 while (区間の幅はδ以上か) { if (区間の中央値の2乗がx未満か) { 次の区間の下限を今の中央値にする } else { 次の区間の上限を今の中央値にする } return max;

平方根: 練習 6-1 単純: 動かしてみる 6-2 単純: xを大きくしたときの実行時間 6-3 二分法:作る 6-4 単純vs二分法 値の正しさ 計算時間 6-5: 平方根以外の関数 f(x)=√xの場合 a2の大小をxと比較 f(x)=1/xの場合 axの大小を1と比較 f(x)=3√xの場合 a3の大小をxと比較

計算量 例: xの平方根を計算するアルゴリズム ――およその所要時間 定義: 単純なもの O(√x) 二分法 O(log x) n:問題の大きさ。 (時間計算量): あるプログラムがnの問題を 解くのにかかる時間のうち、 nに関係する主要な非定数項 O(f(n)) のように書く

計算量の例 1からnまでの和を求める n回のくりかえし 1回あたり足し算2回・比較が1回 計3n回の計算 ――計算量はO(n) int n = 12345; // 上限 int sum = 0; // 合計 for (i = 1; i < n; i++) { sum = sum + i; }

計算量の例 n個の値の標準偏差を計算する n回のくりかえし――1回あたり5回の演算 その後5回の演算 計5n+5回の計算 ――計算量はO(n) int n = 12345; // 上限 int sumSquare = 0; // 2乗和 int sum = 0; // 合計 for (i = 1; i < n; i++) { int m = mark[i]; sum = sum + m; sumSquare = sumSquare + m*m; } double ave = sum/n; double stdDev= Math.sqrt(sumSquare/n - ave*ave); 定数倍・定数項は 無視する

計算量の例 単純な素数の個数の数え上げ n回の繰返し――x回目は最大 cx+d 回の演算 演算回数の計 (2c+d)+ (3c+d)+ (4c+d)+...+ (nc+d) = cn2/2 +dn 定数およびnの項を無視して O(n2) int n = 100000; // 調べる最大値 int numPrimes = 0; // 素数の個数 for (int x = 2; x < n; x++) { int i = 2; // xの最小の約数を見つけて while (x % i != 0) { // iに代入する i++; } if (x == i) { // x==iならxは素数 numPrimes++;

計算量の例: 平方根 問題の大きさ: x (√xを求める数) 単純なアルゴリズム √x /δ回の繰返し ―― O(√x ) public static double linear(double x) { double a = 0;// 平方根の推定値 while (aの自乗がx未満か) { aをδだけ増やす } return a;

計算量の例: 平方根 問題の大きさ: x (√xを求める数) 二分法: 繰返しの回数は? 繰返し1回あたりの計算は 定数 区間の幅に注目: 最初 x, 2回目x/2, 3回目x/4, 4回目x/8, ... x/2k<δになったら終了、 つまり約log2(x)-log2 (δ)回 繰返し1回あたりの計算は 定数 よってO(log x ) public static double binary(double x) { double min = 0, max = x; // 区間の下限・上限 while (区間の幅はδ以上か) { if (区間の中央値の2乗がx未満か) { 次の区間の下限を今の中央値にする } else { 次の区間の上限を今の中央値にする } return max;

計算量の利用 平方根を求める時間 (秒) 計算量の変化 O(log x)のアルゴリズムは重要

練習 (計算量) 6-6: 平方根のプログラムにおける計算量と 実行時間の関係 6-7: 許容誤差も含めた計算量 6-6: 平方根のプログラムにおける計算量と 実行時間の関係 6-7: 許容誤差も含めた計算量 δを小さくするとそれだけ時間も増えるはず 6-8: 冪乗のアルゴリズム xn = x*x*x*・・・*x 掛け算をn回 x13 = x*x12 = x*(x2)6 =x*((x2)2)3=x*((x2)2)*((x2)2)2 掛け算を5回 計算量は?

第1回課題: Morphing 期限: 12月4日(水) 提出方法: 以下のどちらか 期限: 12月4日(水) 提出方法: 以下のどちらか HTML形式で作ったファイルをスクリプト実行によって提出(詳細は追って通知する)、あるいは 紙に書かれたものをレポートボックスへ提出 提出物: 各項目について、課題の考察・解いた方法の説明、コンパイル・実行可能なプログラム。 注意事項: 常識の範囲を越えた類似部分のあるレポートがあった場合は、追加の面接試験を行う場合や、当該レポートの評価を0点にすることがある。 全ての項目を提出しなくてもよい。 複数の項目をまとめて解いた場合には、分かるように明記すること。 提出物の中心は考察および解いた方法の説明である。(プログラムは説明が正しいことの証明に過ぎないので、それだけを提出してはならない。) レポートの読みやすさ・独自性も採点の対象である。