本講義では,アルゴリズムとデータ構造の基本を学ぶ.前半では基本的なデータ構造とそのデータ構造を操作するアルゴリズム,後半ではより高度なアルゴリズムについて学ぶ.
本講義を履修することにより以下を修得する.
(1) 計算機科学の基礎となるデータ構造とアルゴリズムに関する知識
(2) 上のデータ構造とアルゴリズムのCによる実装
(3) 各アルゴリズムの効率に関する知識
リスト,スタック,木,2分木,グラフ,ソート,分割統治法,動的計画法,文字列照合
✔ 専門力 | 教養力 | コミュニケーション力 | 展開力(探究力又は設定力) | ✔ 展開力(実践力又は解決力) |
2回の講義の後,1回の演習を行う.演習では講義で学んだアルゴリズムとデータ構造をCプログラムとして実装する.
授業計画 | 課題 | |
---|---|---|
第1回 | イントロダクション | アルゴリズムとはなにかを学ぶ |
第2回 | 抽象データ型,計算効率 | 抽象データ型、計算効率について学ぶ |
第3回 | プログラミング演習 | Cプログラミングの基礎を学ぶ |
第4回 | 基本的なデータ構造:リスト,スタック,待ち行列 | リスト、スタック、待ち行列について学ぶ |
第5回 | 基本的なデータ構造:グラフ,木と2分木 | グラフ、木、2分木を理解する |
第6回 | プログラミング演習 | 基本的データ構造のプログラミングを学ぶ |
第7回 | 基本的なデータ構造:辞書とハッシュ | 辞書とハッシュについて学ぶ |
第8回 | 順序付き集合の処理:ヒープ,2分探索木,平衡探索木 | 順序付き集合について学ぶ |
第9回 | プログラミング演習 | 集合についてのプログラミングを学ぶ |
第10回 | 整列のアルゴリズム:バブルソート,基数ソート等 | 基本的整列アルゴリズムを学ぶ |
第11回 | 整列のアルゴリズム:ヒーブソート,クイックソート | より高速な整列アルゴリズムを学ぶ |
第12回 | プログラミング演習 | 整列アルゴリズムのプログラミングを学ぶ |
第13回 | 分割統治法 | 分割統治法について学ぶ |
第14回 | 動的計画法 | 動的計画法について学ぶ |
第15回 | プログラミング演習 | 講義中に指定する |
第16回 | 最適化問題:資源配分問題,ナップサック問題 | 最適化問題について学ぶ |
第17回 | グラフの問題:最小木,最短経路 | 最小木、最短経路について学ぶ |
第18回 | プログラミング演習 | 講義中に指定する |
第19回 | 文字列の照合 | 文字列照合のアルゴリズムについて知る |
第20回 | 計算幾何学 | 計算幾何学について知る |
第21回 | プログラミング演習 | 講義中に指定する |
第22回 | 高度な問題に対するアルゴリズム | 高度な問題に対するアルゴリズムを学ぶ |
資料を講義中に配布
茨木俊秀:「Cによるアルゴリズムとデータ構造」,オーム社,ISBN 978-4-274-21604-6
コルメン,リベスト,シュタイン,ライザーソン:「アルゴリズムイントロダクション」第3版,近代科学社,ISBN 978-4764904088
小テスト (30%)
プログラミング課題 or レポート (40%)
期末試験 (30%)
履修条件は特に設けないが,関連する科目を履修していることが望ましい.