1 アルゴリズムの高速化. 2 アルゴリズムにおける 大幅な性能アップ 多項式時間アルゴリズム VS 対数時間アルゴリズム (最大公約数の問題) 指数時間アルゴリズム VS 多項式時間アルゴリズム (フィボナッチ数列を求める問題)

Slides:



Advertisements
Similar presentations
1 ソフトウェア工学 200 5 年 5セメスタ. 2 履修にあたって 教科書:「アルゴリズムとデータ構造」 平田富夫著 森北出版 講義:5セメスター開講、専門科目、 K318 、金曜4時限 担当: 草苅 良至 GI511, 2095、 参考書:「プログラミング作法」
Advertisements

1 7.時間限定チューリングマシンと クラス P. 2 7 -1.入力サイズ チューリングマシンの入力記号 の長さ を 入力サイズという。 名称:合成数の問題 インスタンス:整数n 問:nは合成数か? 通常は、入力サイズとしてはもっとも短い表現での 長さが利用される。 例えば、次のような合成数の問題における入力サイズは、
7.n次の行列式   一般的な(n次の)行列式の定義には、数学的な概念がいろいろ必要である。まずそれらを順に見ていく。
9.線形写像.
3.多項式計算アルゴリズム べき乗の計算 多項式の計算.
時間的に変化する信号. 普通の正弦波 は豊富な情報を含んでいません これだけではラジオのような複雑な情報 を送れない 振幅 a あるいは角速度 ω を時間的に変化 させて情報を送る.
情報処理A 第10回 Excelの使い方 その3.
九州大学 岡村研究室 久保 貴哉 1. 利用中のAPの数の推移 2 横軸:時刻 縦軸:接続要求数 ・深夜では一分間で平均一台、 昼間では平均14台程度の接続 要求をAPが受けている。 ・急にAPの利用者数が増えてく るのは7~8時あたり.
5.連立一次方程式.
相関.
1 情報量(2章). 2 物理的概念との対比1(入れ物と中 身) 塩水 塩 データ 情報 情報の量? 塩分の量! 情報の量は見た目ではわ からない。データと情報 は異なる概念。 塩分の量は見た目 ではわからない。 しかし、本質的な もの。
―本日の講義― ・平均と分散 -代表値 -ぱらつき(分散・標準偏差等) ・Excelによる演習
論理回路 第2回 今日の内容 前回の課題の説明 数の体系 – 数の表現 – 代表的な数 – 基数の変換 – 補数.
ノイズ. 雑音とも呼ばれる。(音でなくても、雑 音という) 入力データに含まれる、本来ほしくない 成分.
この資料は、情報工学レクチャーシリーズ オペレー ティングシステム 松尾啓志 著(森北出版株式会 社)を用いて授業を行うために、名古屋工業大学松 尾啓志、津邑公暁が作成しました。 パワーポイント2007で最終版として保存しているため、変更はできませ
広告付き価格サービ ス 小園一正. はじめに 世の中には様々な表現方法の広告があり ます。その中でも私たち学生にとって身 近にあるものを広告媒体として取り入れ られている。 価格サービス(無料配布のルーズリー フ)を体験したことにより興味を惹かれ るきっかけとなった。主な目的は、これ.
素数判定法 2011/6/20.
フーリエ係数の性質. どこまで足す? 理想的には無限大であるが、実際に はそれは出来ない これをフーリエ解析してみる.
公開鍵暗号系 2011/05/09.
1章 行列と行列式.
本宮市立白岩小学校. 1 はじめに 2 家庭学習プログラム開発の視点 ① 先行学習(予習)を生かした 確かな学力を形成する授業づく り ② 家庭との連携を図った家庭学習の習慣化.
フーリエ級数. 一般的な波はこのように表せる a,b をフーリエ級数とい う 比率:
プログラミング入門2 第4回 式文 代入式 論理演算子 ループの脱出、スキップ 情報工学科 篠埜 功.
3.エントロピーの性質と各種情報量.
9.通信路符号化手法1 (誤り検出と誤り訂正の原理)
Excelによる積分.
1 6.低次の行列式とその応用. 2 行列式とは 行列式とは、正方行列の特徴を表す一つのスカ ラーである。すなわち、行列式は正方行列からスカ ラーに写す写像の一種とみなすこともできる。 正方行列 スカラー(実数) の行列に対する行列式を、 次の行列式という。 行列 の行列式を とも表す。 行列式と行列の記号.
計算のスピードアップ コンピュータでも、sin、cosの計算は大変です 足し算、引き算、掛け算、割り算は早いです
線形符号(10章).
1 0章 数学基礎. 2 ( 定義)集合 集合については、 3セメスタ開講の「離散数学」で詳しく扱う。 集合 大学では、高校より厳密に議論を行う。そのために、議論の 対象を明確にする必要がある。 ある “ もの ” (基本的な対象、概念)の集まりを、 集合という。 集合に含まれる “ もの ” を、集合の要素または元という。
10.PとNP完全問題との境界.
複素数.
4.プッシュダウンオートマトンと 文脈自由文法の等価性
1 0章 数学基礎. 2 ( 定義)集合 集合については、 3セメスタ開講の「離散数学」で詳しく扱う。 集合 大学では、高校より厳密に議論を行う。そのために、議論の 対象を明確にする必要がある。 ある “ もの ” (基本的な対象、概念)の集まりを、 集合という。 集合に含まれる “ もの ” を、集合の要素または元という。
信号測定. 正弦波 多くの場合正弦波は 0V の上下で振動する しかし、これでは AD 変換器に入れら れないので、オフ セットを調整して データを取った.
1 9.線形写像. 2 ここでは、行列の積によって、写像を 定義できることをみていく。 また、行列の積によって定義される写 像の性質を調べていく。
通信路(7章).
3.プッシュダウンオートマトンと 文脈自由文法
6.符号化法(6章).
ビット. 十進数と二進数 十進数  0から9までの数字を使って 0、1、2、3、4、5、6、7、8、9、 10、11、12 と数える 二進数  0と1を使って 0、1、10、11、100、101、11 0、111 と数える.
人工知能特論 II 第 4 回 二宮 崇 1. CCG (COMBINATORY CATEGORIAL GRAMMAR) 組合せ範疇文法 2 今日の講義の予定.
重不況の経済学 第2章第2節 山下 真弘. 不均等成長 不均等成長=市場の特定の製品または特定の国・ 地域で付加価値の縮小が生じること 要因は2つ 製品別の「生産性向上速度の差」 付加価値総額の天井(=需要制約)
アルゴリズムとデータ構造 補足資料14-1 「ハッシュ法」
3.正方行列(単位行列、逆行列、対称行列、交代行列)
様々な情報源(4章).
プログラミング演習B ML編 第3回 2010/6/15 (コミ) 2010/6/16 (情報・知能) 住井 ~sumii/class/proenb2010/ml3/
論理回路 第1回. 今日の内容 論理回路とは? 本講義の位置づけ,達成目標 講義スケジュールと内容 受講時の注意事項 成績の評価方法.
Bar-TOP における光の 群速度伝播の解析 名古屋大学 高エネルギー物理研究室 松石 武 (Matsuishi Takeru)
Three-Year Course Orientation International Course.
方程式を「算木」で 解いてみよう! 愛媛大学 教育学部 平田 浩一.
C言語応用 構造体.
3.多項式計算アルゴリズム べき乗の計算 多項式の計算.
階層分析法. 表3. 1 ルートR1R1 R2R2 R3R3 R4R4 R5R5 F1F1 最寄駅までの所要 時間(分) 10 7 F2F2 実乗車時間(分) F3F3 片道切符(円) ヶ月定期(円) 11,21011,9309,75012,46012,720.
プログラミング演習B ML編 第3回 2006/7/4 (通信コース) 2006/7/12 (情報コース) 住井 ~sumii/class/proenb2006/ml3/
HKS Analysis Log Jul 2006 Part1 D.Kawama. 第壱部 HKS Sieve Slit Analysis.
1 プログラミング言語論 第13回 プログラムの意味論と検証 (2) 表示的意味論 担当:犬塚. 2 表示的意味論 denotational semantics  表示的意味論では、プログラムの要素とそれが 意味するものを対応付ける。 変数 式 文 A B … A+2 2B+C A:=A+2 if.
プログラミング言語論 第9回 論理型プログラミング言語 担当:犬塚.
8.任意のデータ構造 (グラフの表現とアルゴリズム)
プログラミング入門2 第3回 複合文、繰り返し 情報工学科 篠埜 功.
第14回 プログラムの意味論と検証(3) 不動点意味論 担当:犬塚
実験5 規則波 C0XXXX 石黒 ○○ C0XXXX 杉浦 ○○ C0XXXX 大杉 ○○ C0XXXX 高柳 ○○ C0XXXX 岡田 ○○ C0XXXX 藤江 ○○ C0XXXX 尾形 ○○ C0XXXX 足立 ○○
オセロの思考アルゴリズムについて 1103072 岩間 隆浩.
音の変化を視覚化する サウンドプレイヤーの作成
プログラミングの基礎知識 プログラミングの手順と重要概念 アルゴリズム. プログラミングの手順 コーディング エディタなどでコードを記述 コンパイル・インタープリタ 実行可能な形に翻訳 デバッグ(虫取り、不具合の調整) 完成!
Self-efficacy(自己効力感)について
1 オペレーティングシステム #7 計算機工学 III オペレーティングシステム #7 主記憶管理:主記憶管理基礎 2006/05/26 津邑 公暁.
本文. 考えながら読みましょ う 「いろいろなこと」( 3 行目)は何で すか 「①電話料金はコンビニで支払いをしていま す。いつでも払えますから、便利です。」 「②夕食はコンビニで買います。お弁当やお かずがいろいろありますから。」今、若者に 人気のあるコンビニは、いろいろなことをす るのに非常に便利な場所になった。
11万km上空のかぐやから見た地球. デジタル信号処理 Digital Signal Processing 2010 年度春学期 Spring Semester, 2010 担当者: 栗濱 忠司( Professor ) 第3週第3週.
IIR 輪講復習 #18 Matrix decompositions and latent semantic indexing.
地球儀と様々な地図. 1 球体としての地球 こうした現象はあることをイ メージすると理解できる。
Presentation transcript:

1 アルゴリズムの高速化

2 アルゴリズムにおける 大幅な性能アップ 多項式時間アルゴリズム VS 対数時間アルゴリズム (最大公約数の問題) 指数時間アルゴリズム VS 多項式時間アルゴリズム (フィボナッチ数列を求める問題)

3 最大公約数問題

4 入力:2つの整数 a,b (ここで、入力サイズは、 とします。) 出力: a,b の最大公約数

5 素朴な最大公約数発見法 注目点 – すべて整数 アィディア – の整数をすべて調べる。 – から初めてカウンタを減ら しながら 繰り返す。

a b i

7 アルゴリズム naïve_gcd(a,b) 入力: a,b 出力: gcd(a,b) 1.for(i= ;i>0;i--){ 2. if(i が a と b の約数 ){ 3. return(i); 4. } 5.}

8 アルゴリズム naïve_gcd の正当性は明らか なので省略する。(帰納法で証明もでき る。) アルゴリズム naïve_gcd の時間計算量 高々 の繰り返し回数 の時間計算量 とすると、 時間 よって、 naïve_gcd は線形時間アルゴリズムである。

9 ユークリッドの互除法 注意点 – 全ての整数を調べる必要はない。 – 整数における性質を利用(整数論) アイディア – 余りに注意して、互いに除算を繰り返す。 – 前回の小さい方の数と余りを、新たな2数に置 き換えて繰り返す。 – 割り切れた時の小さい数が、最大公約数。 → 繰り返し回数を大幅に削減できる。

10 アルゴリズム euclid_gcd(a,b) 入力: a,b(a>b とする。) 出力: gcd(a,b) 1.big=a; 2.small=b; 3.r=big % small; 4.While( 割り切れない ){ 5. big=small; 6. small=r; 7. r=big % small; 8.} 9.return small;

11 ユークリッドの互除法の動作 の最大公約数を求める。 余りの系列 が重要 割り切れたときの 除数が最大公約数

12 練習 に対して、ユークリッドの互除法を用いて、 最大公約数を求めよ。

13 ユークリッド互除法の正当性 命題E1(割り算の性質) 2つの自然数 a,b(a ≧b>0)に対して、 2つの自然数 q,r を用いて、 a=bq+r (0 ≦r<b) と表せる。 整数論の初歩を用いる。ここでは、必要なものの証明を 与える。

14 場合2 :a=1,b >1のとき 証明 bを固定し、 a に関する帰納法で証明する。 基礎: a=1 のとき。 1=b*0+1 1=b*1+0 さらに、2つの場合に分ける。 場合1: a=1,b=1 のとき。 このとき、q=1、r=0 このとき、q=0、r=1 q を商、 rを余りだと 考える。

15 帰納: a=n のとき命題が成り立つと仮定する。(帰納法の仮定) 帰納法の仮定より、 n=bq+r (0 ≦ r<b) r は自然数なので、 0 ≦ r <b は、 1≦r+1≦ b と同じである。 ① ①の両辺に1を加える。 が成り立つ。 n+1=bq+r+1 ② これも②の等号の有無で2つの場合に分ける。

16 場合1: b=r+1 のとき。 n+1=bq+r+1 ∴ n+1=bq+b ∴ n+1=( q +1) b +0 商q+1、 余り 0 場合 2 : b>r+1 のとき。 n+1=bq+r+1 ∴ n+1=bq+(r+1) 商q、 余りr+1

17 命題E2(割り算の一意性) 2つの自然数 a,b(a ≧b>0)に対して、 2つの自然数 q,r を用いて、 a=bq+r (0 ≦r<b) と表すとき、その表現法は一意である。 証明 背理法による。 2通りに表せると仮定する。(背理法の仮定) 背理法の仮定より、 a=bq+r (0 ≦ r<b) a=bq’+r’(0 ≦ r’<b’ ) と表現できる。ここで、 q と q’ か、 r とr ‘ のどちらかは、 異なってなければなららい。

18 両辺を減算する。 a=bq+r (0 ≦ r<b) ー) a=bq’+r’(0 ≦ r’<b ) ___________ 0= ( q-q’)b + r-r’ (-b<r-r’<b) ∴( q’-q) b= r-r’ これは、 r-r’ が b の倍数であることを意味する。 一方、( -b<r-r’<b )であり、全て整数なので、 r-r’=0 ∴ r=r’ これより、 q’=q が導けるが、背理法の仮定と矛盾する。 よって、命題が成り立つ。

19 の公約数をと書く。 例えば、 命題E3 (約数集合の普遍性) に対して、先の命題E1,E2で定 まる表現を とする。このとき、 Common Divisor ( 公約数)

20 証明の前に、具体例で調べる。 とする。 より、 公約数をみると、 また、 より、

21 証明 任意の に対して、を示す。 より、自然数 を用いて、 と書ける。を用いると、次式が成り立つ。 を代入してまとめる。 この式は、 が の約数であることを示している。

22 ユークリッドの互除法の停止 性 命題E4 (ユークリッド互除法の停止性) ユークリッドの互除法は停止する。 証明 ユークリッドの互除法によって次のような系列が得られたする。 このとき、余りの系列は、単調減少する。すなわち、 余りは、非負整数なので、ある繰り返し回数で必ず0になる。 したがって、停止する。

23 ユークリッドの互除法の時間計算 量 命題E5 (余りの性質) ユークリッド互除法の時間計算量を見積もるために、 次の命題が成り立つことに注意する。 に対して、先の命題E1,E2で定 まる表現を とする。このとき、

24 証明の前に、具体例で確認する。

25 証明 2つの場合に分けて、 を示す。 場合1:のとき、

26 場合2:のとき、 このとき、 に注意する。 において、商として にしかならない。 したがって、

27 命題E5より、ユークリッド互除法の計算量を求められる。 繰り返し回数は、高々 回である。 したがって、ユークリッドの互除法は、 時間計算量 のアルゴリズムである。

28 最大公約数問題のまとめ 素朴な方法 – 時間のアルゴリズム ユークリッドの互除法 – 時間のアルゴリズム 入力サイズ

29 ユークリッドの互除法の再帰 的な実現 ユークリッドの互除法は、再帰的にも実現できる。 サイズが小さい同じ 問題を解くことに注意する。 割り切れるときが基 礎

30 アルゴリズム recucive_gcd(a,b) 入力: a,b 出力: gcd(a,b) 1.int gcd(a,b){ 2. r=a%b; 2. if(r==0){ 3. return b; 4. } 5. else{ 6. return gcd(b,r); 7. } 8.} 基礎 帰納

31 フィボナッチ数列問題

32 フィボナッチ数列問題 入力:整数N 出力:フィボナッチ数列の第N項

33 漸化式と再帰アルゴリズム アルゴリズム fibo_rec 入力: N 出力: fibo(N) 1.int f ( n ){ 2.if(n==0){ 3.return 0; 4.}else if(n==1){ 5. return 1; 6.}else { 7. return f(n-1)+f(n-1); 8.} 9.}

34 再帰アルゴリズムの利点の一つに、 漸化式で表された数列を直接プログラム にすることができることがある。 ある問題を解くときに、同じ問題でよりサイズが 小さい問題インスタンスの解が、元の問題の解放 に大きな役割を果たせることが多い。 再帰アルゴリズムが便利 ただし、再帰アルゴリズムは、性能に大幅な差異が あるので、最悪時間計算量をきちんと見積もる必要 がある。

35 アルゴリズム fibo_rec の正当性は明らか なので省略する。 アルゴリズム fibo_rec の時間計算量 T(n ) は漸化式で表される。この漸化式を解 くことで、時間計算量が求まる。

36 アルゴリズム fibo_rec(N) の最悪時間量 1.int f ( n ){ 2.if(n==0){ 3.return 0; 4.}else if(n==1){ 5. return 1; 6.}else { 7. return f(n-1)+f(n-1); 8.} 9.} 求める時間量をT(N)とすると次式が成り立つ。

37 漸化式を簡単に解くには、時間の関数は単調増加であるこ とを利用する。 このように、 再帰アルゴリズムの 時間計算量は、 始め漸化式で導かれ ることが多い。 を利用すると、与式の帰納部分は、 とかける。

38 この漸化式を解く。 厳密に解くには、帰納法を用いるか、あるいは差分方程 式の解を求める必要がある。 しかし、オーダー記法による漸近的評価では、不等式で 計算していった方が、簡単に時間計算量が求まることが多 い。

39 問題の考察による高速化 フィボナッチ数列のような漸化式で表される数列 は、 N 以下の全ての項が計算されていれば、定数時間 で計算することができる。 漸化式は、その項より前の項番 号を持つ式を組み合わせて定義 される。 小さい項番号から、全ての数列を保持していれば、 高速化が図れる。

40 配列を用いたアルゴリズム アルゴリズム fibo_array 入力: N 出力: fibo(N) 1.int f ( n ){ 2.A[0]=0; 3.A[1]=1; 4.For(i=2;i<=n;i++){ 5. A[i]=A[i-1]+A[i-2]; 6.} 7. return A[n]; 8.}

41 アルゴリズム fibo_array の時間計算量 for ループを n-1 回繰り返しているだけなので、 O(n)時間 この問題の場合は、再帰を用いると性能が悪くなる。 (問題によっては、高性能の再帰アルゴリズムもあるので、 十分な考察が必要となる。)

42 fibo_rec が低速な理由 主に、不必要な再計算を行っていることが原因。 再帰呼び出しを注意深くトレースする と、同じ値を再計算していることがわ かる。 再帰呼び出し

43 更なる高速化 ○ 近似値でよければ、さらに高速化できる。 数学的には、フィボナッチ数列の一般項は次式である。 高速なべき乗アルゴリズムを用いれば、 の時間計算量で解くことができる。 黄金比 の解。