コンピュータが問題を解くための手順のことをアルゴリズムと呼ぶ。効率的なアルゴリズムにはよく設計されたデータ構造が必要不可欠である。本講義ではアルゴリズムの基本的な考え方から始め、代表的なアルゴリズムとデータ構造、それらの計算量の評価、そしてC言語によるプログラムの作成について扱う。
アルゴリズムは問題を解決するための具体的な手順であるため、全ての情報処理の礎であり、社会のありとあらゆるところで利用されている。アルゴリズムを学ぶことは、ものの考え方にまで影響を与えるほど重要である。
(1) 二分探索、分割統治法、動的計画法などに基づくアルゴリズムを説明できる。また、その計算量を評価できる。
(2) ヒープ、二分探索木などのデータ構造の能力とその具体的な実装方法を説明できる。また、その各操作の計算量を評価できる。
(3) C言語を用いて上記のアルゴリズムとデータ構造を実装できる。
(4) 未知の問題について、効率的なアルゴリズムを設計できる。
二分探索法、分割統括法、動的計画法、ヒープ、二分探索木、ソート、グラフアルゴリズム
✔ 専門力 | 教養力 | コミュニケーション力 | 展開力(探究力又は設定力) | ✔ 展開力(実践力又は解決力) |
講義とそれに関連するC言語の演習(7回程度)からなる。
授業計画 | 課題 | |
---|---|---|
第1回 | アルゴリズムと漸化式: ユークリッドの互除法、二分探索 | ユークリッドの互除法、二分探索によるアルゴリズムを説明できるようになる。 |
第2回 | C言語入門(演習): ユークリッドの互除法、二分探索 | 基本的なC言語が書けるようになり、ユークリッドの互除法、二分探索が書けるようになる。 |
第3回 | 計算量のオーダー: ユークリッドの互除法、二分探索 | ユークリッドの互除法と二分探索の計算量を評価できるようになる。オーダー記法を正しく使えるようになる。 |
第4回 | 分割統治法: 選択ソート、挿入ソート、マージソート、計算量の評価 | ソート問題に対する選択ソート、挿入ソート、マージソートを説明できるようになる。それらの計算量を評価できるようになる。 |
第5回 | 分割統治法(演習): クイックセレクト、クイックソート | クイックセレクト、クイックソートがC言語で書けるようになる。 |
第6回 | 分割統治法: 集合被覆問題、高速ゼータ変換 | 高速ゼータ変換などの高度な分割統治法を説明できるようになる。高速ゼータ変換を用いて集合被覆問題を効率的に解くアルゴリズムを説明できる。 |
第7回 | 動的計画法: フィボナッチ数、分割数 | 分割数を計算する動的計画法のアルゴリズムを説明できるようになる。 |
第8回 | 動的計画法(演習): メモ化再帰、ボトムアップ法、計算量の評価 | 分割数に対するメモ化再帰及びボトムアップ法による動的計画法のC言語プログラムが書けるようになる。 |
第9回 | 動的計画法: ナップザック問題、単調増加部分列問題 | ナップザック問題、単調増加部分列問題に対する動的計画法のアルゴリズムを説明できるようになる。 |
第10回 | 動的計画法(演習): ナップザック問題など | ナップザック問題などの動的計画法のアルゴリズムをC言語で書けるようになる。 |
第11回 | 動的計画法(演習): ナップザック問題など (続き) | ナップザック問題などの動的計画法のアルゴリズムをC言語で書けるようになる。 |
第12回 | データ構造:ヒープ、ヒープソート | ヒープの機能とその効率を説明できるようになる。 |
第13回 | データ構造(演習): ヒープ、ヒープソート | C言語でヒープ及びヒープソートが実装できるようになる。 |
第14回 | データ構造: 平衡二分探索木 | 平衡二分探索木の機能とその効率を説明できるようになる。 |
第15回 | データ構造(演習): C言語の malloc とポインタ、平衡二分探索木 | C言語の malloc とポインタを用いて平衡二分探索木を実装できるようになる。 |
第16回 | データ構造(演習): C言語の malloc とポインタ、平衡二分探索木 (続き) | C言語の malloc とポインタを用いて平衡二分探索木を実装できるようになる。 |
第17回 | グラフアルゴリズム: 幅優先探索、深さ優先探索、ダイクストラ法 | グラフに対する幅優先探索、深さ優先探索、ダイクストラ法が説明できるようになる。 |
第18回 | 高度なアルゴリズム: 畳み込み問題、離散フーリエ変換、高速フーリエ変換 | 畳み込み問題と離散フーリエ変換の関係を説明できるようになる。高速フーリエ変換を説明できるようになる。 |
第19回 | 高度なアルゴリズム(演習): 高速フーリエ変換 | 高速フーリエ変換をC言語で実装できるようになる。 |
第20回 | 乱択アルゴリズム: Miller-Rabin 素数判定法など | Miller-Rabin 素数判定法などの乱択アルゴリズムを説明できるようになる。 |
第21回 | 量子アルゴリズム: Groverのアルゴリズム、Shorのアルゴリズム | 量子力学の仕組みを説明できるようになる。Grover のアルゴリズム、Shor のアルゴリズムの概要を説明できるようになる。 |
講義資料は用意された講義ページにアップロードする。
アルゴリズムとデータ構造に関する参考書
T. コメルン他 (浅野 哲夫 他訳), 『アルゴリズムイントロダクション 第3版 第1巻: 基礎・ソート・データ構造・数学』, 近代科学社, 2012, ISBN-13 978-4764904064.
T. コメルン他 (浅野 哲夫 他訳), 『アルゴリズムイントロダクション 第3版 第2巻: 高度な設計と解析手法・高度なデータ構造・グラフアルゴリズム』, 近代科学社, 2012, ISBN-13 978-4764904064.
プログラミング演習 (全7回程で 60%)
期末試験 (40%)
履修条件は特に設けないが、関連する科目を履修していることが望ましい。
森立平 mori[at]c.titech.ac.jp
渡辺治 watanabe[at]c.titech.ac.jp
メールで事前予約すること。