アルゴリズムとデータ構造

科目基礎情報

学校 徳山工業高等専門学校 開講年度 令和03年度 (2021年度)
授業科目 アルゴリズムとデータ構造
科目番号 0056 科目区分 専門 / 必修
授業形態 講義 単位の種別と単位数 履修単位: 2
開設学科 情報電子工学科 対象学年 3
開設期 通年 週時間数 2
教科書/教材 教科書:新・明解 Javaで学ぶアルゴリズムとデータ構造 (柴田望洋) ソフトバンク(必要に応じて参考資料を配布する)
担当教員 浦上 美佐子

到達目標

1.探索,ソーティング,再帰,線形リストといった基本的なアルゴリズムとデータ構造の理解し,説明することができる.
2.様々な応用課題について、学習したアルゴリズムとデータ構造の知識を用いて,Java 言語プログラミングによる実現手法を理解し,与えられた期日までに完成させることができる.
3.時間計算量等によってアルゴリズムを比較・評価できることを理解し、説明することができる.

ルーブリック

理想的な到達レベルの目安標準的な到達レベルの目安未到達レベルの目安
基本的なアルゴリズムとデータ構造の理解探索,ソーティング,再帰,線形リストといった基本的なアルゴリズムとデータ構造を深く理解し、説明することができる.探索,ソーティング,再帰,線形リストといった基本的なアルゴリズムとデータ構造を理解し、説明することができる.探索,ソーティング,再帰,線形リストといった基本的なアルゴリズムとデータ構造を理解できない.
プログラミング実装様々な応用課題について,Javaプログラミングによる実現手法を深く理解し,開発を実践することができる.様々な応用課題について,Javaプログラミングによる実現ができ,与えられた解答例をもとに考察することができる.様々な応用課題について,Javaプログラミングによる実現ができない.
アルゴリズムの比較および評価時間計算量などによってアルゴリズムを比較・評価できることを理解し、説明することができる.時間計算量などによってアルゴリズムを比較・評価できることを理解し、簡単に説明することができる.時間計算量などによってアルゴリズムを比較・評価できることを理解できない.

学科の到達目標項目との関係

到達目標 C 1 説明 閉じる

教育方法等

概要:
基本的なプログラムを書くために必要とされる代表・基礎的なアルゴリズムとデータ構造を学習することで,与えられた課題を効率よく解決する能力を身につける.併せて,より理解を深めるため,与えられた課題をJava言語プログラミングによる実現方法を理解し,開発を実践することができる.
授業の進め方・方法:
各回の授業では,前半に,前回講義の小テスト形式による理解度確認、講義による説明を行う.理解度を確認するために,項目毎に学習シートで課題を与え,座学での演習,そしてJAVA言語によるプログラム開発の実践力,結果からの考察を行うプログラミング実習・演習も行う.演習を通じて,学習した内容を確かめることにより,より確実な知識とする.講義時間内に,項目毎のプログラミング演習が完成しなかった分が,提出期限までの宿題になる.また,レポート形式でプログラム・結果・考察を提出することにより習熟度をチェックする.
定期試験は主に学習シートの例題,演習課題,小テスト形式の理解度確認問題から出題する.
事前事後学習として,授業中に配布した学習シートによる演習およびプログラム作成演習を計約30時間行う.
この科目は卒業までに必修得である.
注意点:
本科:プログラミング言語(2 年)
最終成績評価式:(前期中間試験+前期末試験+後期中間試験+後期末試験)÷4(80%評価)+課題レポート(20%評価)

授業の属性・履修上の区分

アクティブラーニング
ICT 利用
遠隔授業対応
実務経験のある教員による授業

授業計画

授業内容 週ごとの到達目標
前期
1stQ
1週 オリエンテーション,データ構造とアルゴリズムの基本
【事前事後学習の内容(1時間)】学習シート
オリエンテーションの後,アルゴリズムとプログラムの違い,各種データ構造,アルゴリズムの基本
2週 線形探索(1)
【事前事後学習の内容(1時間)】学習シート
探索アルゴリズムおよび表中のデータを探索するアルゴリズムで最も単純かつ基本である線形探索について説明できる.加えて,線形探索における“番兵”およびデータの挿入・削除について説明できる.
3週 二分探索
【事前事後学習の内容(1時間)】学習シート
あらかじめソートされているデータに対して,効率よく探索するための手法である2分探索法について説明できる.
4週 演習
【事前事後学習の内容(1時間)】学習シート
レポート課題として,線形探索および2分探索についてのプログラミング演習を行う.
5週 ハッシュ法(1)
【事前事後学習の内容(1時間)】学習シート
データを効率よく探索するための代表的かつ最もよく用いられている手法であるハッシュ法についてプログラムを記述できる.
6週 ハッシュ法(2),アルゴリズムの計算量
【事前事後学習の内容(1時間)】学習シート
前回に引き続き,ハッシュ法について学び,さらに,アルゴリズムの計算量の説明の後,これまでに学んだ探索アルゴリズムの時間計算量について考察することができる.
7週 中間試験 第1~6回に関しての理解を確認する.
8週 答案返却,演習
【事前事後学習の内容(2時間)】学習シート
レポート課題として,ハッシュ法により動作するプログラムを設計・実装し、考察することができる.
2ndQ
9週 再帰アルゴリズムの考え方
【事前事後学習の内容(1時間)】学習シート
例を通じて,再帰アルゴリズムについて理解し、説明できる.
10週 試験問題解説,再帰アルゴリズムの基本
【事前事後学習の内容(1時間)】学習シート
再帰アルゴリズムの基本について説明できる.
11週 再帰アルゴリズムの解析(1)
【事前事後学習の内容(1時間)】学習シート
再帰アルゴリズムの解析(トップダウン法およびボトムアップ法)について説明できる.
12週 再帰アルゴリズムの解析(2),バックトラッキング(1)
【事前事後学習の内容(1時間)】学習シート
前回に続き,再帰アルゴリズムの解析を学んだ後,しらみつぶしを組織的かつ効率よく行う手法としてのバックトラック法について理解できる.
13週 バックトラッキング(2)
【事前事後学習の内容(1時間)】学習シート
前回に続き,バックトラック法について理解し、説明できる.
14週 演習
【事前事後学習の内容(2時間)】学習シート
レポート課題として,これまでに学んだ再帰アルゴリズムに関するプログラムを設計・実装し、考察することができる.
15週 期末試験 第8,10~14回についての理解を確認する.
16週 試験問題解説 試験の解答と解説を行う.
後期
3rdQ
1週 ソーティングの概念及び単純なソート法
【事前事後学習の内容(1時間)】学習シート
ソーティングの基本及び単純なソート法の1つである単純選択法について説明できる.
2週 単純なソート法及びクイックソート
【事前事後学習の内容(1時間)】学習シート
単純なソート法の続きとして,バブルソートについて学んだ後,代表的な再帰アルゴリズムの例ともいえるクイックソートについて理解し、説明できる.
3週 クイックソート
【事前事後学習の内容(1時間)】学習シート
前回に続きクイックソートについて学ぶ.
4週 演習
【事前事後学習の内容(1時間)】学習シート
レポート課題として,単純ソートおよびクイックソートアルゴリズムに関するプログラミング演習を行う.
5週 ヒープソート
【事前事後学習の内容(1時間)】学習シート
3年次の情報数学の中のグラフにおいて学んだ木構造の概念を用いたヒープソートについて理解し、説明できる.
6週 ヒープソート及びソートアルゴリズムの時間計算量
【事前事後学習の内容(1時間)】学習シート
ヒープソートの続きとこれまでに学んだソートアルゴリズムの時間計算量によって比較・評価できることを説明できる.
7週 中間試験 後期第1回~6回についての理解を確認する.
8週 試験問題解説,および演習
【事前事後学習の内容(2時間)】学習シート
レポート課題として,ヒープソートアルゴリズムに関するプログラムを設計・実装し、考察することができる.
4thQ
9週 線形リスト(1)
【事前事後学習の内容(1時間)】学習シート
ポインタを用いた1方向線形リストの概念及びJAVA プログラムでの実現方法を説明できる.
10週 線形リスト(2)
【事前事後学習の内容(1時間)】学習シート
線形リストにおけるデータの探索・追加・削除について説明出来る.
11週 演習
【事前事後学習の内容(1時間)】学習シート
レポート課題として,ここまでに学んだ線形リストに関するプログラミムを設計・実装し、考察できる.
12週 線形リスト(3)
【事前事後学習の内容(1時間)】学習シート
循環・重連結リストについて説明できる.
13週 線形リスト(4)
【事前事後学習の内容(1時間)】学習シート
線形リストを用いたハッシュ法について説明できる.
14週 演習
【事前事後学習の内容(2時間)】学習シート
レポート課題として,循環・重連結リストを用いたハッシュ法に関するプログラムを設計・実装し、考察できる.
15週 期末試験 後期第9回~14回に関する理解度を確認する.
16週 試験問題解説など 試験の解答と解説を行う.

モデルコアカリキュラムの学習内容と到達目標

分類分野学習内容学習内容の到達目標到達レベル授業週
基礎的能力工学基礎情報リテラシー情報リテラシー同一の問題に対し、それを解決できる複数のアルゴリズムが存在しうることを知っている。3前1,前6,後7
専門的能力分野別の専門工学情報系分野プログラミング代入や演算子の概念を理解し、式を記述できる。3前1,前6
プロシージャ(または、関数、サブルーチンなど)の概念を理解し、これらを含むプログラムを記述できる。3前4,前7,前14,後4,後7,後11,後14
与えられた問題に対して、それを解決するためのソースプログラムを記述できる。3前4,前7,前14,後4,後7,後11,後14
ソフトウェア生成に必要なツールを使い、ソースプログラムをロードモジュールに変換して実行できる。3前4,前7,前14,後4,後7,後11,後14
要求仕様に従って、標準的な手法により実行効率を考慮したプログラムを設計できる。3前4,前7,前14,後4,後7,後11,後14
要求仕様に従って、標準的な手法により実行効率を考慮したプログラムを実装できる。4後7,後14
ソフトウェアアルゴリズムの概念を説明できる。4前1
与えられたアルゴリズムが問題を解決していく過程を説明できる。4前2,前3,前5,前8,前11,前13,後1,後2,後3,後5,後10,後12,後13,後14
同一の問題に対し、それを解決できる複数のアルゴリズムが存在しうることを説明できる。4前1,前2,前3,前5,前11,前13,後1,後2,後3,後5,後9,後10,後12,後13
整列、探索など、基本的なアルゴリズムについて説明できる。4前2,前3,前5,前8,前11,前13,後1,後2,後3,後5,後10,後12,後13
時間計算量によってアルゴリズムを比較・評価できることを説明できる。4前6,後6
領域計算量などによってアルゴリズムを比較・評価できることを説明できる。4前6,後6
コンピュータ内部でデータを表現する方法(データ構造)にはバリエーションがあることを説明できる。4前1,前5,前11,前12,後5,後12
同一の問題に対し、選択したデータ構造によってアルゴリズムが変化しうることを説明できる。4前5,後5,後10,後12,後13
リスト構造、スタック、キュー、木構造などの基本的なデータ構造の概念と操作を説明できる。4前6,前11,前12,後6
リスト構造、スタック、キュー、木構造などの基本的なデータ構造を実装することができる。4後7,後11,後14
ソースプログラムを解析することにより、計算量等のさまざまな観点から評価できる。4前6,後7,後14
同じ問題を解決する複数のプログラムを計算量等の観点から比較できる。4前6,後7,後14
分野別の工学実験・実習能力情報系分野【実験・実習能力】情報系【実験・実習】問題を解決するために、与えられたアルゴリズムを用いてソースプログラムを記述し、得られた実行結果を確認できる。4前4,前7,前14,後4,後7,後11,後14

評価割合

試験課題レポート講義ノート演習合計
総合評価割合802000100
基礎的能力00000
専門的能力802000100
分野横断的能力00000