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

第二回 (2010年10月1日)

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

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

Martin J. Dürst

AGU

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

目次

前回のまとめ

宿題 1: 膨大なデータ

提出: 来週の木曜日 (9月30日) 19時00分締切、O 棟 529号室の前に提出

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

アルゴリズムの表現方法

問題: アルゴリズムをどうやって表現するか

文書

利点:

欠点:

例: 流れ図など

利点:

欠点:

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

疑似コード

(pseudocode)

利点:

欠点:

プログラム言語

利点:

欠点:

Ruby プログラム言語

Ruby のインストールの確認

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

最初の Ruby の例

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

実行: コマンドプロンプトで ruby 2search.rb

Ruby の記法の基本

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

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

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

実行時間の比較: 計測

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

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

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

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

漸近的な増加の例

(asymptotic growth)

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

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

 

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

 

漸近的な増加の考え方

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

漸近記号: O の定義

("big Oh" notation)

まとめ