2024年度 学院等開講科目 情報理工学院 数理・計算科学系
アルゴリズムとデータ構造
- 開講元
- 数理・計算科学系
- 担当教員
- 安永 憲司 / 吉田 雄祐
- 授業形態
- 講義/演習 (対面型)
- メディア利用科目
- -
- 曜日・時限
(講義室) - 火5-8 (W8E-101) / 金5-6 (W8E-101)
- クラス
- -
- 科目コード
- MCS.T213
- 単位数
- 210
- 開講時期
- 2024年度
- 開講クォーター
- 2Q
- シラバス更新日
- 2025年3月17日
- 使用言語
- 日本語
シラバス
授業の目的(ねらい)、概要
コンピュータが問題を解くための手順のことをアルゴリズムと呼ぶ.効率的なアルゴリズムにはよく設計されたデータ構造が必要不可欠である.本講義ではアルゴリズムの基本的な考え方から始め,代表的なアルゴリズムとデータ構造,それらの計算量の評価,そして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%
関連する科目
- LAS.I121 : コンピュータサイエンス第一
- LAS.I122 : コンピュータサイエンス第二
- MCS.T204 : 計算機科学概論
履修の条件・注意事項
演習室の定員により、この科目は数理・計算科学系の学生だけが履修できる.
関連する科目を履修,または同等の知識があることを条件とする.