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

科目基礎情報

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

到達目標

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

ルーブリック

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

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

到達目標 C 1 説明 閉じる

教育方法等

概要:
基本的なプログラムを書くために必要とされる代表的かつ基礎的なアルゴリズムとデータ構造を学習することで,与えられた課題を効率よく解決する能力を身につける.併せて,より理解を深めるため,与えられた課題をJava言語プログラミングによる実現方法を理解し,開発を実践することができる.加えて,時間計算量などによってアルゴリズムを比較・評価できることを理解し,計算量等の観点から,自ら作成したソースプログラムの比較や評価ができる.
授業の進め方・方法:
各講義では,教科書に沿ったスライドを用いながら代表的なアルゴリズムとデータ構造について解説する.その後,各単元の定着を図るために,教科書の例題や演習問題をJavaで実装する.
・演習(例題と演習問題):教科書の例題と演習問題へ取り組む(授業時にできなかった分が次回講義回までの宿題,事前事後学習として取組むこと)
・演習(学習シート課題):配布する学習シートで出題する課題に取組む.
・演習(総合演習):与えられた課題に対してJavaで実装する(学年末に実施).実装したのちに結果を比較し,考察することで,深く理解する.また,発表形式でプログラム・結果・考察を説明することにより,習熟度をチェックする.
・アルゴリズムの理解度確認試験(前期1回,後期1回,実施する)
・課題の提出方法:
 基本的に,Teams,TechFULを用いる.

本科目は,卒業までに必修得である.
注意点:
本科:プログラミング言語(2 年)
最終成績評価式:演習(例題と演習問題)×30%+演習(課題)×40%+総合課題×10%+アルゴリズムの理解度確認試験×20%
・各単元の例題と演習問題の取組み
・演習(学習シート課題)の取組み
・総合課題(学年末に実施)の取組み
・アルゴリズムの理解度確認試験の結果

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

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

授業計画

授業内容 週ごとの到達目標
前期
1stQ
1週 オリエンテーション,第1章:アルゴリズムの基本
【事前事後学習の内容(3時間)】教科書(List1-1, List1-2, 演習1-1, 演習1-2,演習1-3,List1C-1,演習1-4, 演習1-5, List1-3, List1-4, List1-5, List1-6, List1-7, List1-8, 演習1-7, 演習1-8, List1-9, 演習1-9, 演習1-10, List1-10, List1-11, List1-12, List1-13, List1-14, List1-15,list1C-2, List1-16, 演習1-11, 演習1-12,演習1-13, List 1-17, 演習1-14, 演習1-15,演習1-16)
オリエンテーション(授業の進め方,演習の実施方法,成績評価等の説明を中心に実施)の後,アルゴリズムとプログラムの違い,各種データ構造を説明できる.基本的なアルゴリズムの例題と演習問題をJavaで実装することができる
2週 第2章:データ構造の基本
【事前事後学習の内容(3時間)】教科書(List2-1, List2-2, List2-3,List2-4, 演習2-1,List2-5,演習2-2, 演習2-3, 演習2-4, 演習2-5, List2-6[A], List2-6[B], 演習2-6,List2-7, List2-8, List2-9, List2-10,演習2-7, 演習2-8,)
基本的なデータ構造の例題と演習問題をJavaで実装できる.
3週 第3章:線形探索
【事前事後学習の内容(1時間)】教科書(List3-1,List3-2, List3-3)
探索アルゴリズムおよび表中のデータを探索するアルゴリズムで最も単純かつ基本である線形探索について説明できる.加えて,線形探索における“番兵”およびデータの挿入・削除について説明できる.線形探索の例題をJavaで実装できる.
4週 2分探索,演習
【事前事後学習の内容(1時間)】学習シートの総合課題(1),教科書(List3-4, 演習3-1,演習3-2,演習3-3, 演習3-4, 演習3-5,List3-5, 演習3-6, List3-6, List3-7,演習3-7, List3-8)
あらかじめソートされているデータに対して,効率よく探索するための手法である2分探索法について説明できる.2分探索の例題と演習問題をJavaで実装できる.また,学習シート(総合課題)を取組むことができる.
5週 ハッシュ法(1)チェイン法
【事前事後学習の内容(1時間)】教科書(List 3-9[A], List3-9[B], List3-9[C], List3-9[D], List3-10)
データを効率よく探索するための代表的かつ最もよく用いられている手法であるハッシュ法について説明できる.ハッシュ法の例題をJavaで実装できる.
6週 ハッシュ法(2)オープンアドレス法
【事前事後学習の内容(1時間)】教科書(List3-11[A], List3-12[B], List3-12[A],List3-12[B], 演習3-8)
前回に引き続きハッシュ法,およびアルゴリズムの計算量について説明できる.ハッシュ法の例題と演習問題をJavaで実装できる.
7週 前期第3~6回に関しての理解するプログラムを設計・実装・考察
【事前事後学習の内容(1時間)】学習シートの総合課題(2)
前期第3~6回に関しての理解を確認するため,学習シートの総合課題をJavaで実装する.
8週 アルゴリズムの理解度確認試験(授業時間内に実施) 前期第3~6回に関しての理解を確認する.(授業時間内に実施し,解説を行う)
2ndQ
9週 再帰アルゴリズムの考え方
【事前事後学習の内容(1時間)】教科書(List5-1,List5-2,演習5-1,演習5-2, 演習5-3)
再帰アルゴリズムについて理解し、説明できる.基本的な再帰アルゴリズムの例題と演習問題をJavaで実装できる.
10週 再帰アルゴリズムの解析(1)
【事前事後学習の内容(1時間)】学習シート,教科書(List5-3)
再帰アルゴリズムの解析(トップダウン法)について説明できる.例題をJavaで実装できる.
11週 再帰アルゴリズムの解析(2)
【事前事後学習の内容(1時間)】学習シート,教科書(演習5-4, List5-4, List5-5, List5-6,演習5-5)
再帰アルゴリズムの解析(ボトムアップ法),メモ化について説明できる.例題と演習問題をJavaで実装できる.
12週 バックトラッキング(1)8王妃問題
【事前事後学習の内容(1時間)】学習シート,教科書の例題と演習問題
しらみつぶしを組織的かつ効率よく行う手法としてのバックトラック法について理解できる.例題と演習問題をJavaで実装できる.
13週 バックトラッキング(2)ハノイの塔
【事前事後学習の内容(1時間)】学習シート,教科書の例題と演習問題
前回に続き,バックトラック法について理解し、説明できる.例題と演習問題をJavaで実装できる.
14週 前期第9~13回に関しての理解するプログラムを設計・実装・考察
【事前事後学習の内容(1時間)】学習シートの総合課題(3)
前期第9~13回に関しての理解を確認するため,学習シートの総合課題をJavaで実装する.
15週 第14週に引き続き実施
第14週に引き続き実施
16週 前期総合解説
後期
3rdQ
1週 ソーティングの概念及び単純なソート法
【事前事後学習の内容(1時間)】学習シート,教科書の例題と演習問題(List6-1,演習6-1, 演習6-2)
ソーティングの基本及び単純なソート法の1つである単純選択法について説明できる.例題と演習問題をJavaで実装できる.
2週 単純なソート法
【事前事後学習の内容(1時間)】学習シート,教科書の例題と演習問題(List6-2, 演習6-3, 演習6-4, 演習6-5, List6-3, List6-4, List6-5, 演習6-6から演習6-9)
単純なソート法の続きとして,バブルソートについて説明できる.例題と演習問題をJavaで実装できる.
3週 シェルソート,クイックソート
【事前事後学習の内容(1時間)】学習シート,教科書の例題と演習問題(List6-6, List6-7, 演習6-10, List6-8,List6-9,List6-10,List6-11,演習6-11から演習6-14)
シェルソートとクイックソートについて学ぶ.例題と演習問題をJavaで実装できる.
4週 マージソート
【事前事後学習の内容(1時間)】学習シート,教科書の例題と演習問題(List6-12, List6-13, List6-14, List6-15, List6-16)
マージソートについて学ぶ.例題と演習問題をJavaで実装できる.
5週 ヒープソート(1)
【事前事後学習の内容(1時間)】学習シート
3年次の情報数学の中のグラフにおいて学んだ木構造の概念を用いたヒープソートについて理解し、説明できる.また,これまでに学んだソートアルゴリズムの時間計算量によって比較・評価できることを説明できる.
6週 ヒープソート(2)
【事前事後学習の内容(1時間)】学習シート,教科書の例題と演習問題(List6-17)
ヒープソートについて例題をJavaで実装できる.
7週 後期第1~6回に関しての理解するプログラムを設計・実装・考察
【事前事後学習の内容(1時間)】学習シートの総合課題(4)
後期第1~6回に関しての理解を確認するため,学習シートの総合課題をJavaで実装する.
8週 アルゴリズムの理解度確認試験(授業時間内に実施) 後期第1~6回に関しての理解を確認する.(授業時間内に実施し,解説を行う)
4thQ
9週 線形リスト(1)
【事前事後学習の内容(1時間)】学習シート
ポインタを用いた1方向線形リストの概念及びJAVA プログラムでの実現方法を説明できる.
10週 線形リスト(2)
【事前事後学習の内容(1時間)】学習シート
線形リストにおけるデータの探索・追加・削除について説明出来る.循環・重連結リストについて説明できる.
11週 様々なアルゴリズムの理解(1) 情報処理技術者試験に出題されたアルゴリズムに関する問題を用いて,様々なアルゴリズムを理解することができる
12週 様々なアルゴリズムの理解(2) 情報処理技術者試験に出題されたアルゴリズムに関する問題を用いて,様々なアルゴリズムを理解することができる
13週 総合課題 与えられた課題をJavaで実装し,結果を比較し,考察することで,深く理解する.また,発表形式でプログラム・結果・考察を説明することにより,習熟度をチェックする.
14週 総合課題の発表(1) 総合課題の発表ができる
15週 総合課題の発表(2) 総合課題の発表ができる
16週 総合解説 総合解説

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

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

評価割合

演習(例題と演習問題)演習(課題)総合課題アルゴリズムの理解度確認試験合計
総合評価割合30401020100
基礎的能力00000
専門的能力30401020100
分野横断的能力00000