データ構造とアルゴリズム
第一回
(2012年9月21日)
アルゴリズムとデータ構造の概要と応用
http://www.sw.it.aoyama.ac.jp/2012/DA/lecture1.html
Martin J. Dürst
(テュールスト マーティン ヤコブ)
duerst@it.aoyama.ac.jp
O 棟 529号室
© 2008-12 Martin
J. Dürst 青山学院大学
目次
- 授業の位置付けと進め方
- データ構造の概念と例
- アルゴリズムの概念と例
- 授業の日程
自己紹介
授業の位置づけ
- 第一科目群
- 情報テクノロジー学科: 2年後期、必修
- 経営システム工学科: 2年後期、選択必修
- 機械創造工学科: 3年後期、選択必修
授業の進め方
- 資料の配布とウェブ公開
- 配布資料への書き込みが不可欠
- ミニテストはアナウンスなし
- 出席は前提 (文科省); 遅延や未出席は大損
- 宿題、復習、予習は授業時間の二倍程度 (文科省)
- 質問はいつでも大歓迎
- 約束事 1: 私語禁止、脱帽、飲食禁止
- 約束事 2: 書き込み、宿題を必ずやること
成績評価方法
おおよその割合:
- 授業中のミニテスト: ~20%
- 演習課題: ~30%
- 期末試験: ~50%
総合的な評価
アルゴリズムとデータ構造の魅力
- 情報テクノロジーで中心的な存在
- 理論と実用の交差点
- 明確な評価基準
- 面白い発想が豊富
- 強い実用性 (例: Google (Page rank algorithm), Netflix prize,
algorithmic trading)
- 米国の有名企業の就職に有利 (Get
that job at Google, Steve Yegge, 2008)
授業の目的
- アルゴリズム、データ構造の考え方
- アルゴリズム、データ構造の設計
- 典型的なアルゴリズムとデータ構造
を身につけること
データ構造の例: 連結リスト
(英語: 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: 膨大なデータ
提出: 来週の木曜日 (9月27日) 19時00分締切; O 棟
529号室の前の箱に提出; A4 一枚 (両面可) 厳守
(それぞれの問題で、想定の根拠となる理由、参考にした文献など必ず明記のこと。Wikipedia
への参照の場合、URI のではなく IRI を使用のこと (例: http://ja.wikipedia.org/wiki/%E6%83%85%E5%A0%B1
のではなく http://ja.wikipedia.org/wiki/情報))
- 東京証券取引所の第一部の取引で、一株式会社の株が営業時間内に平均で
1分に一回売買されていると想定して、合計で年間に
(一売買行為を一つの項目と考えるとき)
何項目ぐらいのデータが集まるかを、計算しなさい。
- Google (又は明記の上で他のサーチエンジン)
が対応しているウェブページの数と平均のページごとのリンク数を調べ、ウェブ全体のおおよその合計のリンク数を計算しなさい。
- 問題 1 や 2
の結果よりも大きくて実際に計算機で扱えそうなデータ項目の量を考え、説明しなさい
(他人と同じものの場合には減点の対象)。
宿題 2: アルゴリズムの表現方法
別紙「アルゴリズムの表現方法」のアルゴリズムの表現方法をよく見て、それぞれの方法の利点と欠点を考えなさい。
(提出不要)
宿題 3: Ruby のインストール
自分のノートパソコン (又は自宅のパソコン) に Ruby
をインストール
インストール方法は主に二つ:
確認方法: Start Command Prompt with Ruby 又は Cygwin Bash Shell/Cygwin
Terminal にて ruby -v
を実行
インストールできない場合、次回授業の前日までに要相談
次回への準備
- 宿題 1 の提出
- 宿題 2 (提出不要)
- 今日の内容の復習
- ノートパソコンを持参 (Ruby インストール済み)