B-tree: remove: Difference between revisions

From Algowiki
Jump to navigation Jump to search
Line 10: Line 10:


== Abstract View ==
== Abstract View ==
=== Invariant: ===
# <math>p</math> points to a node of the B-tree.
# If <math>found = false</math>, <math>K</math> is in the [[Directed Tree#Ranges of Search Tree Nodes|range]] of the node to which <math>p</math> points.
# It is <math>found = true</math> if, and only if, <math>K</math> is contained at least once in one of the current nodes of previous iterations.
# If <math>found = true</math>
## <math>p'</math> points to a node where <math>K</math> is currently stored.
## The immediate predecessor of <math>K</math> is in the [[Directed Tree#Ranges of Search Tree Nodes|range]] of the node to which <math>p</math> points.
# If <math>p</math> points to the root, at least two keys are currently stored in the root; otherwise, at least <math>M</math> keys are currently stored in the node to which <math>p</math> points.


== Induction Basis ==
== Induction Basis ==

Revision as of 21:08, 29 September 2014

General Information

Algorithmic problem: Sorted sequence: remove

Type of algorithm: loop

Auxiliary data:

    1. Pointers, [math]\displaystyle{ p }[/math], [math]\displaystyle{ p' }[/math], [math]\displaystyle{ p_1 }[/math] and [math]\displaystyle{ p_2 }[/math] of type "pointer to B-tree node".
    2. A Boolean variable found, which is false, in the beginning and set true once the key [math]\displaystyle{ K }[/math] to be removed is seen.

Abstract View

Invariant:

  1. [math]\displaystyle{ p }[/math] points to a node of the B-tree.
  2. If [math]\displaystyle{ found = false }[/math], [math]\displaystyle{ K }[/math] is in the range of the node to which [math]\displaystyle{ p }[/math] points.
  3. It is [math]\displaystyle{ found = true }[/math] if, and only if, [math]\displaystyle{ K }[/math] is contained at least once in one of the current nodes of previous iterations.
  4. If [math]\displaystyle{ found = true }[/math]
    1. [math]\displaystyle{ p' }[/math] points to a node where [math]\displaystyle{ K }[/math] is currently stored.
    2. The immediate predecessor of [math]\displaystyle{ K }[/math] is in the range of the node to which [math]\displaystyle{ p }[/math] points.
  5. If [math]\displaystyle{ p }[/math] points to the root, at least two keys are currently stored in the root; otherwise, at least [math]\displaystyle{ M }[/math] keys are currently stored in the node to which [math]\displaystyle{ p }[/math] points.

Induction Basis

Induction Step

Complexity

Further Information

In the above specification, each node with exactly [math]\displaystyle{ M - 1 }[/math] keys is modified when visited. This is done for precautionary reasons only. With a slight modification, this can be avoided: when the leaf is reached, go back along the traversed path and modify each nodes with [math]\displaystyle{ M - 1 }[/math] keys until the first node with more than [math]\displaystyle{ M - 1 }[/math] keys is visited. Evidently, this reduces the number of modifications. However, chances are high that these nodes have to be modified sooner or later, so the true benefit is not clear. The version of the removal procedure presented here has primarily been selected because its loop invariant is simpler and more intuitive.