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

科目基礎情報

学校 熊本高等専門学校 開講年度 令和03年度 (2021年度)
授業科目 データ構造とアルゴリズム
科目番号 HI1407 科目区分 専門 / 必修
授業形態 授業 単位の種別と単位数 学修単位: 2
開設学科 人間情報システム工学科 対象学年 4
開設期 通年 週時間数 1
教科書/教材 西澤弘毅,森田光,Pythonで体験してわかる アルゴリズムとデータ構造,近代科学社, 2018
担当教員 村上 純

到達目標

 データ構造にはバリエーションがあることを理解し,同一の問題に対し,選択したデータ構造によってアルゴリズムが変化しうることを理解できる.スタック、キューなどの基本的なデータ構造と,木構造,グラフ構造の概念と操作を説明できる.
 与えられたアルゴリズムが問題を解決していく過程を説明できる.同一の問題に対し,それを解決できる複数のアルゴリズムが存在しうることを理解できる.整列,探索など基本的なアルゴリズム及び分割法,再帰法などのアルゴリズムについて説明できる.比較回数や計算量などによってアルゴリズムを比較・評価できる.

ルーブリック

理想的な到達レベルの目安標準的な到達レベルの目安未到達レベルの目安
基本的なデータ構造としてのスタック,キューのそれぞれの構成,実装法,性能評価スタック,キューの構成,実装法,性能評価について理解し,詳しく説明することができ,正確に実装もできる.スタック,キューの構成,実装法,性能評価について理解し,説明することができ,実装もできる.スタック,キューの構成,実装法,性能評価について理解できず,説明や実装もできない.
代表的なアルゴリズムとしてのソート(整列)とサーチ(探索)バブルソート,クイックソート,マージソートアルゴリズムについてよく理解でき,正確なプログラムを組める.バブルソート,クイックソート,マージソートアルゴリズムについて理解でき,プログラムを組める.バブルソート,クイックソート,マージソートアルゴリズムについて理解できず,プログラムを組めことができない.
アルゴリズム計算量の評価方法計算量の評価基準と記法をよく理解し,オーダー記法の求め方及びそれを利用したアルゴリズム評価を詳しく説明できる.計算量の評価基準と記法をよく理解し,オーダー記法の求め方及びそれを利用したアルゴリズム評価を説明できる.計算量の評価基準と記法をよく理解し,オーダー記法の求め方及びそれを利用したアルゴリズム評価を説明できない.
木構造(ツリー構造),2分木,2分探索木木構造の概念と構成,探索法についてよく理解できる.2分木と2分探索木の概念をよく理解し,その構成と操作の実装法について詳しくに説明できる.木構造の概念と構成,探索法について理解できる.2分木と2分探索木の概念を理解し,その構成と操作の実装法について説明できる.木構造の概念と構成,探索法について理解できない.2分木と2分探索木の概念を理解できず,その構成と操作の実装法について説明できない.
再帰アルゴリズム(ハノイの塔)再帰アルゴリズムの概念について詳しく理解でき,ハノイの塔について正確に説明と実装ができる.再帰アルゴリズムの概念について理解でき,ハノイの塔について説明と実装ができる.再帰アルゴリズムの概念について理解できず,ハノイの塔について説明と実装ができない.
グラフ構造とグラフ探索アルゴリズム(ダイクストラ法)グラフの概念と応用例をよく理解できる.ダイクストラ方について正確に理解し,説明と実装が正しくできる.グラフの概念と応用例を理解できる.ダイクストラ方について理解し,説明と実装ができる.グラフの概念と応用例を理解できない.ダイクストラ方について理解できず,説明と実装もできない.
分割統治法と動的計画法(フィボナッチ数列)分割統治法と動的計画法の考え方と仕組みについてよく理解できる.それらの手法によりフィボナッチ数列を求めるアルゴリズムがよく理解でき,正確に実装できる.分割統治法と動的計画法の考え方と仕組みについて理解できる.それらの手法によりフィボナッチ数列を求めるアルゴリズムが理解でき,実装できる.分割統治法と動的計画法の考え方と仕組みについて理解できない.それらの手法によりフィボナッチ数列を求めるアルゴリズムが理解できず,実装もできない.

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

教育方法等

概要:
 データ構造とアルゴリズムはコンピュータ・サイエンスの根幹を成すものであり,プログラミング技法を学ぶにおいて最も重要となる概念である.本科目は基本的なデータ構造としてのスタックとキュー,動的なデータ構造としての木構造,グラフ構造などの構成と,これらのデータ構造における整列と探索アルゴリズムについて学ぶ.また,ハノイの塔,ソートとマージ,ダイクストラ法,フィボナッチ数列など実用性の高いアルゴリズムの設計及びその応用を取り上げる. プログラミングの基礎を踏まえてデータ構造とアルゴリズム設計の手順や手法と,計算量の解析法などを学んで行く.
授業の進め方・方法:
 (1) 自力で基本なデータ構造とアルゴリズムの設計及び実装することができる. (2) 探索と整列のアルゴリズムの考え方について理解しそのプログラムを作成できる.(3)木構造及び探索アルゴリズム,グラフ構造及びダイクストラ法,再帰法(ハノイの塔),分割統治法と動的計画法(フィボナッチ数列)の考え方について理解でき,簡単な応用例をプログラミングできる.(4)アルゴリズムの計算量の解析方法について理解できる.
 上記のことを授業目的とし授業を進める.本科目は学修科目であるため,学習の各段階において自学学習用の課題を設け,学習の成果を定期試験等筆記試験と演習レポートを総合し評価する.演習レポートの提出期限は課題提示と同時に示し,期限に遅れて提出されたレポートに対し減点する.60%以上の得点率で目標達成とみなす.
注意点:
 規定授業時間数は60時間,放課後・家庭で30時間程度の自学自習が求められる.
 本科目は,計算機科学及び情報管理に関する基礎的な科目である.より効率の良いプログラムを書くために理解しておかねばならない必要な知識でもある.3年次のプログラミング,4・5年次のソフトウェア系の科目と関連する.講義内容について十分に復習して受講することが望まれる.また,資格試験や編入学・就職試験にも役立つ知識であるため,理論だけではなく,実際に学んだデータ構造とアルゴリズムを実装してみることも重要である.

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

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

授業計画

授業内容 週ごとの到達目標
前期
1stQ
1週 ガイダンス
本科目の概要,授業方針,評価方法等について紹介する.
2週 アルゴリズムの重要性(アルゴリズムとは、データ構造とは) アルゴリズムとデータ構造の意味を理解し,プログラミングにおけるその重要性が説明できる.
3週 Python言語の使い方 Python言語の操作ができ,それを用いて簡単なプログラムを作成できる.
4週 アルゴリズムを表現する方法(フローチャート、疑似コード) アルゴリズムを,フローチャートや疑似コードで表現することができる.
5週 アルゴリズムを比べる方法(選択ソート) 選択ソートアルゴリズムについて理解でき,プログラムが組める.また,そのアルゴリズムの計算回数の評価ができる.
6週 アルゴリズムを思いつく方法(挿入ソートとバケットソート) 挿入ソートとバケットソートについて理解でき,プログラムが組める.また,そのアルゴリズムの計算回数の評価ができる.
7週 アルゴリズムを改良する方法(バブルソート) バブルソートについて理解でき,プログラムが組める.また,そのアルゴリズムの計算回数の評価ができる.
8週 中間評価(演習課題の点数を成績算入,筆記試験の点数と合わせて評価する) 授業において演習課題を与え,学習状況を確認し完成度により評価する.筆記試験の点数と合わせて総合評価する.
2ndQ
9週 アルゴリズムを設計する方法1(分割統治法とフィボナッチ数列) 分割統治法によるフィボナッチ数列の計算アルゴリズムが理解でき,プログラムが組める.また,そのアルゴリズムの計算回数の評価ができる.
10週 アルゴリズムを設計する方法2(動的計画法とフィボナッチ数列) 動的計画法によるフィボナッチ数列の計算アルゴリズムが理解でき,プログラムが組める.また,そのアルゴリズムの計算回数の評価ができる.
11週 問題に適したアルゴリズムの設計法1(再帰とハノイの塔) 再帰の考え方,およびハノイの塔の考え方が理解でき,プログラムが組める.
12週 問題に適したアルゴリズムの設計法2(最短経路の数え上げ問題) 最短経路の数え上げ問題とその解法が理解でき,プログラムが組める.
13週 アルゴリズム設計法を応用したソート1(マージソート) マージソートのアルゴリズムが理解でき,プログラムが組める.また,そのアルゴリズムの計算回数の評価ができる.
14週 アルゴリズム設計法を応用したソート2(ソートアルゴリズムの計算量) 各種ソートアルゴリズムの計算量の評価法が理解でき,アルゴリズム間の比較をすることができる.
15週 定期評価:基本的なテータ構造,ソートと探索アルゴリズム,再帰,計算量など 授業において演習課題を与え,学習状況を確認し完成度により評価する.筆記試験の点数と合わせて総合評価する.
16週 定期試験答案返却と解説
後期
3rdQ
1週 分割統治法によるソート1(クイックソート) クイックソートのアルゴリズムが理解でき,プログラムが組める.
2週 分割統治法によるソート2(クイックソートの計算量) クイックソートのアルゴリズムの計算回数の評価ができる.
3週 データ構造の重要性(2分探索木) 2分探索木の考え方およびそれを用いた探索法が理解でき,プログラムが組める.また,そのアルゴリズムの計算回数の評価ができる.
4週 データ構造に依存したアルゴリズム1(スタックとキュー) スタックとキューの概念が理解できる.
5週 データ構造に依存したアルゴリズム2(深さ優先探索と幅優先探索) 深さ優先探索と幅優先探索の考え方が理解でき,プログラムが組める.
6週 データ構造を応用したソート1(ヒープ) ヒープの概念について理解し説明することができる.
7週 データ構造を応用したソート2(ヒープソート) ヒープソートのアルゴリズムが理解でき,プログラムが組める.また,そのアルゴリズムの計算回数の評価ができる.
8週 中間評価(演習課題の点数を成績算入,筆記試験の点数と合わせて評価する) 授業において演習課題を与え,学習状況を確認し完成度により評価する.筆記試験の点数と合わせて総合評価する.
4thQ
9週 データ構造の変更に応じたアルゴリズムの改良1(ダイクストラ法) ダイクストラ法のアルゴリズムが理解でき,プログラムが組める.
10週 データ構造の変更に応じたアルゴリズムの改良2(貪欲法) 貪欲法のアルゴリズムが理解でき,プログラムが組める.
11週 条件に応じた探索法の改良1(力まかせ探索とミニマックス法) 力まかせ探索とミニマックス法のアルゴリズムが理解でき,プログラムが組める.
12週 条件に応じた探索法の改良2(枝刈り) 枝刈りのアルゴリズムが理解でき,説明することができる.
13週 目的別のアルゴリズムとデータ構造1(分割ナップザック問題) 分割ナップザック問題の解法が理解でき,説明することができる.
14週 目的別のアルゴリズムとデータ構造2(0-1ナップザック問題) 0-1ナップザック問題の解法が理解でき,説明することができる.
15週 定期評価:基本的なテータ構造,ソートと探索アルゴリズム,再帰,計算量など 授業において演習課題を与え,学習状況を確認し完成度により評価する.筆記試験の点数と合わせて総合評価する.
16週 定期試験答案返却と解説

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

分類分野学習内容学習内容の到達目標到達レベル授業週
専門的能力分野別の専門工学情報系分野プログラミング代入や演算子の概念を理解し、式を記述できる。4前2,前3
プロシージャ(または、関数、サブルーチンなど)の概念を理解し、これらを含むプログラムを記述できる。4前3,前10,後6
変数の概念を説明できる。4前2,前3
データ型の概念を説明できる。4前2,前3,前4,前10,前12
制御構造の概念を理解し、条件分岐を記述できる。4前2,前3,前4
制御構造の概念を理解し、反復処理を記述できる。4前2,前4
与えられた問題に対して、それを解決するためのソースプログラムを記述できる。4前2,前3
ソフトウェア生成に必要なツールを使い、ソースプログラムをロードモジュールに変換して実行できる。4前3,前4
与えられたソースプログラムを解析し、プログラムの動作を予測することができる。4前16,後6
主要な言語処理プロセッサの種類と特徴を説明できる。4前2,前3
ソフトウェア開発に利用する標準的なツールの種類と機能を説明できる。4前2,前3
プログラミング言語は計算モデルによって分類されることを説明できる。4前4,前10
主要な計算モデルを説明できる。4前4
要求仕様に従って、標準的な手法により実行効率を考慮したプログラムを設計できる。4前5,前12
要求仕様に従って、いずれかの手法により動作するプログラムを設計することができる。4前5,前12
要求仕様に従って、いずれかの手法により動作するプログラムを実装することができる。4前4,前5
要求仕様に従って、標準的な手法により実行効率を考慮したプログラムを実装できる。4前4,前5
ソフトウェアアルゴリズムの概念を説明できる。4前3,前8,前12,後6,後11,後12,後13,後14
与えられたアルゴリズムが問題を解決していく過程を説明できる。4前3,前10,前12,後6,後7,後11,後12,後13,後14
同一の問題に対し、それを解決できる複数のアルゴリズムが存在しうることを説明できる。4前8,後6,後7,後11,後12,後13,後14
整列、探索など、基本的なアルゴリズムについて説明できる。4前4,前5,前8,前9,前12,前13,前14,前15,後11,後12,後13,後14
時間計算量によってアルゴリズムを比較・評価できることを説明できる。4前4,前5,前6,前7,前8,前9,前10,前14,前15,後7,後11,後12,後13,後14
領域計算量などによってアルゴリズムを比較・評価できることを説明できる。4前5,前6,前7,前12,前13,後7,後11,後12,後13,後14
コンピュータ内部でデータを表現する方法(データ構造)にはバリエーションがあることを説明できる。4後2,後3,後4,後5,後10,後14
同一の問題に対し、選択したデータ構造によってアルゴリズムが変化しうることを説明できる。4前2,後1,後2,後3,後4,後5,後14,後15
リスト構造、スタック、キュー、木構造などの基本的なデータ構造の概念と操作を説明できる。4前2,前10,後1,後2,後3,後4,後5,後9,後10,後14,後15
リスト構造、スタック、キュー、木構造などの基本的なデータ構造を実装することができる。4前2,前10,前11,後1,後2,後3,後4,後5,後9,後10,後14
ソフトウェアを中心としたシステム開発のプロセスを説明できる。4前14,後10,後11,後12,後13,後14
ソースプログラムを解析することにより、計算量等のさまざまな観点から評価できる。4後9,後10,後11,後12,後13
同じ問題を解決する複数のプログラムを計算量等の観点から比較できる。4後9,後10,後11,後12,後13
分野横断的能力汎用的技能汎用的技能汎用的技能日本語と特定の外国語の文章を読み、その内容を把握できる。2
態度・志向性(人間力)態度・志向性態度・志向性チームで協調・共同することの意義・効果を認識している。3
チームで協調・共同するために自身の感情をコントロールし、他者の意見を尊重するためのコミュニケーションをとることができる。3
当事者意識をもってチームでの作業・研究を進めることができる。3
チームのメンバーとしての役割を把握した行動ができる。3
リーダーがとるべき行動や役割をあげることができる。3
適切な方向性に沿った協調行動を促すことができる。3
リーダーシップを発揮する(させる)ためには情報収集やチーム内での相談が必要であることを知っている3
法令やルールを遵守した行動をとれる。3
他者のおかれている状況に配慮した行動がとれる。3
技術が社会や自然に及ぼす影響や効果を認識し、技術者が社会に負っている責任を挙げることができる。3
自身の将来のありたい姿(キャリアデザイン)を明確化できる。3
その時々で自らの現状を認識し、将来のありたい姿に向かっていくために現状で必要な学習や活動を考えることができる。3
キャリアの実現に向かって卒業後も継続的に学習する必要性を認識している。3
これからのキャリアの中で、様々な困難があることを認識し、困難に直面したときの対処のありかた(一人で悩まない、優先すべきことを多面的に判断できるなど)を認識している。3
高専で学んだ専門分野・一般科目の知識が、企業や大学等でどのように活用・応用されるかを説明できる。3
企業等における技術者・研究者等の実務を認識している。3
企業人としての責任ある仕事を進めるための基本的な行動を上げることができる。3
企業における福利厚生面や社員の価値観など多様な要素から自己の進路としての企業を判断することの重要性を認識している。2
企業には社会的責任があることを認識している。3

評価割合

筆記試験実技試験演習レポート合計
総合評価割合50050100
基礎的能力2002040
専門的能力2002040
分野横断的能力1001020