コンピュータ・ソフトウェアを設計する際の核となるのがアルゴリズムである.そしてそのアルゴリズムをプログラムとして実現する再に重要となるのがデータ構造である.本講義では,アルゴリズムとデータ構造の基本を学ぶ.具体的な例を用いて,アルゴリズム設計の基本的な枠組み,すなわち,二分探索法,分割統括法,動的計画法,乱択法,などを学ぶ.本講義では,C言語の導入も行い,演習では講義で学んだアルゴリズムをもとにCプログラムの作成を行う.基本的データ構造については,その考え方と具体的にCプログラムの中で使用する方法について講義する.さらに,発展的な話題として,代表的なグラフや文字列のアルゴリズムの解説も行う.
本講義を履修することにより次の能力を修得する.
1) コンピュータによる処理を行うための標準的なアルゴリズムを設計することができる.
2) そうした標準的なアルゴリズムを適切なデータ構造を用いて C プログラムとして実現することができる.
3) アルゴリズムの効率について説明でき,アルゴリズムの効率を定量的に評価できる.
二分探索法,分割統括法,動的計画法,乱択法,線形リスト,ヒープ,二分探索木,グラフアルゴリズム,文字列処理アルゴリズム
✔ 専門力 | 教養力 | コミュニケーション力 | 展開力(探究力又は設定力) | ✔ 展開力(実践力又は解決力) |
講義,ほぼ 2 回ごとに,講義の後半を用いてそれまでに学んだことを演習問題で復習します.一方,演習ではC言語によるプログラミング実習を行い,課題レポートのためのプログラムを作成します.
授業計画 | 課題 | |
---|---|---|
第1回 | アルゴリズムの導入:コンピュータハードウェアやソフトウェアとアルゴリズムの関係 | |
第2回 | アルゴリズムの記述法と計算量 | アルゴリズムを擬似コードで書き,その効率(計算量)を解析する. |
第3回 | C言語入門 | 基本的な制御文や配列の使い方理解する. |
第4回 | プログラミング演習:C言語入門 | 簡単なプログラムをC言語で作成する |
第5回 | 再帰によるアルゴリズム設計:二分探索の再帰的な設計,分割統治法の導入 | 再帰の考え方の理解 |
第6回 | 分割統治法によるアルゴリズム設計 | 簡単な計算問題に対する再帰的なアルゴリズムを作成する |
第7回 | プログラミング演習:分割統治法 | 分割統治法に基づくプログラムの作成 |
第8回 | 動的計画法によるアルゴリズム設計 (1): メモ化法 | |
第9回 | 動的計画法によるアルゴリズム設計 (2):解探索法 | 標準的な問題に対して,再帰,メモ化,解探索手順によりアルゴリズムを作成する. |
第10回 | プログラミング演習:動的計画法 | 動的計画法(再帰,メモ化,解探索)を用いたプログラムの作成 |
第11回 | 乱択法によるアルゴリズムの設計 | 乱択アルゴリズムの解析 |
第12回 | データ構造:ヒープ | ヒープとその効率についての理解 |
第13回 | C言語:レコード型,ポインタ型 | レコード型,ポインタ型を理解する |
第14回 | プログラミング演習:レコード型,ポインタ型 | レコード型,ポインタ型を用いたプログラムの作成 |
第15回 | プログラミング演習:ポインタ型の高度な利用 | メモリ割り当てコマンドを用いたプログラムの作成 |
第16回 | ポインタ型を用いたデータ構造:線形リスト,二分探索木 | 線形リスト,二分探索木を用いたプログラムの作成法 |
第17回 | プログラミング演習:リスト構造 | 線形リスト,二分探索木を用いたプログラムの作成 |
第18回 | ハッシュ | ハッシュの解析 |
第19回 | 著名なアルゴリズム (1):最短経路探索アルゴリズム | 最短経路アルゴリズムの理解 |
第20回 | 著名なアルゴリズム (2):文字列照合アルゴリズム | 文字列照合アルゴリズムの理解 |
第21回 | 実践アルゴリズム:計測系や制御系のためのアルゴリズム | 計測系や制御系のためのアルゴリズムの理解 |
第22回 | プログラミング演習:実践的アルゴリズムのプログラム化 | 第 13 回~ 15 回のアルゴリズムのプログラム化 |
講義資料,演習資料は授業中に配布し,授業後 OCW-i にアップする.
T. Cormen, C. Leiserson, and R. Rivest(浅野 哲夫 他訳),アルゴリズム・イントロダクション(第1巻),3版,近代科学社,2012, ISBN 978-4-7649-0406-4.
授業中の演習小テスト(6回程度) (10%)
プログラミング小課題(5回)(30%)
宿題形式で出題するアルゴリズム設計課題のレポート (30%)
期末試験 (30%)
履修条件は特に設けないが,関連する科目を履修していることが望ましい.
渡辺治 watanabe[at]is.titech.ac.jp
森立平 mori[at]is.titech.ac.jp
メールで事前予約してほしい.