概要:
本授業では,ソフトウェア開発において重要なアルゴリズムとデータ構造について学ぶ.理論の習得だけではなく,実際にアルゴリズムをプログラミング言語を用いて実装し,ソフトウェアの開発力を養う.また,情報系資格試験に則した問題の演習を行うことにより,より深い理解と応用力を身につける.
(科目情報)
教育プログラム 第1学年 ◎科目
授業の進め方・方法:
アルゴリズムを説明した後に、関連した問題を考えたり、実際にプログラミングを行って理解を深める.
(事前学習)
CおよびC++を復習しておくことが望ましい.
注意点:
(履修上の注意)本科目は学修単位であり,2単位の修得には授業時間外の学修等とあわせて90単位時間の学修が必要な科目である.本科目では授業時間外の学修として課題を課す.
重要な項目を学習した後に,内容の理解を問う質問をするので,授業を良く聞いて理解に努めること.
(自学上の注意)特になし
|
|
週 |
授業内容 |
週ごとの到達目標 |
後期 |
3rdQ |
1週 |
アルゴリズムの基礎(アルゴリズムの評価基準/計算量の漸近的評価) アルゴリズムの基本データ構造 |
ソフトウェアにおける,アルゴリズムの 重要性を理解する.アルゴリズムの評価方法,および各種データ構造の利点と欠点を理解する.基本的なデータ構造について理解する
|
2週 |
アルゴリズムにおける基本概念(木構造)
|
木構造を理解し,プログラム作成において,最適のデータ構造を選択できるようになる
|
3週 |
アルゴリズムにおける基本概念(再帰) |
再帰を理解し,プログラム作成において,最適のデータ構造を選択できるようになる
|
4週 |
データの探索 |
探索アルゴリズムについて理解する
|
5週 |
ソートアルゴリズム(挿入ソート) |
挿入ソートアルゴリズムを通して,アルゴリズムの考え方,コーディング法を習得する
|
6週 |
ソートアルゴリズム(ヒープソート) |
ヒープソートアルゴリズムを通して,アルゴリズムの考え方,コーディング法を習得する
|
7週 |
ソートアルゴリズム(クイックソート) |
クイックソートアルゴリズムを通して,アルゴリズムの考え方,コーディング法を習得する
|
8週 |
前半まとめ |
|
4thQ |
9週 |
中間試験 |
|
10週 |
試験解説 設計手法 1(分割統治法) 設計手法 2(グリーディ法) 設計手法 3(動的計画法) |
アルゴリズムの設計手法(分割統治法,グリーティ法,動的計画法)について理解する
|
11週 |
設計手法4(バックトラック) 設計手法5(分枝限定) |
アルゴリズムの設計手法(バックトラック法,分枝限定法)について理解する
|
12週 |
グラフアルゴリズム |
計算機上でのグラフ表現を習得し,グラフアルゴリズムの基本を理解する
|
13週 |
文字列照合アルゴリズム |
文章中から,任意の文字列を探索する文字列探索アルゴリズムを理解する
|
14週 |
アルゴリズムの限界(問題のクラス) 後半まとめ |
ある種の問題の本質的な計算困難さについて理解する
|
15週 |
期末試験 |
|
16週 |
期末試験の解答と解説 |
|
分類 | 分野 | 学習内容 | 学習内容の到達目標 | 到達レベル | 授業週 |
基礎的能力 | 工学基礎 | 情報リテラシー | 情報リテラシー | 同一の問題に対し、それを解決できる複数のアルゴリズムが存在しうることを知っている。 | 4 | |
与えられた基本的な問題を解くための適切なアルゴリズムを構築することができる。 | 4 | |
任意のプログラミング言語を用いて、構築したアルゴリズムを実装できる。 | 4 | |
専門的能力 | 分野別の専門工学 | 情報系分野 | プログラミング | 主要な言語処理プロセッサの種類と特徴を説明できる。 | 4 | |
主要な計算モデルを説明できる。 | 4 | |
ソフトウェア | アルゴリズムの概念を説明できる。 | 4 | |
与えられたアルゴリズムが問題を解決していく過程を説明できる。 | 4 | |
同一の問題に対し、それを解決できる複数のアルゴリズムが存在しうることを説明できる。 | 4 | |
整列、探索など、基本的なアルゴリズムについて説明できる。 | 4 | |
時間計算量によってアルゴリズムを比較・評価できることを説明できる。 | 4 | |
領域計算量などによってアルゴリズムを比較・評価できることを説明できる。 | 4 | |
コンピュータ内部でデータを表現する方法(データ構造)にはバリエーションがあることを説明できる。 | 4 | |
同一の問題に対し、選択したデータ構造によってアルゴリズムが変化しうることを説明できる。 | 4 | |
リスト構造、スタック、キュー、木構造などの基本的なデータ構造の概念と操作を説明できる。 | 4 | |
リスト構造、スタック、キュー、木構造などの基本的なデータ構造を実装することができる。 | 4 | |
ソースプログラムを解析することにより、計算量等のさまざまな観点から評価できる。 | 4 | |
同じ問題を解決する複数のプログラムを計算量等の観点から比較できる。 | 4 | |