|U| の場合にのみ一致するわずかに異なる 2 つのデータ構造についての説明です。は 2 の平方乗です。大まかに言うと、キー k を 2 つの半分に分割しようとしています。それぞれの部分は約 √|U| です。可能性。最初の方法は、この目標を直接達成します。2 番目は、コモディティ ハードウェアでより高速に実行される近似です (|U| が 2 のべき乗であると仮定すると、最悪のケースは |U| が正方形ではなく、前半が 2 番目の 2 倍の可能性を持つ場合です)。1 つの方法を選択し、それを固守します。
FindSuccessor(3, S) の例を次に示します。簡単にするために、3 つの要素で再帰を底上げします。
木は次のように見えます
min=0| aux
max=7|------->min=0|
/ | \ max=2|
/ | \ /|\
/ | \ 0 1 2
/ | \
v v v
min=0| min=3| min=6|
max=1| max=4| max=7|
/| /| /|
0 1 3 4 6 7
ルートで、3 = (1, 0) を分割し、1 番目 (中間) の子の最大値が 3 より大きいかどうかを確認します。そうなので、そこに降りて、ブルート フォースを使用して答え 4 を計算します。ツリーに 3 つ以上のレベルがある場合は、再帰的に検索します)。
より興味深いケースは、S = {0, 1, 3, 6, 7} の場合です。
min=0| aux
max=7|------->min=0|
/ | \ max=2|
/ | \ /|\
/ | \ 0 1 2
/ | \
v v v
min=0| min=3| min=6|
max=1| max=3| max=7|
/| / /|
0 1 3 6 7
ここで、ルート {3} の 1 番目のサブツリーを調べ、その最大値が 3 を超えていないことを発見しました。補助データ構造で 1 の後続の 2 を見つけ、2 番目のサブツリーの最小値を返します。 、これは 6 です。