Arne AnderssonIgal Galperin[1]O(log n)O(log n) 
Scapegoat tree
種類
発明者 アルネ・アンダーソン、アイガル・ガリペリン、ロナルド・リベスト
ビッグオー記法による計算量 (en
アルゴリズム 平均 最悪の場合
空間 O(n) O(n)
探索 O(log n) O(log n)
挿入 O(log n) 償却されたO(log n)
削除 O(log n) 償却されたO(log n)

探索の最悪時間計算量がO(log n)である他の平衡二分探索木と異なる特徴として、スケープゴート木はノードごとに新たな要素を持たないため、メモリオーバーヘッドがない。つまり、ノードはキーと左右の子を指す2つのポインタのみを保存する。この性質によって、スケープゴート木の実装が容易になる上、データ構造アライメントによりノードのオーバーヘッドを最大3分の1に削減できる。

多くの平衡木は、平衡を維持するために何度も簡単な処理を呼ぶが、スケープゴート木は複雑な処理を低確率で呼ぶという違いがある。スケープゴート木では平衡を維持するために、「スケープゴート」と呼ばれる特定のノードを根とする部分木を完全二分木として再構築する。したがって、スケープゴート木の更新の時間計算量は、最悪の場合O (n)である。

理論

編集

α- 
size(left) ≤ α*size(node)
size(right) ≤ α*size(node)

 
function size(node) is
    if node = nil then
        return 0
    else
        return size(node->left) + size(node->right) + 1
    end if
end function

α=1α= 0.5 

α-α- 
height(tree) ≤ floor(log1/α size(tree))

α-α- 

α-α- 
height(scapegoat tree) ≤ floor(log1/α size(tree) + 1

 

 α-AVL AVL/ 

0.5<α<1α αα α調 

操作

編集

探索

編集

O(log n)O( n) 

挿入

編集

 

""O(log n)α- 

α-α-1 α- 

α- 

O(log n) 

α- 
size(left) ≤ α*size(node)
size(right) ≤ α*size(node)

3231 
size(parent) = size(node) + size(sibling) + 1

1 
size(inserted node) = 1.

 
size[x+1] = size[x] + size(sibling) + 1  

xx+1 size[x]size[x+1] size(sibling)[1]O( n) 

O( n)O( n) O(log n) 

挿入コストの証明の概略

編集

 v10 

 

vI( v)=0  

 v       

 

  h(v_0)     11 

      

 v     

 

O(log n)

hO(2^h-1 )1hO(2^h)

削除

編集

1MaxNodeCountNodeCountMaxNodeCountmaxMaxNodeCountNodeCount 

 
 NodeCount≤α* MaxNodeCount 

MaxNodeCountNodeCountO( n)O(log n) 

削除コストの証明の概略

編集

              

 

語源

編集

スケープゴート木「何かがうまくいかない場合、人々はまず責任者(スケープゴート)を探す一般的な知識に基づく。」[2] 聖書では、 スケープゴートは儀式的に他人の罪を負い、その後追い払われる動物(身代わり、生け贄)を意味する。

関連項目

編集

参考文献

編集
  1. ^ a b Galperin, Igal; Rivest, Ronald L. (1993). Scapegoat trees (PDF). Proceedings of the fourth annual ACM-SIAM Symposium on Discrete algorithms. Philadelphia: Society for Industrial and Applied Mathematics. pp. 165–174. ISBN 0-89871-313-7
  2. ^ Morin, Pat. “Chapter 8 - Scapegoat Trees”. Open Data Structures (in pseudocode) (0.1G β ed.). http://opendatastructures.org/versions/edition-0.1g/ods-python/8_Scapegoat_Trees.html 2017年9月16日閲覧。 

外部リンク

編集