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

科目基礎情報

学校 沼津工業高等専門学校 開講年度 平成30年度 (2018年度)
授業科目 データ構造とアルゴリズム
科目番号 2018-471 科目区分 専門 / 必修
授業形態 授業 単位の種別と単位数 履修単位: 2
開設学科 制御情報工学科 対象学年 3
開設期 通年 週時間数 2
教科書/教材 新・明解C言語によるアルゴリズムとデータ構造(柴田/辻,ソフトバンククリエイティブ)
担当教員 藤尾 三紀夫

到達目標

前期ではC言語の機能である構造体や自己参照構造体、関数、ファイル分割を利用した簡単なプログラムが作成でき、デバッガを利用して処理をトレースできることを目標とする。後期では構造化プログラミングとデータ構造について復習した後、様々なアルゴリズムへの適用方法を学習し、C言語を用いてソートや探索などのプログラムに適用できることを目標とする。具体的には以下の3項目を目標とする。
1.構造化プログラミングの3構造と各構文について説明でき,配列,リスト構造,スタック,キュー,木構造などデータ構造についてプログラミングできる。
2.ソートにおいて単純交換・選択・挿入ソートに加えシェル・クイック・マージ・ヒープ・度数ソートについて説明できる。
3.探索において線形探索,2分探索,ハッシュ法,チェイン法,オープンアドレス法,2分探索木について説明できる。

ルーブリック

理想的な到達レベルの目安標準的な到達レベルの目安未到達レベルの目安
評価項目1□構造化プログラミングの3構造と各構文について正確に説明できる。 □配列,リスト構造,スタック,キュー,木構造などデータ構造について正確に説明できる。 □配列と構造体を用いたプログラムをC言語で正確に作成できる。□構造化プログラミングの3構造と各構文について概ね説明できる □配列,リスト構造,スタック,キュー,木構造などデータ構造について概ね説明できる。 □配列と構造体を用いたプログラムをC言語で作成できる。□構造化プログラミングの3構造と各構文について説明できない。 □配列,リスト構造,スタック,キュー,木構造などデータ構造について説明できない。 □配列と構造体を用いたプログラムをC言語で作成できない。
評価項目2□ソートにおいて単純交換・選択・挿入ソートに加えシェル・クイック・マージ・ヒープ・度数ソートについて正確に説明できる。□ソートにおいて単純交換・選択・挿入ソートに加えシェル・クイック・マージ・ヒープ・度数ソートについて概ね説明できる。□ソートにおいて単純交換・選択・挿入ソートに加えシェル・クイック・マージ・ヒープ・度数ソートについて説明できない。
評価項目3□探索において線形探索,2分探索,ハッシュ法,チェイン法,オープンアドレス法,2分探索木について正確に説明できる。□探索において線形探索,2分探索,ハッシュ法,チェイン法,オープンアドレス法,2分探索木について概ね説明できる。□探索において線形探索,2分探索,ハッシュ法,チェイン法,オープンアドレス法,2分探索木について説明できない。

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

【本校学習・教育目標(本科のみ)】 3 説明 閉じる

教育方法等

概要:
コンピュータにおけるデータ形式とその処理方法はプログラム構築において処理時間や効率、安定性などに大きく影響を与える、プログラミングでの重要な要素である。現在のプログラミングで基礎となるデータの保存形式とその処理方法「データ構造とアルゴリズム」について学習することはプログラミングを学ぶ上で欠かせない事項である。
前期はC言語の高度な機能であるポインタ、構造体、関数呼び出し、ファイル分割とデバッガによる実行状況の確認方法を学習する。後期は構造化プログラミングとデータ構造の基本を学び、様々なアルゴルズムへの各種データ構造の適用例について学習する。
授業の進め方・方法:
前期はC言語について演習形式で構造化プログラミングおよび配列やデータ構造、そしてポインタについて実例を基に実技を行う。なおプログラミングはチームで行う。
後期は講義形式でデータ構造やソートやヒープなどのアルゴリズムについて詳しく説明する。講義中には説明後に例を示し、学生を指名して答えてもらうインタラクティブな内容を多く取り入れる。講義の最後に二分探索木のプログラムについて演習を行い、レポートとして提出する。
注意点:
1.試験や課題レポート等は、JABEE 、大学評価・学位授与機構、文部科学省の教育実施検査に使用することがあります。
2.授業参観される教員は当該授業が行われる少なくとも1週間前に教科目担当教員へ連絡してください。
3.前期は試験を20%、レポートを30%として50%分を評価する。
4.前期中、実技試験による到達目標を指定された期日までに達成できない場合補習時間を設け筆記による達成度調査に切り替える。
5.後期は試験を30%、レポートを20%として50%分を評価する。

授業計画

授業内容 週ごとの到達目標
前期
1stQ
1週 ガイダンス 端末によるファイル操作、エディタの操作、コンパイル方法の確認などプログラムを実行するための操作ができる。
2週 構造化プログラミング、キャスト、デバッガ 構造化プログラミング構造を理解し、判定分岐や繰り返しプログラムを作成できる。またキャストによる型変換の効果を理解し利用できる。
3週 メモリ空間と変数(ポインタ) グローバル、ローカル、静的、動的メモリについて違いが説明できる。また定数と変数およびその型について説明できる。
4週 配列(1) 1次元整数配列と実数配列上の処理ができる、整数配列と実数配列の初期値設定ができる。
5週 配列(2) 多次元配列および文字配列による文字列の実現、ヌル文字の効果を理解でき、文字配列の初期値を含めてプログラムできる。
6週 構造体とファイル分割(1) 構造体を宣言できる、構造体の型について説明できる、構造体のメンバ変数にアクセスできる。
7週 構造体とファイル分割(2) 構造体と配列の違い、動的確保についてプログラミングできる。
8週 ファイル入出力 データを入出力するプログラムが作成できる。またデータのファイル入出力プログラムを作成できる。
2ndQ
9週 関数(1) 関数プロトタイプ宣言ができる。
10週 関数(2) 関数に適切な変数を渡し返り値を受け取ることができる。
11週 関数(3) 再帰関数を定義できる。
12週 ポインタ変数(1) ポインタ変数宣言ができる、ポインタ変数に何が代入されているか理解できる、ポインタ変数を開放できる。
13週 ポインタ変数(2) 動的記憶確保ができる、ポインタ変数と配列変数の表現形式を了解し利用できる。
14週 総合演習(1) 要求仕様に基づいて、チームで課題に取り組み、プログラムの設計ができる。またメンバーの分担を決め、担当部位のプログラムができる。
15週 総合演習(2) 担当プログラムを作成し、統合してプログラムをまとめることができる。
16週
後期
3rdQ
1週 基本的なデータ構造 配列、多次元配列、構造体、スタック、キュー、リスト、リングリスト、ツリーの概要を説明できる。
2週 構造化プログラミング 構成要素(順次/反復/分岐)とインデントについて説明できる。
3週 リスト構造 線形、循環、単方向、双方向リスト、リングバッファについて説明できる。
4週 スタックとキュー スタックとキューについて説明できる。
5週 再帰 再帰プログラムの例につい説明できる。
6週 探索(1) 探索アルゴリズの基本について例を挙げて説明できる。
7週 探索(2) 線形探索と2分探索とハッシュについて説明できる。
8週 ソート(1) 単純変換ソート、選択ソート、挿入ソートについて説明できる。
4thQ
9週 ソート(2) クイックソート、マージソートについて説明できる。
10週 ソート(3) ヒープソート、度数ソートについて説明できる。
11週 木構造(1) 木構造、2分木と2分探索木について説明できる。
12週 木構造(2) 順序木の探索手法について説明できる。また各ノード処理について説明できる。
13週 総合演習(1) 二分探索木のプログラム構造を理解し、プログラムを理解できる。
14週 総合演習(2) 横探索のプログラムを作成することができる。
15週 総合演習(3) プログラムの動作を確認し、レポートを論理的考察に基づいて作成することができる。
16週

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

分類分野学習内容学習内容の到達目標到達レベル授業週
基礎的能力工学基礎工学実験技術(各種測定方法、データ処理、考察方法)工学実験技術(各種測定方法、データ処理、考察方法)物理、化学、情報、工学における基礎的な原理や現象を明らかにするための実験手法、実験手順について説明できる。3
実験装置や測定器の操作、及び実験器具・試薬・材料の正しい取扱を身に付け、安全に実験できる。3
実験データの分析、誤差解析、有効桁数の評価、整理の仕方、考察の論理性に配慮して実践できる。3
実験テーマの目的に沿って実験・測定結果の妥当性など実験データについて論理的な考察ができる。3
実験ノートや実験レポートの記載方法に沿ってレポート作成を実践できる。3
実験データを適切なグラフや図、表など用いて表現できる。3
実験の考察などに必要な文献、参考資料などを収集できる。3
個人・複数名での実験・実習であっても役割を意識して主体的に取り組むことができる。3
レポートを期限内に提出できるように計画を立て、それを実践できる。3
専門的能力分野別の専門工学機械系分野情報処理プログラムを実行するための手順を理解し、操作できる。4
定数と変数を説明できる。4
整数型、実数型、文字型などのデータ型を説明できる。4
演算子の種類と優先順位を理解し、適用できる。4
算術演算および比較演算のプログラムを作成できる。4
データを入力し、結果を出力するプログラムを作成できる。4
条件判断プログラムを作成できる。4
繰り返し処理プログラムを作成できる。4
一次元配列を使ったプログラムを作成できる。4
情報系分野プログラミング代入や演算子の概念を理解し、式を記述できる。4
プロシージャ(または、関数、サブルーチンなど)の概念を理解し、これらを含むプログラムを記述できる。4
変数の概念を説明できる。4
データ型の概念を説明できる。4
制御構造の概念を理解し、条件分岐を記述できる。4
制御構造の概念を理解し、反復処理を記述できる。4
与えられた問題に対して、それを解決するためのソースプログラムを記述できる。3
ソフトウェア生成に必要なツールを使い、ソースプログラムをロードモジュールに変換して実行できる。4
与えられたソースプログラムを解析し、プログラムの動作を予測することができる。3
要求仕様に従って、標準的な手法により実行効率を考慮したプログラムを設計できる。3
要求仕様に従って、いずれかの手法により動作するプログラムを設計することができる。3
要求仕様に従って、いずれかの手法により動作するプログラムを実装することができる。4
要求仕様に従って、標準的な手法により実行効率を考慮したプログラムを実装できる。3
ソフトウェアアルゴリズムの概念を説明できる。4
与えられたアルゴリズムが問題を解決していく過程を説明できる。4
同一の問題に対し、それを解決できる複数のアルゴリズムが存在しうることを説明できる。4
整列、探索など、基本的なアルゴリズムについて説明できる。4
時間計算量によってアルゴリズムを比較・評価できることを説明できる。3
領域計算量などによってアルゴリズムを比較・評価できることを説明できる。3
コンピュータ内部でデータを表現する方法(データ構造)にはバリエーションがあることを説明できる。3
同一の問題に対し、選択したデータ構造によってアルゴリズムが変化しうることを説明できる。3
リスト構造、スタック、キュー、木構造などの基本的なデータ構造の概念と操作を説明できる。4
リスト構造、スタック、キュー、木構造などの基本的なデータ構造を実装することができる。4

評価割合

試験実技試験相互評価態度ポートフォリオその他合計
総合評価割合50500000100
基礎的能力2030000050
専門的能力3020000050
分野横断的能力0000000