Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Data.mapについて

1,134 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Data.mapについて

  1. 1. Data.Mapについて @dekosuke
  2. 2. はじめに 高速でPureなTree、Data.Mapについて Purely Funcional Data Structure で説明されてい た赤黒木とはまた別の平衡木 2
  3. 3. 参考文献 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
  4. 4. 構造 data Map k a = Tip | Bin {-# UNPACK #-} !Size !k a !(Map k a) !(Map k a) UnBox/正格フラグ 木のサイズを各枝が知っている -> SizeもO(1) 4
  5. 5. 平衡条件大きい側が小さい側のw倍 (Data.Mapだとdeltaになっているけど) を超えない要素の挿入・削除後にbalance関数を1度呼んで平衡を保つ 5
  6. 6. balancedelta,ratio :: Intdelta = 5 -- 大 < delta * 小ratio = 2 -- 回転がSingleかDoubleか決定balance :: k -> a -> Map k a -> Map k a -> Map k abalance 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
  7. 7. rotation Single Rotation と Double Rotation の2つある Singleのほうが効果大きいrotateL :: a -> b -> Map a b -> Map a b -> Map a brotateL 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
  8. 8. Single Rotation 8
  9. 9. Double Rotation 9
  10. 10. パラメータ条件 論文参照 http://groups.csail.mit.edu/mac/users/adams/BB/ Data.Mapでは delta=5 ratio=2 10
  11. 11. 集合演算 Union, Difference, Intersection すべてO(n+m) (nとmはそれぞれの木のサイズ) 11
  12. 12. End

×