データ構造とアルゴリズム

第二回 (2012年9月28日)

アルゴリズムの表現と評価

http://www.sw.it.aoyama.ac.jp/2012/DA/lecture2.html

Martin J. Dürst

AGU

© 2008-12 Martin J. Dürst 青山学院大学

目次

前回のまとめ

前回の宿題 1: 膨大なデータ

提出: 来週の木曜日 (9月27日) 19時00分締切; O 棟 529号室の前の箱に提出; A4 一枚 (両面可) 厳守

(それぞれの問題で、想定の根拠となる理由、参考にした文献など必ず明記のこと)

  1. 東京証券取引所の第一部の取引で、一株式会社の株が営業時間内に平均で 1分に一回売買されている想定のもと、合計で年間に何項目ぐらいのデータが集まるかを、計算しなさい。
  2. Google (又は明記の上で他のサーチエンジン) が対応しているウェブページの数と平均のページあたりのリンク数を調べ、おおよその合計のリンク数を計算しなさい。
  3. 問題 1 や 2 の結果よりも大きくて実際に計算機で扱えそうなデータ項目の量を考え、説明しなさい (他人と同じものの場合には減点の対象)。

前回の宿題 2: アルゴリズムの表現方法

別紙「アルゴリズムの表現方法」のアルゴリズムの表現方法をよく見て、それぞれの方法の利点と欠点を考えなさい。

(提出不要)

アルゴリズムの表現方法

文書

原理: アルゴリズムを視線言語で説明

利点: 素人も含め人間に分かりやすい・書きやすい

欠点:

例: 流れ図など

利点: 視覚的な表現

欠点:

(構造化プログラミング (structured programming): goto (プログラム内の任意のところへのジャンプ) の代わり、入れ子の枝分れ、繰返しなどの使用)

 

疑似コード

(pseudocode)

原理: 自然言語を一部混ぜたプログラム言語に近い記述

利点:

欠点:

 

プログラム言語

利点:

欠点:

Ruby プログラム言語

前回の宿題 3: Ruby のインストール

自分のノートパソコン (又は自宅のパソコン) に Ruby をインストール

インストール方法は主に二つ:

確認方法: Start Command Prompt with Ruby 又は Cygwin Bash Shell/Cygwin Terminal にて ruby -v を実行

インストールできない場合、次回授業の前日までに要相談

アルゴリズム表現のための Ruby

最初の Ruby の例

線形探索と二分探索: 2search.rb

実行:

Ruby の記法の基本

アルゴリズムの評価の概要

主な評価基準:

評価のときに必要な情報:

実行時間の比較: 具体から抽象へ

実行時間の比較: 計測

⇒ もっと抽象的な比較方法が必要

実行時間の比較: ステップの数え上げ

(ステップ: 一定時間で計算可能な部分、例えば演算、比較、メモリ参照など)

⇒ もっと抽象的な比較方法が必要

 

漸近的な増加の例

(asymptotic growth)

ステップの数
n (データ項目の数) 1 10 100 1,000 10,000 100,000 1,000,000
線形探索
2分探索

ステップの数を式で表すとどうなる

 

データの個数が多くなると式のどの項が重くなる

 

漸近的な増加の考え方

⇒ ハードウェア、実装の詳細、ステップの数え方に依存しない

⇒ アルゴリズムの本質的な差が表せる

 

漸近記号: O の定義

("big Oh" notation)

漸近的増加の上界を簡単な式で表す記法

漸近記号の具体例: 探索アルゴリズムの比較

漸近記号の具体例: ステップ数の比較

それぞれ二つのアルゴリズムのステップ数で、漸近的な増加が大きい方はどちらか

100n n2
1.1n n10
5 log2 n 10 log10 n
20n n!
1000n n

まとめ

宿題

(提出不要)

Ruby を使って探索アルゴリズムをさらに比較