“Purely Functional Data Structures” セミナー

Slides:



Advertisements
Similar presentations
Lecture02-Binary Search Trees 通信情報システム専攻 岩間伊藤研究室 M1 前田圭介.
Advertisements

区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
4.3 マージソート.
離散システム特論 整列(sorting)アルゴリズム 2.
ヒープソートの演習 第13回.
20分でわかる Purely Functional Data Structures
2 分探索木 Binary Search Tree 実行可能な操作 計算量 木の高さは,最悪 O(n) n = |A| : 要素の個数
アルゴリズムとデータ構造 第8回 ソート(3).
2分探索.
アルゴリズムとデータ構造 2013年6月18日
アルゴリズムとデータ構造1 2005年7月8日
アルゴリズムとデータ構造 2010年7月5日
On the Enumeration of Colored Trees
情報工学概論 (アルゴリズムとデータ構造)
型宣言 (Type Declarations)
アルゴリズムとデータ構造 2012年6月14日
型宣言(Type Declarations)
東京大学大学院情報理工学系研究科 数理情報学専攻 定兼 邦彦 2016年4月7日
岩井 儀雄 コンピュータ基礎演習  ー探索、整列ー 岩井 儀雄
第7章 データベース管理システム 7.1 データベース管理システムの概要 7.2 データベースの格納方式 7.3 問合せ処理.
データ構造とアルゴリズム 第6回の2 木 ~ データ構造(3)~.
エージェントを管理するボスの苦悩 問題 n人のエージェントを部下に持つボスがいる. エージェントは出張・帰還を頻繁に繰り返す.
ヒープソートの復習.
データ構造と アルゴリズム 第八回 知能情報学部 新田直也.
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
大岩 元 慶応大学環境情報学部 二分木 データ構造とプログラミング(10) 大岩 元 慶応大学環境情報学部
アルゴリズムとデータ構造 2011年6月14日
アルゴリズムとデータ構造 第7回探索のためのデータ構造(1) 2015/11/18 アルゴリズムとデータ構造 2015.
二分探索木によるサーチ.
7-3.高度な木 (平衡木) AVL木 平衡2分木。回転操作に基づくバランス回復機構により平衡を保つ。 B木
2009/10/16 いろいろなデータ構造 第3講: 平成21年10月16日 (金) 4限 E252教室 コンピュータアルゴリズム.
算法数理工学 第3回 定兼 邦彦.
PROGRAMMING IN HASKELL
決定木とランダムフォレスト 和田 俊和.
アルゴリズムとデータ構造1 2005年7月26日
アルゴリズムとデータ構造1 2006年7月4日
1 T 行きがけ順: A B D F I J C G H 通りがけ順: D B I F J A G C H
アルゴリズムとデータ構造1 2006年6月16日
情報工学概論 (アルゴリズムとデータ構造)
二分木のメソッド(続き).
アルゴリズムとデータ構造 第3章 ヒープ 6月10日分
第9回 優先度つき待ち行列,ヒープ,二分探索木
データ構造と アルゴリズム 第六回 知能情報学部 新田直也.
基本情報技術概論(第6回) 埼玉大学 理工学研究科 堀山 貴史
Cプログラミング演習 第10回 二分探索木.
ATTAPL輪講 (第4回) 続 Dependent Types
プログラミング 4 木構造とヒープ.
Eliminating Amortizations PurelyFunctionalDataStrctures 輪講 第6回
15.cons と種々のデータ構造.
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分
情報知能学科「アルゴリズムとデータ構造」
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分の復習
情報数理Ⅱ 第11章 データ構造 平成29年1月18日.
データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏
AVL木.
第9回 優先度つき待ち行列,ヒープ,二分探索木
アルゴリズムとデータ構造 2011年6月16日
基本情報技術概論(第6回) 埼玉大学 理工学研究科 堀山 貴史
ヒープソートの復習 第12回.
情報工学概論 (アルゴリズムとデータ構造)
Advanced Data Structure 第3回
アルゴリズムとデータ構造1 2009年7月2日
アルゴリズムとデータ構造 第2章 リスト構造 5月24日分
ヒープソート.
18. Case Study : Imperative Objects
ヒープソート.
アルゴリズムとデータ構造 2013年6月20日
7.木構造 7-1.データ構造としての木 7-2.2分探索木 7-3.高度な木.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
Presentation transcript:

“Purely Functional Data Structures” セミナー いなば 2006/05/12

今日の予定 Chapter 1. Introduction Chapter 2. Persistence Chapter 3. Some Familiar Data Structures in a Functional Setting

関数型データ構造とは 関数型 (functional) データ構造とは何か? 手続き型 (imperative) データ構造との違いは? 実装者側から見ると… 破壊的更新(destructive update)、 つまり代入(assignment)を使わない 使用者側から見ると… 永続的 (persistent) である

例1: List (黒板で説明) “append xs ys” 関数を考える “update” Functional だと、O( |xs| ) Imperative なら、自明に O(1) にできる しかし元の xs は壊れる Functional なら元のxs,ysもxs@ysもそのまま使える Persistant “update” 同様

例2: Binary Search Tree (MySet.ml)

評価戦略: Strict vs. Lazy 正格 (Strict) 評価 遅延 (Lazy) 評価 関数の引数は、呼び出し前に全て評価される 最悪計算量 遅延 (Lazy) 評価 関数の引数は、その値が実際に必要になって初めて評価される 償却(amortized)計算量 詳しくは Chapter 4 以降で

用語の定義 Abstraction Implementation Object / Version Persistent Identity 型と、型上の操作関数の集まり Abstract Data Type ML でいう、モジュールの signature Implementation ADTを実際に実現したデータ型と関数の集まり ML でいう、モジュールの structure や functor Object / Version Implementation の実際のインスタンス ML でいう、普通の value Persistent Identity Informal な “同じ”データという概念

Chapter 3 おなじみのデータ構造を関数型言語で実装 Leftist Heap Binomial Heap Red-Black Tree

Leftist Heap Priority Queue Heap / 半順序木 Leftist Heap 以下の操作が(効率的に)可能な集合を表すデータ構造 最小要素の取得 最小要素の削除 新しい要素の挿入 Heap / 半順序木 二分木 親ノードの値 ≦ 子ノードの値 を満たす木 最小の要素を O(1) で取得できる Leftist Heap 左の子のrank ≧ 右の子のrank を満たすHeap rank := right spine の長さ 「要素数nのLeftist HeapのRight Spineの長さはたかだか log(n+1)」

Leftist Heap (MyHeap.ml) insert : O(log n) merge ; O(log n) deleteMin : O(log n) findMin : O(1)

Binomial Heap Tree の List による Priority Queue の実装 自然数の「2進数表現」に類似 この手法については Chapter9 で詳しく (黒板で説明) (MyHeap.ml) insert : O(log n) merge ; O(log n) deleteMin : O(log n) findMin : O(log n) ExplicitMin findMin : O(1)

Red Black Tree Binary Search Tree のバランスを保つ技法 「赤」ノードと「黒」ノード 「赤」ノードは「赤」い子を持たない亜 全ての根から葉までのパスの「黒」の個数は等しい Prop. 高さの差はたかだか2倍 (MySet.ml)

おしまい