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

講義詳細

年度・期
2005年度・後期
開講部局名
工学部
使用言語
日本語
教員/講師名
奥乃 博(教授)
備考
・TUT Scheme (湯淺先生小宮先生開発)を使用して講義を進める。 ・当該年度の授業回数などに応じて一部省略、追加がありうる。 ・2〜3回のプログラム演習・レポートを課す。中間テストを行う場合もある。 ・習熟度の早い学生に対しては、参考書を使ってより高度な随意課題を課す等の配慮を行う。 ・古典力学に興味のある学生Gerald Jay Sussmanらの著書"Structure and Interpretation of Classical Mechanics" (MIT Press, 2001) を本講義の続きとして独習することを勧める。 ・オンライン版フルテキスト (MIT Press 提供)

シラバス

開講年度・開講期 2005・後期 配当学年 工学部情報学科第1学年
教員
奥乃 博(教授)
授業の概要・目的
コンピュータ上で計算を行うプログラムはデータ構造とアルゴリズムから構成される.本講義では,プログラミングについてコンピュータサイエンスの立場から論じる。使用するプログラミング言語は Scheme であり、基本的なプログラミングの概念について学ぶとともに、実際にプログラミングを経験することを通じて、プログラミングの本質を習得することを狙う。

なお、本講義では教科書の前半の話題を取り上げ、後半は「プログラミング言語」 (湯淺先生, 第2学年前期配当)で取り上げる。
授業計画と内容
1章 手続きによる抽象化 ( 3 回 )

1.1章 プログラミングの要素
1.2章 手続きとその生成するプロセス
1.3章 抽象化の高階手続きによる形式化

2章 データによる抽象化 ( 4 回 )

2.1章 データ抽象化とは
2.2章 階層データ構造と閉包性
2.3章 記号データ
2.4章 抽象データの多重表現
2.5章 汎用演算のシステム

3章 モジュラー性・オブジェクト・状態 ( 4 回 )

3.1章 代入と局所状態
3.2章 評価の環境モデル
3.3章 可変データでのモデル化
3.4章 同時性
3.5章 ストリーム

ソーティング(整列)アルゴリズム ( 3 回 )

・ 整列アルゴリズムの設計と解析
・ 挿入ソート・選択ソート・シェルソート
・ クイックソートとピボットの選択法
・ ヒープソート・マージソート
・ 辞書式順序・バケットソート・基数ソート

第1回 プログラムの構築
第2回 TUT Scheme の 使い方
第3回 プログラムの構築
第4回 手続きとその生成するプロセス
第5回 手続きとその生成するプロセス
第6回 抽象化の高階手続きによる形式化
第7回 抽象化の高階手続きによる形式化・データ抽象化とは
第8回 データ抽象化とは・階層データ構造と閉包性
第9回 階層データ構造と閉包性
第10回 記号データ
第11回 抽象データの多重表現
第12回 記号データ・汎用演算のシステム
第13回 学術情報メディアセンターでの TUS/Tk の使い方
授業外学習(予習・復習)等
【必修課題1】
「コンピュータの歴史」について調査し、最低5枚のレポートとして提出。 分からない用語等は、用語集をつけること。
レポートの内容について、講義中に質問をし、理解度を確認することがある。 また、レベルの低いレポートは、再提出させる。

【必修課題2】
第2章までのすべての練習問題
動作確認していないものは減点。

【必修課題3】
図形言語
1 気のきいた painter を1種類作れ。(painter λ のプログラム)
2 空間充填曲線を1種類作れ。(例. 右図のHilbert curve, Peano curve)
3 フラクタルを1種類作れ。(例. Koch curve, Snowflake, Sierpinski's Gasket)
・tustk2 の使い方
・必修課題3のヒント
・作品集 (New)

【随意課題1】
Participate ACM Inter-University Programming Contest

【随意課題2】
Fixed-Point 探索の過程をグラフに表示せよ。

【随意課題3】
これはすごいという抽象化を使った Scheme プログラム。例えば、
・整数論・群論・組合せ論
・線形計画法・古典力学
・パズル解法・ゲーム

【随意課題4】
図形言語の frame を円板にして、Escher の circle-limit を作成。

随意課題を提出し、その内容があるレベルを越えており、さらに、試験・レポートが最低合格点を満たしていた場合には、最終成績を1ランクあるいは2ランク上げます。ただし、上限は100点です。
教科書・参考書等
[教科書]

・ジェラルド・サスマン他著(和田英一訳): 『計算機プログラムの構造と解釈』 (ピアソン・エデュケーション);訳者(東京大学名誉教授・IIJ研究所所長)

・原著 "Structure and Interpretation of Computer Programs"(MIT Press)を薦める。オンライン版フルテキスト(MIT Press 提供)

[参考書]

・ジョン・ベントリー(小林健一郎訳):『珠玉のプログラミング-本質を見抜いたアルゴリズムとデータ構造』(ピアソン・エデュケーション)

・原著『Programming Pearls』(ACM Press)を薦める。
PAGE TOP