Data.Mapについて
  @dekosuke
はじめに




 高速でPureなTree、Data.Mapについて
 Purely Funcional Data Structure で説明されてい
  た赤黒木とはまた別の平衡木




                                       2
参考文献



 http://www.haskell.org/ghc/docs/6.12.2/html/libr
  aries/containers-0.3.0.0/Data-Map.html
 http://groups.csail.mit.edu/mac/users/adams/BB
  /




                                                3
構造


    data Map k a = Tip
           | Bin {-# UNPACK #-}
             !Size !k a !(Map k a) !(Map k a)


 UnBox/正格フラグ
 木のサイズを各枝が知っている -> SizeもO(1)




                                                4
平衡条件

大きい側が小さい側のw倍 (Data.Mapだとdeltaに
なっているけど) を超えない




要素の挿入・削除後にbalance関数を1度呼んで
平衡を保つ
                             5
balance

delta,ratio :: Int
delta = 5 -- 大 < delta * 小
ratio = 2 -- 回転がSingleかDoubleか決定

balance :: k -> a -> Map k a -> Map k a -> Map k a
balance k x l r
 | sizeL + sizeR <= 1 = Bin sizeX k x l r
 | sizeR >= delta*sizeL = rotateL k x l r
 | sizeL >= delta*sizeR = rotateR k x l r
 | otherwise          = Bin sizeX k x l r

                                                     6
rotation


 Single Rotation と Double Rotation の2つある
 Singleのほうが効果大きい

rotateL :: a -> b -> Map a b -> Map a b -> Map a b
rotateL k x l r@(Bin _ _ _ ly ry)
 | size ly < ratio*size ry = singleL k x l r
 | otherwise = doubleL k x l r rotateL _ _ _ Tip =
error "rotateL Tip"
                           ※lyとry は右木のSubtreeです

                                                     7
Single Rotation




                  8
Double Rotation




                  9
パラメータ条件




   論文参照
    http://groups.csail.mit.edu/mac/users/adams/BB/
   Data.Mapでは delta=5 ratio=2




                                                      10
集合演算




 Union, Difference, Intersection
 すべてO(n+m) (nとmはそれぞれの木のサイズ)




                                    11
End

More Related Content

PDF
TEDx Manchester: AI & The Future of Work
KEY
スマートフォンについて その1
KEY
プログラミングHaskell 第五章
KEY
スタートHaskell 第二章
PPTX
Programming Haskell Chapter 11 切符番号選び
PPTX
Android UIの罠
PPTX
Javascript本19章まとめ
PPTX
Ga nonogram
TEDx Manchester: AI & The Future of Work
スマートフォンについて その1
プログラミングHaskell 第五章
スタートHaskell 第二章
Programming Haskell Chapter 11 切符番号選び
Android UIの罠
Javascript本19章まとめ
Ga nonogram

Similar to Data.mapについて (20)

PDF
プログラミングコンテストでのデータ構造 2 ~動的木編~
PPT
アルゴリズムとデータ構造8
PDF
PFDS 5.5 Pairing heap
PDF
インターン講義8日目「データ構造」
PDF
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
PDF
Nazoki
PDF
JavaOne Tokyo JVM言語BOF ベンチマーク JRuby
PPTX
PDF
Algorithm, about balanced binary tree
PDF
第22回アルゴリズム勉強会資料
PDF
Programming in Scala Chapter 17 Collections
PDF
Ibisml2011 06-20
ODP
Real World OCamlを読んでLispと協調してみた
PPTX
TinyMapReduce on ruby
PDF
PFDS 8.4.3 Real-Time Deques
PPTX
scala.collection 再入門 (改)
PDF
F#入門 ~関数プログラミングとは何か~
PPTX
純粋関数型アルゴリズム入門
PDF
NArray and scientific computing with Ruby - RubyKaigi2010
プログラミングコンテストでのデータ構造 2 ~動的木編~
アルゴリズムとデータ構造8
PFDS 5.5 Pairing heap
インターン講義8日目「データ構造」
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Nazoki
JavaOne Tokyo JVM言語BOF ベンチマーク JRuby
Algorithm, about balanced binary tree
第22回アルゴリズム勉強会資料
Programming in Scala Chapter 17 Collections
Ibisml2011 06-20
Real World OCamlを読んでLispと協調してみた
TinyMapReduce on ruby
PFDS 8.4.3 Real-Time Deques
scala.collection 再入門 (改)
F#入門 ~関数プログラミングとは何か~
純粋関数型アルゴリズム入門
NArray and scientific computing with Ruby - RubyKaigi2010
Ad

Data.mapについて