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

科目基礎情報

学校 熊本高等専門学校 開講年度 2018
授業科目 データ構造とアルゴリズム
科目番号 HI407 科目区分 専門 / 必修
授業形態 授業 単位の種別と単位数 学修単位: 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週 貪欲法と最大スパニング木問題(1)
概念,貪欲法アルゴリズム
(2)
Kruskalアルゴリズムとその実装
貪欲法の考え方と仕組み,貪欲法を扱うと解きやすい問題の条件について理解できる.貪欲法を用いて最大スパニング木問題を解くプログラムを組める.Kruskal法を理解し,実装できる.
15週 定期試験:グラフ、グラフ探索アルゴリズム
16週 定期試験答案返却と解説

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

分類分野学習内容学習内容の到達目標到達レベル授業週
専門的能力分野別の専門工学情報系分野プログラミング代入や演算子の概念を理解し、式を記述できる。4
プロシージャ(または、関数、サブルーチンなど)の概念を理解し、これらを含むプログラムを記述できる。4前10
変数の概念を説明できる。4
データ型の概念を説明できる。4
制御構造の概念を理解し、条件分岐を記述できる。4
制御構造の概念を理解し、反復処理を記述できる。4
与えられた問題に対して、それを解決するためのソースプログラムを記述できる。4
ソフトウェア生成に必要なツールを使い、ソースプログラムをロードモジュールに変換して実行できる。4
与えられたソースプログラムを解析し、プログラムの動作を予測することができる。4前16
主要な言語処理プロセッサの種類と特徴を説明できる。4
ソフトウェア開発に利用する標準的なツールの種類と機能を説明できる。4
プログラミング言語は計算モデルによって分類されることを説明できる。4
主要な計算モデルを説明できる。3
要求仕様に従って、標準的な手法により実行効率を考慮したプログラムを設計できる。4
要求仕様に従って、いずれかの手法により動作するプログラムを設計することができる。4
要求仕様に従って、いずれかの手法により動作するプログラムを実装することができる。4
要求仕様に従って、標準的な手法により実行効率を考慮したプログラムを実装できる。4
ソフトウェアアルゴリズムの概念を説明できる。4
与えられたアルゴリズムが問題を解決していく過程を説明できる。4前3
同一の問題に対し、それを解決できる複数のアルゴリズムが存在しうることを説明できる。4
整列、探索など、基本的なアルゴリズムについて説明できる。4
時間計算量によってアルゴリズムを比較・評価できることを説明できる。4
領域計算量などによってアルゴリズムを比較・評価できることを説明できる。4
コンピュータ内部でデータを表現する方法(データ構造)にはバリエーションがあることを説明できる。4
同一の問題に対し、選択したデータ構造によってアルゴリズムが変化しうることを説明できる。4後15
リスト構造、スタック、キュー、木構造などの基本的なデータ構造の概念と操作を説明できる。4後15
リスト構造、スタック、キュー、木構造などの基本的なデータ構造を実装することができる。4
ソフトウェアを中心としたシステム開発のプロセスを説明できる。2
ソースプログラムを解析することにより、計算量等のさまざまな観点から評価できる。4
同じ問題を解決する複数のプログラムを計算量等の観点から比較できる。4
計算機工学整数・小数をコンピュータのメモリ上でディジタル表現する方法を説明できる。3
基数が異なる数の間で相互に変換できる。3
基本的な論理演算を行うことができる。2
基本的な論理演算を組合わせて、論理関数を論理式として表現できる。2
論理式の簡単化の概念を説明できる。2
論理ゲートを用いて論理式を組合せ論理回路として表現することができる。2
与えられた組合せ論理回路の機能を説明することができる。2
組合せ論理回路を設計することができる。2
フリップフロップなどの順序回路の基本素子について、その動作と特性を説明することができる。2
レジスタやカウンタなどの基本的な順序回路の動作について説明できる。2
与えられた順序回路の機能を説明することができる。2
順序回路を設計することができる。2
コンピュータを構成する基本的な要素の役割とこれらの間でのデータの流れを説明できる。2
プロセッサを実現するために考案された主要な技術を説明できる。2
メモリシステムを実現するために考案された主要な技術を説明できる。2
入出力を実現するために考案された主要な技術を説明できる。2
コンピュータアーキテクチャにおけるトレードオフについて説明できる。2
ハードウェア記述言語など標準的な手法を用いてハードウェアの設計、検証を行うことができる。2

評価割合

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