2009/10/16 いろいろなデータ構造 第3講: 平成21年10月16日 (金) 4限 E252教室 コンピュータアルゴリズム.

Slides:



Advertisements
Similar presentations
区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
Advertisements

基本情報技術概論 I 演習(第5回) 埼玉大学 理工学研究科 堀山 貴史
データ構造とアルゴリズム 平成20年度 前期 2年生必修  水曜日 3-4時限.
Generic programming と STL
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
ヒープソートの演習 第13回.
5.データ構造入門 5-1.連結リスト(Linked List) 5-2.スタック(Stack) 5-3.キュー(Queue)
第8講: 平成19年11月9日 (金) 4限 E252教室 探索アルゴリズム(1).
第11回 整列 ~ バケットソート,基数ソート,ヒープソート~
2009/10/30 整列アルゴリズム (2) 第5講: 平成21年10月30日 (金) 4限 E252教室 コンピュータアルゴリズム.
On the Enumeration of Colored Trees
基本情報技術概論(第4回) 埼玉大学 理工学研究科 堀山 貴史
2章 データ構造.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
2009/10/9 良いアルゴリズムとは 第2講: 平成21年10月9日 (金) 4限 E252教室 コンピュータアルゴリズム.
情報工学概論 (アルゴリズムとデータ構造)
アルゴリズムとデータ構造 第3回基本的なデータ構造(リスト) 2015/10/28 アルゴリズムとデータ構造 2015.
探索アルゴリズム (1) 第7講: 平成21年11月13日 (金) 4限 E252教室.
データ構造とアルゴリズム 第6回の2 木 ~ データ構造(3)~.
第11講: 平成18年12月 8日 (金) 4限 E352教室 グラフ (1).
データ構造とアルゴリズム 第13回 スタックとキュー
アルゴリズムと データ構造 第4回 スタック・キュー.
第4章 空間解析 2.ネットワーク分析 (3) ネットワーク構造分析
エージェントを管理するボスの苦悩 問題 n人のエージェントを部下に持つボスがいる. エージェントは出張・帰還を頻繁に繰り返す.
アルゴリズムとデータ構造 第4回 配列によるスタックとキュー.
①データ構造 ②アルゴリズム ③プログラム言語 ④マークアップ言語
ヒープソートの復習.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
第3回 配列,構造体,ポインタ ~ データ構造について学ぶための基礎~
二分探索木によるサーチ.
データ構造とアルゴリズム 第4回 リスト ~ データ構造(1)~.
アルゴリズムとデータ構造1 2005年7月26日
データ構造とアルゴリズム 第6回 キュー ~ データ構造(2)~.
データ構造と アルゴリズム第4回 知能情報学メジャー 和田俊和.
第9回 優先度つき待ち行列,ヒープ,二分探索木
アルゴリズムとデータ構造1 2005年7月1日
データ構造と アルゴリズム 第六回 知能情報学部 新田直也.
基本情報技術概論(第6回) 埼玉大学 理工学研究科 堀山 貴史
Cプログラミング演習 第10回 二分探索木.
2009/10/23 整列アルゴリズム (1) 第4講: 平成21年10月23日 (金) 4限 E252教室 コンピュータアルゴリズム.
プログラミング 4 木構造とヒープ.
プログラミング 3 スタックとキュー.
明星大学 情報学科 2012年度 後期   情報技術Ⅱ   第8回
アルゴリズムとデータ構造 2011年7月8日課題の復習
スタックとキュー データ構造とプログラミング (第5回).
基本情報技術概論I (第4回) 埼玉大学 理工学研究科 堀山 貴史
6.データ構造入門 6-1.連結リスト(Linked List) 6-2.スタック(Stack) 6-3.キュー(Queue)
15.cons と種々のデータ構造.
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分の復習
情報数理Ⅱ 第11章 データ構造 平成29年1月18日.
基本情報技術概論(第10回) 埼玉大学 理工学研究科 堀山 貴史
データ構造とアルゴリズム (第3回) 静岡大学工学部 安藤和敏
第9回 優先度つき待ち行列,ヒープ,二分探索木
アルゴリズムとデータ構造 2012年7月2日
基本情報技術概論(第6回) 埼玉大学 理工学研究科 堀山 貴史
ヒープソートの復習 第12回.
情報工学概論 (アルゴリズムとデータ構造)
第11回放送授業.
アルゴリズムとデータ構造 2013年7月2日
2009/11/27 グラフ (1) 第9講: 平成21年11月27日 (金) 4限 E252教室 コンピュータアルゴリズム.
アルゴリズムとデータ構造 第2章 リスト構造 5月24日分
pf-6. スタック (Python プログラミング基礎を演習で学ぶシリーズ)
4.プッシュダウンオートマトンと 文脈自由文法の等価性
ヒープソート.
参考:大きい要素の処理.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
データ構造と アルゴリズムI 第三回 知能情報学部 新田直也.
プログラミング入門2 第5回 配列 変数宣言、初期化について
TList リスト構造とは? 複数のデータを扱うために、 データの内容と、次のデータへのポインタを持つ構造体を使う。
Presentation transcript:

2009/10/16 いろいろなデータ構造 第3講: 平成21年10月16日 (金) 4限 E252教室 コンピュータアルゴリズム

第 1 講の復習 アルゴリズムの定義 ユークリッドの互除法 フローチャートの描き方 擬似言語の書き方 入力と出力 正当性,決定性,有限性,停止性 ユークリッドの互除法 フローチャートの描き方 擬似言語の書き方 2009/10/16 第3講 いろいろなデータ構造

第 2 講の復習 アルゴリズムの評価は時間計算量で行う 計算量の評価にはオーダー記法を使う 多項式オーダーと指数オーダー 再帰プログラム 領域計算量もある 計算量の評価にはオーダー記法を使う 並んでいる計算量は足し算 繰り返しに含まれる計算量は掛け算 係数は省略する 多項式オーダーと指数オーダー 指数オーダーのアルゴリズムは使い物にならない 再帰プログラム 2009/10/16 第3講 いろいろなデータ構造

今日の講義の内容 データ構造(抽象データ型)の紹介 配列 リスト キュー(待ち行列) スタック 木 2009/10/16 第3講 いろいろなデータ構造

データ構造とは データを計算機内部でどのように表現するか 良いアルゴリズムを作成するには,問題に適したデータ構造が必要 抽象データ型 データのメモリ上の表現方法 Data Structure 良いアルゴリズムを作成するには,問題に適したデータ構造が必要 抽象データ型 データ構造をその表現と扱う手続きの集合で一まとまりで表現したもの 2009/10/16 第3講 いろいろなデータ構造

列(Sequence) 同じ種類のデータが 1 列に並んだもの 中身のデータと並び方の両方に意味がある 列は抽象的な概念 = 抽象データ型 {1, 2, 3} と {1, 3, 2} は違う列 列は抽象的な概念 = 抽象データ型 プログラムでは何らかのデータ構造で表現 配列,リスト 列に対する操作を限定したデータ構造も存在 キュー,スタック 2009/10/16 第3講 いろいろなデータ構造

配列(Array) 列を表現するデータ構造の 1 つ 同じ型のデータを決まった個数だけ並べた構造 C 言語での配列の作成 int a[100] ; 整数型,100個の配列 番号(添字)を指定して要素を参照 参照操作の計算量は O(1) データの挿入・削除は最悪 O(n) 要素を移動する操作が必要なため 2009/10/16 第3講 いろいろなデータ構造

配列(Array)の操作 参照 挿入,削除 直接参照可能 O(1) 添字 データ 参照 直接参照可能 a[3],a[7] O(1) 挿入,削除 a[4] と a[5] の間にデータを挿入するには,a[5] ~ a[10] をそれぞれ a[6] ~ a[11] にずらす必要がある 削除も同様 O(n) 3 1 8 2 2 3 7 4 15 5 12 6 6 7 9 8 23 9 11 10 2009/10/16 第3講 いろいろなデータ構造

リスト(list) リスト: list, linked list, linear list (線形リスト) データを入れた箱をポインタでつないだもの 2 個の箱からなり,1 つは要素のデータ,もう 1 つは次の要素を指すポインタをいれる ランダムアクセスの機能がない k 番目の要素を参照する計算量は O(n) 先頭から辿らないといけない listhead 実際は次の要素の番地を指す 10番地 15番地 13番地 15 13 2009/10/16 第3講 いろいろなデータ構造

リスト(list)の操作 リストはデータの挿入・削除が容易 データの挿入・削除の計算量は O(1) つなぎかえるだけで良い listhead ③ リストのつなぎかえ ② 新しい要素をつなげる ① 要素を作成 2009/10/16 第3講 いろいろなデータ構造

そのほかのリスト (1) 環状リスト: Circular list,循環リスト,巡回リスト 最後の要素が先頭の要素を指す 列の端に意味がない場合に有効 listhead 2009/10/16 第3講 いろいろなデータ構造

そのほかのリスト (2) 双方向リスト: doubly-linked list 各要素に 2 つのポインタを用意し,前後の要素を指すようにしたもの 双方向かつ環状リストも可能 listhead 2009/10/16 第3講 いろいろなデータ構造

キュー(待ち行列,queue) データの追加を列の一方の端から行い,取り出しをもう一方の端から行う列 先入れ先出し: FIFO (First-In-First-Out) 必要な操作は 4 つ ClearQueue: 待ち行列を初期化 EnterQueue: 待ち行列に値を追加 RemoveQueue: 待ち行列から値を取り出す EmptyQueue: 待ち行列が空かどうかを判定 Queue 5 7 2 4 2009/10/16 第3講 いろいろなデータ構造

キュー(queue)の実現 リストによる実現 queuetail queuehead 値の取り出し 値の追加 queuetail 2009/10/16 第3講 いろいろなデータ構造

スタック(stack) スタック: Stack,Push-down Stack データの追加・取出しを一方の端だけで行う列 後入れ先出し: LIFO (Last-In-First-Out) 必要な操作は 3 つ ClearStack: スタックを初期化 Push: スタックに値を追加.押込み,プッシュ,プッシュダウン(Push Down) Pop: スタックから値を取り出す.跳ね上げ,ポップ,ポップアップ(Pop Up) 2009/10/16 第3講 いろいろなデータ構造

スタック(stack)の動作 具体例:書類の山 5 8 8 プッシュ プッシュ ポップ 5 8 5 5 初期化 2009/10/16 第3講 いろいろなデータ構造

木(Tree) 頂点(Vertex,Node,節点)と枝(Branch Edge,Arc,辺)から構成される 一番上の頂点を根(Root)と呼ぶ 枝の上側の頂点を親(Parent), 下側の頂点を子(Child)と呼ぶ ある頂点から見て親, 親の親などをまとめて 祖先(Ancestor)と呼ぶ ある頂点から見て子, 子の子などをまとめて 子孫(Descendant)と呼ぶ 根 親 子 子 2009/10/16 第3講 いろいろなデータ構造

木(Tree) 子を持たない頂点を葉(Leaf)または 終端頂点(Terminal Node)と呼ぶ 子を持つ頂点を非終端頂点 (Nonterminal Node)と呼ぶ 根からある頂点までの枝の数を 深さ(Depth)と呼ぶ 根から最も遠い頂点の深さを 木の高さ(Height)と呼ぶ 各頂点の子の数が高々 2 で ある木を 2 分木(Binary Tree, 2 進木)と呼ぶ 根 深さ 高さ 葉 葉 葉 非終端頂点 2009/10/16 第3講 いろいろなデータ構造

木(Tree)の実現 2 分木の場合 2 つの子を指すポインタとデータをいれる箱で実現 5 3 8 1 4 5 3 8 1 4 2009/10/16 第3講 いろいろなデータ構造

木(Tree)の実現 一般の木 子の数に制限がない 子の頂点をリストにつなぐ 5 3 8 1 2 4 9 5 3 8 1 2 4 9 2009/10/16 第3講 いろいろなデータ構造

第 3 講のまとめ アルゴリズムとデータ構造 基本的なデータ構造(抽象データ型) アルゴリズムに適したデータ構造の選択が必要 配列 リスト キュー(待ち行列) スタック 木 2009/10/16 第3講 いろいろなデータ構造