コンピュータが問題を解くための手順のことをアルゴリズムと呼ぶ.効率的なアルゴリズムにはよく設計されたデータ構造が必要不可欠である.本講義ではアルゴリズムの基本的な考え方から始め,代表的なアルゴリズムとデータ構造,それらの計算量の評価,そしてC言語によるプログラムの作成について扱う.
アルゴリズムは問題を解決するための具体的な手順であるため,すべての情報処理の礎であり,社会のありとあらゆるところで利用されている.アルゴリズムを学ぶことは,ものの考え方にまで影響を与えるほど重要である.
(1) モジュロ演算,分割統治法、動的計画法などに基づくアルゴリズムを説明できる.また、その計算量を評価できる.
(2) ヒープ,二分探索木などのデータ構造とその実装方法を説明できる.また,各操作の計算量を評価できる.
(3) C言語を用いて上記のアルゴリズムとデータ構造を実装できる.
モジュロ演算,ヒープ,二分探索木,高速フーリエ変換,グラフアルゴリズム,動的計画法
✔ 専門力 | 教養力 | コミュニケーション力 | 展開力(探究力又は設定力) | ✔ 展開力(実践力又は解決力) |
講義は火曜日と金曜日5・6限に行う
演習は火曜日7・8限に演習室で行う
授業計画 | 課題 | |
---|---|---|
第1回 | アルゴリズムと計算量:フィボナッチ数,計算量,オーダ記法,C 言語導入 | アルゴリズムの計算量,オーダ記法を理解する. |
第2回 | [演習1]:C言語導入,フィボナッチ数 | 基本的なC言語が書けるようになる. |
第3回 | モジュロ演算 1:四則演算の計算量,モジュロ演算,モジュロ冪演算(繰り返し二乗法),ユークリッドの互除法,ループ不変式 | モジュロ演算とその計算量,ユークリッドの互除法,ループ不変式を理解する. |
第4回 | モジュロ演算 2・データ構造1:モジュロ割り算,素数性判定(フェルマー検査),素数生成,動的集合への操作 | モジュロ割り算,素数性判定を理解する. |
第5回 | [演習2]:モジュロ演算 | モジュロ演算アルゴリズムをC言語で書けるようになる. |
第6回 | データ構造 2:配列とヒープ,二分探索,連結リスト・スタック・キュー | ヒープ,二分探索,連結リスト等のデータ構造を理解する. |
第7回 | データ構造 3:二分探索木,平衡探索木,ハッシュ法 | 二分探索木,平衡探索木,ハッシュ法について理解する. |
第8回 | [演習3]:二分探索木 | 二分探索木をC言語で書けるようになる. |
第9回 | 分割統治法 1:カラツバ法,マスター定理,マージソート,ソート計算量の下界 | カラツバ法などの分割統治法を理解し,計算量を評価できるようになる. |
第10回 | 分割統治法 2:中央値,行列の掛け算(シュトラッセン法) | 中央値や行列掛け算などの分割統治法を理解する. |
第11回 | [演習4]:二分探索,分割統治法 | 二分探索や分割統治法のアルゴリズムをC言語で実装する. |
第12回 | 高速フーリエ変換 1:多項式の係数表現と値表現,多項式評価と補間,ヴァンデルモンド行列 | 多項式の係数表現・値表現,多項式評価,多項式補間を理解する. |
第13回 | 高速フーリエ変換 2:高速フーリエ変換 (FFT),FFT の応用 | 高速フーリエ変換を理解する. |
第14回 | [演習5]:高速フーリエ変換 | 高速フーリエ変換をC言語で実装する. |
第15回 | グラフアルゴリズム 1:グラフの表現,深さ優先探索,到達可能性,連結成分 | グラフに対する深さ優先探索,到達可能性,連結成分を理解する. |
第16回 | グラフアルゴリズム 2:幅優先探索,最短パス,ダイクストラ法 | グラフに対する幅優先探索,最短パス,ダイクストラ法を理解する. |
第17回 | [演習6]:グラフアルゴリズム | グラフアルゴリズムをC言語で実装する. |
第18回 | 動的計画法1:最短パス,最長増加部分列,編集距離 | 動的計画法を理解する. |
第19回 | 動的計画法2:ナップサック問題,メモ化,連鎖行列積 | 様々な問題に対する動的計画法を理解する. |
第20回 | [演習7]:動的計画法 | 貪欲法・動的計画法をC言語で実装する. |
第21回 | 発展的内容(例:量子アルゴリズム,素集合データ構造) | アルゴリズムとデータ構造に関する発展的内容を理解する. |
学修効果を上げるため,教科書や配布資料等の該当箇所を参照し,「毎授業」授業内容に関する予習と復習(課題含む)をそれぞれ本学の学修規程で定められた時間を目安に行う。
指定なし
アルゴリズムとデータ構造に関する参考書
T. コルメン他 (浅野 哲夫 他訳), 世界標準MIT教科書 アルゴリズムイントロダクション 第3版 総合版,近代科学社 2013
大槻兼資・著 秋葉拓哉・監修, 問題解決力を鍛える!アルゴリズムとデータ構造, 講談社, 2020
講義時間内の小テスト30%,宿題形式のレポート30%,プログラミング演習課題40%
演習室の定員により、この科目は数理・計算科学系の学生だけが履修できる.
関連する科目を履修,または同等の知識があることを条件とする.