A Beginners Guide to Building a RAG App Using Open Source Milvus
23 Tree Best Part
1. 5.3 2-3 Trees
Definition
• A 2-3 Tree is a null tree (zero nodes) or a single node tree (only one node) or a
multiple node tree with the following properties:
1.
Each interior node has two or three children
2.
Each path from the root to a leaf has the same length.
Fields of a Node :
Internal Node
p1 k1 p2 k2 p3
p1 : Pointer to the first child
p2 : Pointer to the second child
p3 : Pointer to the third child
k1 : Smallest key that is a descendent of the second child
k2 : Smallest key that is a descendent of the third child
Leaf Node
key other fields
Records are placed at the leaves. Each leaf contains a record (and key)
Example: See Figure 5.23
Figure 5.23: An example of a 2-3 tree
2. Search
• The values recorded at the internal nodes can be used to guide the search path.
• To search for a record with key value x, we first start at the root. Let k1 and k2 be
the two values stored here.
1.
If x < k1, move to the first child
2.
If x k1 and the node has only two children, move to the second child
3.
If x k1 and the node has three children, move to the second child if x < k2 and
to the third child if x k2.
• Eventually, we reach a leaf. x is in the tree iff x is at this leaf.
Path Lengths
• A 2-3 Tree with k levels has between 2k - 1 and 3k - 1 leaves
• Thus a 2-3 tree with n elements (leaves) requires
at least 1 + log3n levels
at most 1 + log2n levels
5.3.1 2-3 Trees: Insertion
For an example, see Figure 5.24.
3. Figure 5.24: Insertion in 2-3 trees: An example
Figure 5.25: Deletion in 2-3 trees: An Example
4.
5. Insert (x)
1.
Locate the node v, which should be the parent of x
2.
If v has two children,
• make x another child of v and place it in the proper order
• adjust k1 and k2 at node v to reflect the new situation
3.
If v has three children,
• split v into two nodes v and v'. Make the two smallest among four children
stay with v and assign the other two as children of v'.
• Recursively insert v' among the children of w where
w = parent of v
• The recursive insertion can proceed all the way up to the root, making it
necessary to split the root. In this case, create a new root, thus increasing
the number of levels by 1.
5.3.2 2-3 Trees: Deletion
Delete (x)
1.
Locate the leaf L containing x and let v be the parent of L
2.
Delete L. This may leave v with only one child. If v is the root, delete v and let its
lone child become the new root. This reduces the number of levels by 1. If v is not
the root, let
p = parent of v
If p has a child with 3 children, transfer an appropriate one to vif this child is
adjacent (sibling) to v.
If children of p adjacent to v have only two children, transfer the lone child of v to
an adjacent sibling of v and delete v.
• If p now has only one child, repeat recursively with p in place of v. The
recursion can ripple all the way up to the root, leading to a decrease in the
number of levels.
Example: See Figure 5.25.