講義コード 9419J
講義名 アルゴリズム
(副題)
開講責任部署 全体
講義開講時期 秋学期
講義区分
基準単位数 2
時間 0.00
代表曜日 金曜日
代表時限 1時限
開講学科 情報処理学科
必選別 選択
履修セメスター 第2セメスター
その他
担当教員

職種 氏名 所属
准教授 ◎ 宮川 幹平 (指定なし)

講義概要
 コンピュータに対して、情報を処理し問題を解決させる指示・命令群をプログラム、プログラムを開発することをプログラミングと呼ぶ。本講義は、プログラミング技術を学ぶ上で不可欠となる「アルゴリズムとデータ構造」について学ぶ科目である。
 コンピュータは曖昧さを苦手とする。人間が柔軟に対処できることでも、明確な手順が指示されていなければ、コンピュータに仕事をさせることはできない。ここでいう“明確な手順”がアルゴリズムである。そしてもうひとつ、コンピュータに情報を扱わせる場合には、扱いたい情報をコンピュータ上でどのように表現するか、その構造(データ構造)も考えなければならない。プログラミングの実際においては、処理の内容や状況に応じて適切なアルゴリズムとデータ構造を検討する必要が生じる。つまり、「アルゴリズムとデータ構造」こそが、プログラムの両輪となるのである。
 本講義では、コンピュータにおける情報の処理方法についてその基本から学習し、いくつかの代表的なアルゴリズム・データ構造を例にあげながら、アルゴリズムの動きを検証・理解する方法、及びその性能評価法を学習することで、エンジニアとして必須の論理的な思考・構成能力を高める。
到達目標
(1)アルゴリズムとデータ構造とは何か、その必要性とあわせて簡単に説明できる
(2)入力・演算・代入・出力、順次・選択・繰り返しといった、基本的な処理の流れを流れ図や擬似言語で表現できる。
(3)基本的な処理の流れ(アルゴリズム)をトレースし、そのアルゴリズムの動作と意味を理解できる。
(4)探索と整列の代表的なアルゴリズムについて、そのアイデアと特徴を理解し、アルゴリズムとして表現できる。
(5)配列・リンクトリスト・スタック・キューなどの代表的なデータ構造の特徴を説明できる。
履修のポイント及び留意事項
 本授業は、情報処理技術者試験「基本情報技術者試験」における、アルゴリズム、プログラム設計、プログラム作成能力に関する内容に関係するほか、本学が実施する「基本情報技術者試験」午前試験免除認定講座の一部である。
講義日程
テーマ内容
第1週入門:アルゴリズムとデータ構造プログラミングの流れとアルゴリズム・データ構造の重要性について学ぶ。その他、信頼性や計算量など、アルゴリズムの評価指標について理解を深める。
第2週アルゴリズムの基本と構造化定理変数の概念を理解し、入力・計算と代入・出力の基本的な処理単位を組み合わせた単純なアルゴリズムを表現する。また、アルゴリズムのトレース手法について理解を深める。 その他、アルゴリズムの基本構造(順次・選択・繰り返し)と構造化定理について理解する。
第3週選択構造による条件分岐の表現比較演算・論理式の意味とあわせ、選択構造を用いた条件分岐(二分岐・多分岐)の表現方法を学ぶ。
第4週繰り返し構造と配列繰り返し構造の表現方法を学ぶ。
また、1次元配列の概念を学ぶとともに、配列の初期化や配列要素の合計など、繰り返し構造を活用した基礎的なアルゴリズムについて理解を深める。
第5週多重ループとループ制御多重ループの表現方法とその活用について、二次元配列などを例として理解を深める。
第6週演習:基本的なアルゴリズムの表現これまでの内容について演習問題を通じて理解度を確認する。例題:素数判定・ユークリッドの互除法
第7週データ構造(1)リスト構造(連結リスト・双方向リスト・順序付きリストなど)の仕組みと特徴、基本操作について学ぶ
第8週データ構造(2)スタックとキュー、グラフやツリーなどの問題解決向きデータ構造について、その特徴と基本操作を学ぶ
第9週探索(1)探索アルゴリズムとして線形探索法、番兵の活用、二分探索法のアイデアとアルゴリズムを理解する
第10週探索(2)効率的な探索を可能とするデータ構造(二分木・B木など)について理解を深める
第11週整列(1)整列の基本概念(整列キー、安定整列など)とともに、基本的な整列アルゴリズムとして「基本選択法」「基本交換法」について学ぶ。
第12週整列(2)「基本挿入法」のアルゴリズムと特徴のほか、「シェルソート」のアイデアについて学ぶ。
第13週モジュールと再帰処理をモジュール化することの利点について再確認するとともに、再帰の概念・特徴を学ぶ。また、再帰を活用したアルゴリズム表現を演習する。例題:フィボナッチ数列、べき乗
第14週整列(3)「クイックソート」のアルゴリズムとその特徴を学ぶ。
第15週整列(4)「マージソート」のアルゴリズムとその特徴を学ぶ。

他の授業科目との関連
 本授業で学んだアルゴリズムとデータ構造を、各プログラミング言語で実際に実現(実装)することは、内容理解の上で非常に重要である。ゆえに、プログラミング関係の授業「ソフトウェアデザインI~IV」「WebプログラミングI~II」を受講することを強く推奨する。特に、同セメスターに開講する「ソフトウェアデザインII」は連携授業であり、本授業と並行して履修しなければ理解が非常に困難になる。
 また、コンピュータのハードウェア・ソフトウェアに関して、「コンピュータシステム」「コンピュータ科学基礎」を履修済みであれば、さらに理解が深まるだろう。そのほか、ソフトウェア開発プロセス全体について学ぶ「システムマネジメント」を並行して履修すれば、システム開発におけるプログラミングの位置づけが一層明確になる。
評価方法
 上記到達目標に対応した定期試験の成績を基本点として成績評価を行う。
 単位取得(C以上)のためには、この定期試験で一定の点数以上を取ることと、2/3以上の出席が「必要条件」となる。また、出席と小テスト、課題、授業参加の状況によって、成績評価(A1・A2・B・C・D)の調整(最大上下1段階)を行う。
教科書
明解 Javaによるアルゴリズムとデータ構造
ソフトバンククリエイティブ
ISBN番号
ISBN-13: 978-4797345230
参考図書
スッキリわかるJava入門(インプレスジャパン)
イメージ&クレバー方式でよくわかる栢木先生の基本情報技術者教室 (技術評論社)
アルゴリズムC(新版) 著者:R.セジウィック (近代科学社)
基本情報技術者 大滝みや子先生のかんたんアルゴリズム解法 ~流れ図と擬似言語~(技術評論社)
オフィスアワー(授業相談)
随時、宮川の研究室に直接訪問して良い。Facebook(kampei.miyakawa)からの質問も歓迎する。
学生へのメッセージ
 プログラミング関係の授業にも関わらず、座学であることに違和感を感じるかもしれない。闇雲にコンピュータの前に座ってキーボードを叩いているだけでは、良いプログラムを作成することはできないということを、この授業を通じて理解して欲しい。
 プログラマやシステムエンジニア、もしくは情報工学分野への進学を検討している学生には受講を強く推奨する。
準備学習の内容
テキストについて、次回の学習する範囲に対応する部分については必ず読み込んでおくこと。授業内において、テキストを端から端まで読むようなことはしない。
授業用URL
https://www.facebook.com/kampei.miyakawa
授業用E-mail
miyakawa@ftokai-u.ac.jp