プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

データ構造におけるBツリーの削除


ここでは、Bツリーからノードを削除する方法を説明します。以下のようなBTreeがあるとします-

Bツリーの例

データ構造におけるBツリーの削除

削除には2つの部分があります。まず、要素を見つける必要があります。その戦略はクエリのようなものです。ここで削除するには、いくつかのルールに注意する必要があります。 1つのノードには少なくともm/2個の要素が必要です。したがって、1つの要素を削除し、残りの要素がm-1未満の場合、それ自体が調整されます。ノード全体が削除されると、その子がマージされ、それらのサイズがmと同じである場合、それらを2つの部分に分割すると、中央値が再び上がります。

46を削除するとします。これで2人の子がいます。 [45]、[47、49]の場合、それらはマージされ、[45、47、49]になり、47が上がります。

データ構造におけるBツリーの削除

アルゴリズム

BTreeDelete(x、key)-

入力 −ツリーのルート、および削除するキー

キーがリストに存在すると想定します

if x is leaf, then
   delete object with key ‘key’ from x
else if x does not contain the object with key ‘key’, then
   locate the child x->child[i] whose key range is holding ‘key’
   y := x->child[i]
   if y has m/2 elements, then
      If the sibling node z immediate to the left or right of y, has at least one more
      object than m/2, add one more object by moving x->key[i] from x to y, and
      move that last or first object from z to x. If y is non-leaf node, then last or first
      child pointer in z is also moved to y
   else
      any immediate sibling of y has m/2 elements, merge y with immediate sibling
   end if
   BTreeDelete(y, key)
else
   if y that precedes ‘key’ in x, has at-least m/2 + 1 objects, then
      find predecessor k of ‘key’, in the sub-tree rooted by y. then recursively delete k
      from the sub-tree and replace key with k in x
   else if ys has m/2 elements, then
      check the child z, which is immediately follows ‘key’ in x
      if z has at least m/2+1 elements, then
         find successor k of ‘key’, in the sub-tree rooted by z. recursively delete k
         from sub-tree, and replace key with k in x
   else
      both y and z has m/2 elements, then merge then into one node, and push ‘key’
      down to the new node as well. Recursively delete ‘key’ from this new node
   end if
end if

  1. データ構造のBツリークエリ

    ここでは、Bツリーで検索を実行する方法を説明します。 Bツリー検索は、Bツリークエリとも呼ばれます。以下のようなBツリーがあるとします- Bツリーの例 − 検索手法は、二分探索木と非常によく似ています。上記のツリーから66を検索するとします。したがって、ルートから開始します。66はルート要素46よりも大きくなります。したがって、ルートの右の子に移動します。次に、適切な子には複数の要素があります。要素はソートされており、[56、81]です。ターゲットキーは56より大きく、81より小さいので、56から81の間にあるサブツリーに入ります。次に、リーフレベルに移動しました。その時点で、要素6

  2. ハーフエッジデータ構造

    はじめに テンプレートパラメータまたはハーフエッジデータ構造(HalfedgeDSと略記)のHDSは、平面マップ、多面体、またはその他の方向付け可能な2次元など、頂点、エッジ、および面の入射情報を維持できるエッジ中心のデータ構造として定義されます。ランダムな次元に埋め込まれたサーフェス。各エッジは、反対方向の2つのハーフエッジに分割されます。各ハーフエッジには、1つの入射面と1つの入射頂点が格納されます。各面と各頂点に1つの入射ハーフエッジが格納されます。ハーフエッジデータ構造のバリエーションを減らすと、面のハーフエッジポインタや面の保存など、この情報の一部を削除できます。 ハーフエッジデ