データ構造とアルゴリズム
第一回
(2011年9月30日)
アルゴリズムとデータ構造の概要と応用
http://www.sw.it.aoyama.ac.jp/2011/DA/lecture1.html
Martin J. Dürst
duerst@it.aoyama.ac.jp
O 棟 529号室
テュールスト マーティン
ヤコブ
© 2008-11 Martin
J. Dürst 青山学院大学
目次
- 授業の位置付けと進め方
- データ構造の概念と例
- アルゴリズムの概念と例
- 授業の日程
自己紹介
授業の位置づけ
- 第一科目群
- 情報テクノロジー学科: 2年後期、必修
- 経営システム工学科: 2年後期、選択必修
- 機械創造工学科: 3年後期、選択必修
授業の進め方
- 資料の配布とウェブ公開
- 配布資料への書き込みが不可欠
- ミニテストはアナウンスなし
- (時刻通り) 出席しないと大損
- 質問はいつでも大歓迎
- 宿題、復習、予習は授業時間の二倍程度 (文科省)
- 約束事 1: 私語禁止、脱帽、飲食禁止
- 約束事 2: 書き込み、宿題を必ずやること
成績評価方法
おおよその割合:
- 授業中のミニテスト: ~20%
- 演習課題: ~30%
- 期末試験: ~50%
総合的な評価
アルゴリズムとデータ構造の魅力
- 情報テクノロジーで中心的な存在
- 理論と実用の交差点
- 明確な評価基準
- 面白い発想が豊富
- 強い実用性 (例: Google (Page rank algorithm), Netflix prize,
algorithmic trading)
授業の目的
- アルゴリズム、データ構造の考え方
- アルゴリズム、データ構造の設計
- 典型的なアルゴリズムとデータ構造
を身につけること
データ構造の例: 連結リスト
(英語: linked list)
データ構造の概要
(英語: data structure)
- 複数のデータ項目 (data item(s))
- その関係
- 主に計算機内 (メモリ内)
二つの視点:
- 外側 (機能の提供): 抽象データ型 (abstract data type,
ADT)
- 内側 (実装): 配列、構造体、ポインタなどで作成
アルゴリズムの例: 辞典の探索
問題: 辞典や辞書で単語を探す
- 線形探索 (linear search): ページ1から順番通りに探す
- 2分探索 (binary search):
候補のページを半分に分けて探索範囲を徐々に狭める
アルゴリズムの概要
(英語: algorithm)
要件:
- 明確な目的、結果 (問題を解く)
- 正確な仕様や定義 (プログラムか似たもの)
- 有限なステップ数で終了
アルゴリズムの歴史
- 古来のエジプトでの土地面積の計算など
- ユークリッドの最大公約数のアルゴリズム
- 名前の由来: 西暦800年当たりのペルシャの数学者
Muhammad ibn Mūsā al-Khwārizmī
(الخوارزمي)
- 1930 年代に数学的根拠が確立 (Gödel, Turing など)
- 1950年代からコンピュータと共に実用化、数の膨大な増加
データ構造とアルゴリズムの関係
- データ構造は状態 (静的側面; static aspect)、
アルゴリズムは操作 (動的側面; dynamic aspect)
- 一つのアルゴリズムに複数のデータ構造を使うことがある
- 一つのデータ構造上に複数のアルゴリズムを使うことがある
授業の日程
データ構造とアルゴリズムの日程
参考書
宿題 1: 膨大なデータ
提出: 来週の木曜日 (10月6日) 19時00分締切; O 棟
529号室の前の箱に提出; A4 一枚 (両面可) 厳守
(それぞれの問題で、想定の根拠となる理由、アンコウにした文献など必ず明記のこと)
- 東京証券取引所の第一部の取引で、一株式会社の株が営業時間内に平均で
1分に一回売買されている想定のもと、合計で年間に何項目ぐらいのデータが集まるかを、計算しなさい。
- Google (又は明記の上で他のサーチエンジン)
が対応しているウェブページの数と平均のページあたりのリンク数を調べ、おおよその合計のリンク数を計算しなさい。
- 問題 1 や 2
の結果よりも大きくて実際に計算機で扱えそうなデータ項目の量を考え、説明しなさい
(他人と同じものの場合には減点の対象)。
宿題 2: アルゴリズムの表現方法
別紙「アルゴリズムの表現方法」のアルゴリズムの表現方法をよく見て、それぞれの方法の利点と欠点を考えなさい。
(提出不要)
宿題 3: Ruby のインストール
自分のノートパソコン (又は自宅のパソコン) に Ruby
をインストール
インストール方法は主に二つ:
確認方法: mintty、PuTTY 又は Start Command Prompt with Ruby にて
ruby -v
を実行
インストールできない場合、次回授業の前日までに要相談
次回への準備
- 宿題 1 の提出
- 宿題 2 (提出不要)
- 今日の内容の復習
- ノートパソコンを持参 (Ruby インストール済み)