コンピュータが問題を解くための手順のことをアルゴリズムと呼ぶ。効率的なアルゴリズムにはよく設計されたデータ構造が必要不可欠である。本講義ではアルゴリズムの基本的な考え方から始め、代表的なアルゴリズムとデータ構造、それらの計算量の評価、そしてC言語によるプログラムの作成について扱う。
アルゴリズムは問題を解決するための具体的な手順であるため、全ての情報処理の礎であり、社会のありとあらゆるところで利用されている。アルゴリズムを学ぶことは、ものの考え方にまで影響を与えるほど重要である。
(1) 二分探索、分割統治法、動的計画法などに基づくアルゴリズムを説明できる。また、その計算量を評価できる。
(2) ヒープ、二分探索木などのデータ構造の能力とその具体的な実装方法を説明できる。また、その各操作の計算量を評価できる。
(3) C言語を用いて上記のアルゴリズムとデータ構造を実装できる。
(4) 未知の問題について、効率的なアルゴリズムを設計できる。
二分探索法、分割統括法、ソート、動的計画法、ヒープ、二分探索木、グラフアルゴリズム
✔ 専門力 | 教養力 | コミュニケーション力 | 展開力(探究力又は設定力) | ✔ 展開力(実践力又は解決力) |
講義は火曜日と金曜日5・6限に行う
演習は火曜日7・8限に演習室で行う
毎週講義に関するレポート課題とC言語を用いてアルゴリズムを実装する演習課題を出す
授業計画 | 課題 | |
---|---|---|
第1回 | アルゴリズム:ユークリッドの互除法、計算量、オーダー記法 | ユークリッドの互除法を説明できるようになる。基本的なアルゴリズムの計算量を評価できるようになる。 |
第2回 | [演習1] C言語入門、ユークリッドの互除法、整数アルゴリズム | 基本的なC言語が書けるようになる。 |
第3回 | 二分探索 | 二分探索によるアルゴリズム設計技法を説明できるようになる。 |
第4回 | 分割統治法1:選択ソート、挿入ソート | ソート問題に対する選択ソート、挿入ソートを説明できるようになる。 |
第5回 | [演習2] 二分探索 | 二分探索のアルゴリズムをC言語で書けるようになる。 |
第6回 | 分割統治法2:マージソート | マージソートを説明できるようになる。 |
第7回 | 動的計画法1:フィボナッチ数、分割数 | フィボナッチ数、分割数を計算する動的計画法のアルゴリズムを説明できるようになる。 |
第8回 | [演習3] クイックソート | クイックソートをC言語で書けるようになる。 |
第9回 | 動的計画法2:ナップザック問題など | ナップザック問題に対する動的計画法のアルゴリズムを説明できるようになる。 |
第10回 | 動的計画法3:編集距離など | 編集距離に対する動的計画法のアルゴリズムを説明できるようになる。 |
第11回 | [演習4]動的計画法 | 動的計画法のアルゴリズムをC言語で書けるようになる。 |
第12回 | データ構造1:リスト、キュー、スタック | 各種基本的なデータ構造の機能と実現方法を説明できるようになる。 |
第13回 | データ構造2:平衡二分探索木 | 平衡二分探索木の機能とその効率を説明できるようになる。 |
第14回 | [演習5]:平衡二分探索木 | C言語の malloc とポインタを用いて平衡二分探索木を実装できるようになる。 |
第15回 | グラフアルゴリズム | グラフに対する幅優先探索、深さ優先探索、ダイクストラ法が説明できるようになる。 |
第16回 | データ構造3:ヒープ | ヒープの機能とその効率を説明できるようになる。 |
第17回 | [演習6]:ヒープ、ヒープソート | C言語でヒープ及びヒープソートが実装できるようになる。 |
第18回 | 分割統治法3:Karatsuba法、Strassen のアルゴリズム | 整数の積、行列積に対する分割統治法のアルゴリズムを説明できるようになる。 |
第19回 | 分割統治法4:多項式積、畳み込み問題、高速フーリエ変換 | 畳み込み問題と離散フーリエ変換の関係を説明できるようになる。高速フーリエ変換を説明できるようになる |
第20回 | [演習7]:高速フーリエ変換、数論変換 | 高速フーリエ変換をC言語で実装できるようになる。 |
第21回 | 乱択アルゴリズム: ユニバーサルハッシュ関数、ハッシュテーブル | ユニバーサルハッシュ関数とハッシュテーブルについて説明できるようになる。 |
学修効果を上げるため,教科書や配布資料等の該当箇所を参照し,「毎授業」授業内容に関する予習と復習(課題含む)をそれぞれ本学の学修規程で定められた時間を目安に行う。
指定なし
アルゴリズムとデータ構造に関する参考書
T. コルメン他 (浅野 哲夫 他訳), "アルゴリズムイントロダクション 第3版 第1巻: 基礎・ソート・データ構造・数学", 近代科学社, 2012, ISBN-13 978-4764904064.
T. コメルン他 (浅野 哲夫 他訳), "アルゴリズムイントロダクション 第3版 第2巻: 高度な設計と解析手法・高度なデータ構造・グラフアルゴリズム", 近代科学社, 2012, ISBN-13 978-4764904064.
大槻兼資・著 秋葉拓哉・監修, "問題解決力を鍛える!アルゴリズムとデータ構造", 講談社, 2020, ISBN-13 978-4065128442.
プログラミング演習とレポートによる
演習室の定員により、この科目は数理・計算科学系の学生だけが履修できる.
関連する科目を履修,または同等の知識があることを条件とする.