180 likes | 338 Views
アルゴリズムとデータ構造 1. 2005 年 6 月 10 日 酒居敬一 ( sakai.keiichi@kochi-tech.ac.jp ) http://www.info.kochi-tech.ac.jp/k1sakai/Lecture/ALG2005/index.html. 連絡先. 酒居 居室 : A468 メイル : sakai.keiichi@kochi-tech.ac.jp TA( 福家君 ) メイル : fuk@kikuken.org. テキスト 『 アルゴリズムとデータ構造 』 , 石畑清著 ( 岩波書店 )
E N D
アルゴリズムとデータ構造1 2005年6月10日 酒居敬一(sakai.keiichi@kochi-tech.ac.jp) http://www.info.kochi-tech.ac.jp/k1sakai/Lecture/ALG2005/index.html
連絡先 • 酒居 • 居室: A468 • メイル: sakai.keiichi@kochi-tech.ac.jp • TA(福家君) • メイル: fuk@kikuken.org
テキスト『アルゴリズムとデータ構造』, 石畑清著(岩波書店)テキスト『アルゴリズムとデータ構造』, 石畑清著(岩波書店) 参考書『Javaで学ぶアルゴリズムとデータ構造』,Robert Lafore著,岩谷宏訳(ソフトバンク)『Javaによるプログラミング入門』, 権藤克彦著(サイエンス社,2000)『Javaによるオブジェクト指向プログラミング入門』, 越田一郎(培風館)『プログラミング作法』,Brian Kernighan, Rob Pike著(アスキー)
講義計画 • アルゴリズムとデータ構造入門 • アルゴリズムとデータ構造基礎[演習1]アルゴリズムとデータ構造の概念,オブジェクト指向の概念 • アルゴリズムとデータ構造概要1 • アルゴリズムとデータ構造概要2 • 配列 [演習2] 配列のような基本的なデータ構造 • スタック • 待ち行列 • 連結リスト[中間試験] データ構造やアルゴリズムや計算量の概念,線形なデータ構造とアルゴリズム • 二分木 • ハッシュ • ソート[演習3] 二分木,ハッシュ • 探索 • 再帰的アルゴリズム • くり返し処理と再帰的処理[演習4] 全体の復習,検索や再帰 • [クォータ末試験](7月30日の予定)
専門科目演習日程 • 場所はA101 • 火曜か金曜の5時限目 • 演習日(予定) 6月14日、6月24日、7月5日、7月15日、7月26日 • 教科書(岩波のやつ)を必ず持ってくること。
成績評価 • 計100点.60点以上を合格とする. • 演習課題40点(各10点×4回) • (演習の1回を充てる)中間試験30点 • クォータ末試験30点 • 試験や演習で持ち込めるもの • 教科書・ノート・配布資料 • 再試験はしない.
本講義の位置づけ • 計算機言語(第1と第2)、情報システム工学実験1 • 表面的には書き方(コーディング)の演習 • 背景には表現方法としてのプログラミング言語を習得 • 情報システム工学実験2 • コーディングだけではやっていけない • なぜか? 本授業で説明
プログラムとは? • アルゴリズムとデータ構造を表現したもの • 表現方法にはいっぱいある • プログラミング言語の数だけ • 構造体やレコードといったデータ構造 • 条件文や繰り返し文といった制御構造
アルゴリズムとデータ構造入門 • アルゴリズムとデータ構造の役割 • データとは? • 処理とは? • 構造とは? • なぜ、アルゴリズムとデータ構造について学習するのか
データとは? • 現象や性質を何らかの枠組みに従って形式化したもの • 身長、体重、座高、視力 • 家族構成、居住地、居住形態 • CDに記録されている音
処理とは? • 物事をさばいて始末をつけること。 • 対象を分析する • 準備する • スケジュールをたてる、データを整理する、など • 仕事する • 決められた手順でこなす • 後片付けする 「段取り八分仕事二分」
構造とは? • 全体を形づくっている種々の材料による各部分の組み合わせ。作りや仕組み。 • さまざまな要素が相互に関連し合って作り上げている総体。また、各要素の相互関係。 • 階層的な構造わかりやすい文書やプログラム
データ構造 • ひとつまたは複数のデータを編成し保持する構造のこと • データ構造どうしは関連している • 例:このppt原稿(?) • タイトル(アルゴリズムとデータ構造1) • 見出し • 箇条書きの内容
アルゴリズム • アルゴリズムは必ず問題を解決するもの • いつかは停止しないといけない • ひとつまたは複数のデータを操作し目的の結果を得るための一連の処理手順 • 例: 交差点を渡りたい(=問題) • 信号があるか? • 信号がないならば、どうするか?
なぜ学習するか? • すばやくコーディングするため • 美しいコードを書くため • わかりやすいコードにするため • どのように表現するか、どのように処理し目的を達成するか、を理解する
すばやくコーディングする • よくしられたものを使う • さがせばどこかに実装が存在する • あるものを使えばデバグの手間がはぶける • 全体をよく考えて、よく知られたものが使えるようにする • そのために勉強する!
美しいコード • 洗練されたコードは美しい • 適切なアルゴリズム • 適切なデータ構造 • コーディング規則の外側に美しさがある • 人間が読み書きするものであることを肝に銘じて • きちゃないコードは読む気がするか?
わかりやすいコード • 構造がわかりやすい • よくしられたデータ構造 • よくしられたアルゴリズム • これらの再帰的な組み合わせ • 構造がプログラミング言語の自然なデータ型や制御文に合っている • プログラムの共有ができる • 3日後の自分は他人と同じ