noshi91のメモ

データ構造のある風景

列の連結/全要素列挙をする永続データ構造

某に載せるほどか...? 載せることにしたらこっちは消えます
以下の操作を実現する永続データ構造が存在する

  •  make ( x )
    単一の要素  x からなる列を作成する
    時間/空間計算量  \Theta ( 1 )
  •  merge ( x , y )
     x , y を連結した列を作成する
    時間/空間計算量  \Theta ( 1 )
  •  enumerate ( x )
     x の全要素を順に列挙する
    時間計算量  \Theta ( | x |  )

アルゴリズム

各要素を葉に持つ二分木 (非平衡) を永続化すればよい。
 merge( x , y ) x を左子、 y を右子に持つノードを作る。
 enumerate は DFS で木を走査する。

f:id:noshi91:20191221000832j:plain