アルゴリズムとデータ構造1 2006年6月6日 担当:酒居敬一@A468([email protected]) TA:小糸啓介@A310([email protected]) http://www.info.kochi-tech.ac.jp/k1sakai/Lecture/ALG/2006/index.html テキスト 『アルゴリズムとデータ構造』, 石畑清 著(岩波書店) 参考書 『アルゴリズムとデータ構造』, 平田富夫 著(森北出版). 『アルゴリズムとデータ構造入門』, 東野勝治,臼田昭司 著(森北出版). 『ハッカーのたのしみ』, H.S.ウォーレン Jr 著,滝沢徹,鈴木貢, 赤池英夫,葛毅,藤波順久,玉井浩訳(星雲社) 『プログラミング言語C』, B.W.カーニハン,D.M.リッチー 著, 石田晴久 訳(共立出版). 講義計画 1. 2. アルゴリズムとデータ構造入門(6月6日2時限) アルゴリズムとデータ構造基礎(6月9日2時限) • 演習(6月12日4時限) 3. メモリとデータ構造(6月13日2時限) 4. プログラムとアルゴリズム(6月16日2時限) 5. 配列(6月20日2時限) • 演習(6月22日4時限) 6. 連結リスト(6月23日2時限) 7. スタック(6月27日2時限) 8. 待ち行列(6月30日2時限) • 演習(7月3日4時限) 9. 二分木(7月4日2時限) 10. 探索(7月7日2時限) 11. ハッシュ(7月11日2時限) • 演習(7月13日4時限) 12. ソート(7月14日2時限) 13. 再帰的アルゴリズム(7月21日2時限) 14. くり返し処理と再帰的処理(7月24日4時限) • 演習(7月25日2時限) 15. [クォータ末試験](7月28日2時限) 成績評価 • クオータ末試験および演習を総合的に 評価する. • 試験や演習で持ち込めるもの – 教科書・ノート・配布資料 • 再試験はしない. 本講義の位置づけ 1. プログラムの勉強(技術的な知識) 計算機言語(第1、第2)、実験1 背景は、表現方法としてのプログラミング言語 2. アルゴリズムとデータ構造(抽象的な知識) 計算機システムの基礎 数学と計算法(計算機はΣや∫を知らない) 3. 計算機のしくみの勉強(低水準の知識) 情報システム工学実験2、計算機アーキテクチャ コーディング対象を知る 4. システム設計の勉強(高水準の知識) ソフトウェア工学、オペレーティングシステム アルゴリズム+データ構造=プログラム (このように書くのは簡単) アルゴリズムとデータ構造 この間があまりにも遠いのが現実 具体化 間を埋めるもの→想像力 想像力を増やす→経験を積む 経験を積むには→楽しさが必要 楽しさって何? 抽象化 書いたとおり動くのが救い プログラム(Java, C,…) プログラムとは? • アルゴリズムとデータ構造を表現したもの – 表現方法にはいっぱいある • プログラミング言語の数だけ – 構造体やレコードといったデータ構造 – 連接や条件文や繰り返し文といった制御構造 • 計算機に仕事をさせる指示・手続き – 計算機は指示通りに動くように作られている • 動かない場合も稀にある… (教科書2ページ) アルゴリズムとデータ構造入門 • アルゴリズムとデータ構造の役割 – データとは? – 処理とは? – 構造とは? • なぜ、アルゴリズムとデータ構造について 学習するのか データとは? • 現象や性質を何らかの枠組みに従って形 式化したもの – 身長、体重、座高、視力 – 家族構成、居住地、居住形態 – CDに記録されている音 処理とは? • 物事をさばいて始末をつけること。 – 対象を分析する – 準備する • スケジュールをたてる、データを整理する、など – 仕事する • 決められた手順でこなす – 後片付けする 「段取り八分仕事二分」 構造とは? • 全体を形づくっている種々の材料による各 部分の組み合わせ。作りや仕組み。 • さまざまな要素が相互に関連し合って作り 上げている総体。また、各要素の相互関係。 • 階層的な構造 わかりやすい文書やプログラム データ構造 • ひとつまたは複数のデータを編成し保持す る構造のこと • データ構造どうしは関連している • 計算機のメモリには構造らしい構造がない – 設計が必要だけど、その基礎がデータ構造 • 例:このppt原稿(?) – タイトル(アルゴリズムとデータ構造1) • 見出し – 箇条書きの内容 アルゴリズム • アルゴリズムは必ず問題を解決するもの – いつかは停止しないといけない • ひとつまたは複数のデータを操作し目的の 結果を得るための一連の処理手順 • 例: 交差点を渡りたい(=問題) – 信号があるか? – 信号がないならば、どうするか? なぜ学習するか? • すばやくコーディングするため • 美しいコードを書くため • わかりやすいコードにするため • どのように表現するか、どのように処理し 目的を達成するか、を理解する すばやくコーディングする • よく知られたものを使う – 探せばどこかに実装が存在する – 既存のものを使えばデバグの手間が省ける – 定番と呼ばれる書籍の存在 • 全体をよく考えて、既存のものが使えるよ うにする – そのために勉強する! 美しいコード • 洗練されたコードは美しい – 適切なアルゴリズム – 適切なデータ構造 • コーディング規則の外側に美しさがある – 人間が読み書きするものであることを肝に銘じて – きちゃないコードは読む気がするか? わかりやすいコード • 構造がわかりやすい – よくしられたデータ構造 – よくしられたアルゴリズム – これらの再帰的な組み合わせ • 構造がプログラミング言語の自然なデータ 型や制御文に合っている • プログラムの共有ができる – 3日後の自分は他人と同じ • 記憶力のいい人は1ヶ月くらいは平気? 抽象的 vs. 具体的 • ptrで指される領域からvalueを線形探索 • for(i = n; i; i--, ptr++) if(*ptr == value) break; • mov eax,value mov edx,ptr mov ecx,n 0: cmp eax,[edx] je 1f lea edx,[edx+4] loop 0b 1:
© Copyright 2024 ExpyDoc