Treap

Treap (ツリープ)は、乱択アルゴリズムを使用した平衡2分探索木の1つ。1989年に Cecilia R. Aragon と Raimund Seidel が発表した[1][2]。平衡2分探索木のアルゴリズムの中ではアルゴリズムが単純であり、コード量が少なくてすむ。Treap という名称は Tree (木構造)と Heap (ヒープ)という2つの単語を組み合わせて作られた。

アルゴリズム[編集]

各ノードに乱数を割り振る。そして、この乱数値に基づいて、二分ヒープを作る。二分ヒープにおいて、子の左右は無規定だが、この部分を2分探索木のルールに基づき、(乱数値の方ではなく、本来のノードの値に基づき)左の子ノードは親ノードよりも小さくし、右の子ノードは親ノードよりも大きくする。乱数で作られた2分ヒープの高さは、O(log n) であるため、treap の木の高さは O(log n) になる。

より具体的には、挿入時は、乱数値を無視して、2分木として適切な葉に追加し、そこから、木の回転を使い、2分ヒープが成立するように、親方向へノードを上げていく。削除時は、木の回転を使い、葉まで降ろし、そして削除する。探索などは、通常の2分探索木と同一。

関連項目[編集]

参照[編集]

  1. ^ Aragon, Cecilia R.; Seidel, Raimund (1989), “Randomized Search Trees”, Proc. 30th Symp. Foundations of Computer Science (FOCS 1989), Washington, D.C.: IEEE Computer Society Press, pp. 540–545, doi:10.1109/SFCS.1989.63531, ISBN 0-8186-1982-1, http://faculty.washington.edu/aragon/pubs/rst89.pdf 
  2. ^ Seidel, Raimund; Aragon, Cecilia R. (1996), “Randomized Search Trees”, Algorithmica 16 (4/5): 464–497, doi:10.1007/s004539900061, http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.30.8602