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

科目基礎情報

学校 熊本高等専門学校 開講年度 令和02年度 (2020年度)
授業科目 データ構造とアルゴリズム
科目番号 HI1407 科目区分 専門 / 必修
授業形態 授業 単位の種別と単位数 学修単位: 2
開設学科 人間情報システム工学科 対象学年 4
開設期 通年 週時間数 1
教科書/教材 紀平拓男,春日伸弥,プログラミングの宝箱 アルゴリズムとデータ構造(第2版),SoftBank Creative,2011
担当教員 孫 寧平

到達目標

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

ルーブリック

理想的な到達レベルの目安標準的な到達レベルの目安未到達レベルの目安
基本的なデータ構造としてのリスト,スタック,キュー,リングのそれぞれの構成,実装法,性能評価配列またはポインタによる連結リストの実装方法についてよく理解し,リストにおける線形探索及び自己組織化探索を適切に実装できる.スタック,キュー,リングの概念,配列と連結リストを用いるスタックとキューの作成,挿入と削除操作をよく理解できる.配列またはポインタによる連結リストの実装方法について理解し,リストにおける線形探索及び自己組織化探索を実装できる.スタック,キュー,リングの概念,配列と連結リストを用いるスタックとキューの作成,挿入と削除操作を理解できる.配列またはポインタによる連結リストの実装方法について理解していない.リストにおける線形探索及び自己組織化探索を実装できない.スタック,キュー,リングの概念,配列と連結リストを用いるスタックとキューの作成,挿入と削除操作を理解できない.
代表的なアルゴリズムとしてのソート(整列)とサーチ(探索)バブルソート,クイックソート,マージソートアルゴリズムについてよく理解でき,自力でプログラムを組める.また,ソートアルゴリズムの性能分析方法についてよく理解できる.線形探索(リニアサーチ),バイナリサーチ,自己組織化探索などについて十分に理解し実装できる.バブルソート,クイックソート,マージソートアルゴリズムについて理解でき,自力でプログラムを組める.また,ソートアルゴリズムの性能分析方法について理解できる.線形探索(リニアサーチ),バイナリサーチ,自己組織化探索などについて理解し実装できる.バブルソート,クイックソート,マージソートアルゴリズムについて理解できず,自力でプログラムを組めない.また,ソートアルゴリズムの性能分析方法について理解できない.線形探索(リニアサーチ),バイナリサーチ,自己組織化探索などについて理解や実装することができない.
 ハッシュ法ハッシュ法の概念をよく理解し,ハッシュ関数の設計方法を詳細に説明できる.ハッシュ法における衝突を解消する仕組み,内部ハッシングと外部ハッシングアルゴリズムの設計と実装法をよく理解し,それぞれのプログラムをよく組める.ハッシュ法の概念を理解し,ハッシュ関数の設計方法を説明できる.ハッシュ法における衝突を解消する仕組み,内部ハッシングと外部ハッシングアルゴリズムの設計と実装法を理解し,それぞれのプログラムを組める.ハッシュ法の概念を理解できない.ハッシュ関数の設計方法を説明できない.ハッシュ法における衝突を解消する仕組み,内部ハッシングと外部ハッシングアルゴリズムの設計と実装法を理解できない.それぞれのプログラムを組めない.
 アルゴリズム計算量と領域計算量の評価方法計算量の評価基準と記法をよく理解し,オーダー記法の求め方及びそれを利用したアルゴリズム時間計算量の評価を詳細に説明できる.英文教材を読解できる.計算量の評価基準と記法を理解し,オーダー記法の求め方及びそれを利用したアルゴリズム時間計算量の評価を説明できる.計算量の評価基準と記法を理解できない.オーダー記法の求め方及びそれを利用したアルゴリズム時間計算量の評価を説明できない.
木構造(ツリー構造),2分木,2分探索木木構造の概念と構成,深さ優先探索についてよく理解できる.2分木と2分探索木の概念をよく理解し,その構成と挿入・削除,探索操作の実装法について詳細に説明できる.木構造の概念と構成,深さ優先探索について理解できる.2分木と2分探索木の概念を理解し,その構成と挿入・削除,探索操作の実装法について説明できる.木構造の概念と構成,深さ優先探索について理解できない.2分木と2分探索木の概念を理解できず,その構成と挿入・削除,探索操作の実装法について説明できない.
再帰法再帰法の概念について理解でき,直接再帰と間接再帰を説明でき,応用できる.再帰法の概念について理解でき,直接再帰と間接再帰を説明できる.再帰法の概念について理解できない.直接再帰と間接再帰を説明できない.
グラフ構造とグラフ探索アルゴリズムグラフの概念と応用例をよく理解できる.隣接行列,接続行列,隣接リストを用いたグラフの表現法をよく応用できる.再帰法の仕組みと応用についてよく理解できる。試行錯誤の概念,バックトラック法と再帰,グラフの深さ優先探索(DFS)と幅優先探索(BFS)についてよく理解でき,GUIを用いるDFSとBFSプログラムをよく組める.グラフの概念と応用例を理解できる.隣接行列,接続行列,隣接リストを用いたグラフの表現法を応用できる.再帰法の仕組みと応用について理解できる。試行錯誤の概念,バックトラック法と再帰,グラフの深さ優先探索(DFS)と幅優先探索(BFS)について理解でき,DFSとBFSプログラムを組める.グラフの概念と応用例を理解できない.隣接行列,接続行列,隣接リストを用いたグラフの表現法を応用できない.再帰法の仕組みと応用について理解できない。試行錯誤の概念,バックトラック法と再帰,グラフの深さ優先探索(DFS)と幅優先探索(BFS)について理解できない.DFSとBFSプログラムを組めない.
動的計画法と貪欲法動的計画法の考え方と仕組み,動的計画法を扱うと解きやすい問題の条件についてよく理解できる.最短経路問題を解くプログラムをGUIを用いて組める.貪欲法の考え方と仕組み,貪欲法を扱うと解きやすい問題の条件についてよく理解できる.最大スパニング木問題を解くプログラムをGUIを用いて組める.動的計画法の考え方と仕組み,動的計画法を扱うと解きやすい問題の条件について理解できる.最短経路問題を解くプログラムをGUIを用いて組める.貪欲法の考え方と仕組み,貪欲法を扱うと解きやすい問題の条件について理解できる.最大スパニング木問題を解くプログラムを組める.動的計画法の考え方と仕組み,動的計画法を扱うと解きやすい問題の条件について理解できない.最短経路問題を解くプログラムをGUIを用いて組めない.貪欲法の考え方と仕組み,貪欲法を扱うと解きやすい問題の条件について理解できない.最大スパニング木問題を解くプログラムを組めない.

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

教育方法等

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

授業計画

授業内容 週ごとの到達目標
前期
1stQ
1週 ガイダンス
本科目の概要,授業方針,評価方法等について紹介する.
2週 配列または連結リストによるスタック(棚)構造 スタック構造とその実装方法について理解し,その挿入・削除操作アルゴリズムを実装できる.
3週 配列または連結リストによるキュー(待ち行列)とリング(環状キュー)構造 キューとリング構造と実装方法について理解し,その挿入・削除操作アルゴリズムを実装できる.
4週 バブルソートアルゴリズム,
クイックソートアルゴリズム
2つのソートアルゴリズムについて理解でき,プログラムを組める.
5週 マージソートアルゴリズム,
ソートアルゴリズムの性能分析
マージソートアルゴリズムについて理解でき,プログラムを組める.また,3つのソートアルゴリズムを実装し,それぞれの実行時間を計測し,性能分析について理解する.
6週 アルゴリズム計算量の評価方法(1)
概念,時間計算量,領域計算量,オーダー記法
計算量の評価基準と記法を理解し,時間計算量と領域計算量の評価を理解できる(英文教材を利用する).
7週 アルゴリズム計算量の評価方法(2)
オーダーの計算,アルゴリズム計算量の計算
オーダー記法の求め方及びそれを利用したアルゴリズム計算量の評価を説明できる(英文教材を利用する).
8週 中間評価(小テストと演習課題の点数を成績に算入,課題の解答について説明する) 毎回の授業において小テストや演習課題を与え,学習状況を確認し完成度により評価する
2ndQ
9週 線形探索(リニアサーチ),
バイナリサーチ
線形探索(リニアサーチ),バイナリサーチアルゴリズムと実装方法を理解できる.時間計算量を解析できる.
10週 自己組織化探索(1)
概念,三つのアルゴリズム
自己組織化探索アルゴリズムと実装方法を理解できる(英文教材を利用する).
11週 自己組織化探索(2)
三つのアルゴリズム,性能分析
自己組織化探索アルゴリズムと実装方法を理解できる.時間計算量を解析できる(英文教材を利用する).
12週 ハッシュ法(1)
概念,ハッシュ関数の設計
ハッシュ法の概念を理解し,ハッシュ関数の設計方法を説明できる.
13週 ハッシュ法(2)
内部ハッシング
ハッシュ法における衝突を解消するハッシュ法の仕組み,内部ハッシングアルゴリズムの設計と実装法を理解でき,プログラムを組める.
14週 ハッシュ法(3)
外部ハッシングアルゴリズム
ハッシュ法における衝突を解消する外部ハッシングアルゴリズムの設計と実装法を理解でき,プログラムを組める.
15週 定期評価:基本的なテータ構造,ソートと探索アルゴリズム,計算量など 毎回の授業において小テストや演習課題を与え,学習状況を確認し完成度により評価する
16週 定期試験答案返却と解説(小テストと演習課題の点数を成績に算入,課題の解答について説明する)
後期
3rdQ
1週 木構造(ツリー構造)(1)
概念とデータ構造
木構造の概念とデータ構造について理解できる.
2週 木構造(ツリー構造)(2)
深さ優先探索アルゴリズム
木構造の深さ優先探索アルゴリズムの行きがけ順(前順,pre-order), 通りがけ順(中順,in-order),帰りがけ順 (後順,post-order)について理解できる.
3週 2分木と多分木 2分木構造及び2分木・多分木の相互変換について理解できる.
4週 2分探索木(1)
2分探索木の構造
2分探索木の概念と構造を理解できる.
5週 2分探索木(2)
挿入・探索・削除アルゴリズム
2分探索木の構成と挿入・削除,探索操作の実装法について説明できる.
6週 再帰法(1)
概念,直接再帰法
直接再帰法の仕組みとその応用について理解できる。
7週 再帰法(2)
間接再帰法
間接再帰法の仕組みとその応用について理解できる。
8週 中間評価(小テストと演習課題の点数を成績算入,課題の解答について説明する) 毎回の授業において小テストや演習課題を与え,学習状況を確認し完成度により評価する
4thQ
9週 グラフ構造(1)
概念,グラフ構造とネットワーク構造
グラフの概念,隣接行列,接続行列,隣接リストを用いたグラフの表現法を応用できる.
10週 グラフの深さ優先探索(DFS)アルゴリズム DFSアルゴリズムを理解でき,プログラムを組める.
11週 グラフの幅優先探索(BFS)アルゴリズム BFSアルゴリズムを理解でき,プログラムを組める.
12週 動的計画法と最短経路問題のDijkstra法(1)
概念,動的計画法アルゴリズム
動的計画法の考え方と仕組み,動的計画法を扱うと解きやすい問題の条件について理解できる.
13週
動的計画法と最短経路問題のDijkstra法(2)
Dijkstraアルゴリズムとその実装
動的計画法を用いて最短経路問題を解くプログラムを組める.Dijkstra法を理解し,実装できる.
14週 貪欲法と最大スパニング木問題,Kruskalアルゴリズムおよびその実装 貪欲法の考え方と仕組み,貪欲法を扱うと解きやすい問題の条件について理解できる.貪欲法を用いて最大スパニング木問題を解くプログラムを組める.Kruskal法を理解し,実装できる.
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

評価割合

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