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

第二回 (2013年10月 4日)

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

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

Martin J. Dürst

AGU

© 2009-13 Martin J. Dürst 青山学院大学

目次

前回のまとめ

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

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

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

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

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

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

(提出不要)

アルゴリズムの表現方法

文書

原理: アルゴリズムを自然言語で説明

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

欠点:

例: 流れ図 (flowchart) など

利点: 視覚的な表現

欠点:

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

 

疑似コードの概要

(pseudocode)

 

疑似コードの評価

利点:

欠点:

 

プログラム言語

利点:

欠点:

Ruby プログラム言語

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

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

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

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

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

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

注: この授業では Ruby を読む必要があるが、Ruby を書く必要がない

最初の Ruby の例

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

実行:

Ruby の記法の基本

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

主な評価基準:

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

 

アルゴリズムの計算量の比較

例: 線形探索と2分探索の比較

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

実行時間の比較: 計測

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

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

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

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

 

漸近的な増加の例

(asymptotic growth)

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

関数の増加の比較

それぞれ二つの関数で、n が増加すると大きい方はどちらか

100n n2
1.1n n20
5 log2 n 10 log4 n
20n n!
100·2n 2.1n

 

まとめ

宿題

(提出不要)

  1. Ruby を使って探索アルゴリズムのステップ数を調べ、テーブルを完成
  2. 関数の増加の比較で、どちらの関数が「最終的に勝つ」か、そしてその理由を調べなさい
  3. 高校の教科書やウェブなどで対数 (ln, log10, log2 など) と極限 (limn→∞など) について調査