シラバス
入学のご案内履修登録

科目の概要

コンピューターサイエンスにおいて重要な知識であるアルゴリズムとデータ構造の基礎を取り上げることで、基本的なアルゴリズムおよびアルゴリズムを考える際に重要なプログラムの効率や計算複雑性といった知識を理解する。プログラミング言語Pythonを活用して実際にプログラムを実行したり書き換えたりすることで、自らプログラムを書く能力を養う。

科目情報

履修想定年次
2年次
単位数
2単位
開講Q
1Q、3Q
科目区分
選択
授業の方法
オンデマンド科目
評価方法
確認レポート 50% , 単位認定試験 50%
科目コード
INF-2-C1-1030-006
到達目標
基本的なアルゴリズムやデータ構造について、それがどのような場面で用いられるか説明できるようになり、基本的なアルゴリズムについて、その動作を説明できるようになる。また、プログラムの効率や計算複雑性といった知識について理解する。プログラミング言語Pythonを活用して実際にプログラムを実行したり書き換えたりすることで、既存のアルゴリズムを利用してプログラムが書けるようになる。
教科書・参考書
  • JohnV.Guttag著、久保幹雄監訳『世界標準MIT教科書Python言語によるプログラミングイントロダクション第3版』近代科学社、2023年大槻兼資『アルゴリズム的思考力が身につく!プログラミングコンテストAtCoder入門』KADOKAWA、2022年
授業時間外の学修
各回の授業内容は繰り返し見返し、各回二時間ほど復習を行ってください。また、次回の学修内容についてもあらかじめ不明な単語や前提となる知識をWebで調べるなどして各回三時間ほど予習を行ってください。
特記事項
順次公開予定

授業計画

1
プログラミング言語Pythonの概要

プログラミング言語Pythonについての基本的な知識について学ぶとともに、プログラムを実行する環境であるGoogle Colaboratoryの使い方を学ぶ。

2
簡単な算術プログラム

簡単な算術プログラムとして、総当たりによって解を求める方法や、近似解、二分法、ニュートン法について学ぶ。

3
再帰と広域変数

フィボナッチ数と回文を例として、関数の再帰的定義・呼び出しと広域変数について学ぶ。

4
計算複雑性入門

プログラムの実行効率について考えるために必要な、計算複雑性について学ぶ。

5
いくつかの単純なアルゴリズムとデータ構造

データを処理するための基本的なアルゴリズムとして探索アルゴリズムとソーティングアルゴリズムについて学び、これらの処理を効率的に行うためのデータ構造としてハッシュ表について学ぶ。

6
プロットとクラス

データを視覚的に理解するための方法として、データをグラフとしてプロットする方法について学ぶ。

7
ナップサック問題とグラフ最適化問題

AI等で必要不可欠な手法である最適化のアルゴリズムについて、ナップサック問題とグラフ最適化問題を通じて学ぶ。

8
動的計画法

最適化などを効率的に行う手法として動的計画法について学ぶ。

9
ランダムウォークと可視化

現実の世界で起こる様々なランダムな事象を扱うための基礎として、乱数を扱うプログラムを、ランダムウォークを例として学ぶ。

10
確率、統計とプログラム

確率や統計を扱うために、乱数を用いたシミュレーション手法について学ぶとともに、確率や統計の基本についても学ぶ。

11
モンテカルロ・シミュレーション

ランダムネスを用いるより進んだ、そして重要な手法としてモンテカルロ・シミュレーションについて、ギャンブルと円周率の計算を通じて学ぶ。

12
競技プログラミング入門

競技プログラミングの代表的なサービスの1つであるAtCoderの概要について学ぶとともに、競技プログラミングを行うために必要な基本的な事項についても学ぶ。

13
競技プログラミング実践 1

競技プログラミングに慣れていくために、文字列操作や入力の扱いなど、基本的なプログラムについて学ぶとともに、その計算量についても学ぶ。

14
競技プログラミング実践 2

より実践的な手法として、全探索、バケットなどのプログラミング手法について学ぶ。

15
競技プログラミング実践 3

さらに発展的な手法として、探索問題や動的計画法などの最適化問題について学ぶ。

関連科目