• 多路查找树


          在前面专题中讲的BST、AVL、RBT都是典型的二叉查找树结构,其查找的时间复杂度与树高相关,都是在内存中进行的。那么降低树高自然对查找效率是有所帮助的。

        另外还有一个比较实际的问题:就是大量数据存储中,实现查询这样一个实际背景下,平衡二叉树由于树深度过大而造成磁盘IO读写过于频繁,进而导致效率低下。那么如何减少树的深度(当然不能减少查询数据量),一个基本的想法就是:

    1. 每个节点存储多个元素(但元素数量不能无限多,否则查找就退化成了节点内部的线性查找了)。

    2. 摒弃二叉树结构,采用多叉树(由于节点内元素数量不能无限多,自然子树的数量也就不会无限多了)。


      多路查找树(muitl-way search tree) 每个节点的孩子可以树可以多余两个; 每个节点可以存储多个元素;

               1、2-3树
                    每个节点都具有2个孩子(称之为2节点)或者3个孩子(称之为3节点)。
              一个2节点包含一个元素和两个孩子(或没有孩子)。

                                      一个3节点包含两个元素和三个孩子(或没有孩子)。

          1.1. 2-3树的插入实现

         1.对于空树 插入一个节点直接插入就好。

         2.插入节点到一个2节点的叶子上。  比如插入3

          

               3.将一个节点插入到原来上3节点的叶子上

          3.1要在3节点上插入,此时3节点的上面是2节点 则将 上面的2节点变成3节点  比如插入5

           

            3.2 要在3节点上插入,此时3节点上面是3 节点 则将上面首次出现为2节点的节点变成3节点。比如插入11

                

           以前我们普通叉树 插入时都是在叶子节点后添加,这样会导致二叉树的高度不断增加。查找困难。

             此时 我们用2-3树时重复分利用特性。 往上寻找有用空间 进行有效的利用

              3.3 要在3节点插入数据时  ,该3节点往上遍历都是3节点,这时要扩展高度了。



       1.2     2-3树的删除实现。

                 1.要删除的数位于3节点地址上。 3节点 ->2节点就好  比如删除6

              

               

                 2.要删除的数位于2叶子节点上。

                       1.此叶子节点上一级是2节点,但是他有一个3节点的有孩子。

                   

                       2.叶子节点上一级是2节点,但是他有一个2节点的有孩子。

                   

                        3.此叶子节点双亲是一个3节点。

                 

                        4.删除的是一个满二叉树叶子节点

                   

                     5.  要删除的元素位于非叶子节点的分支上。

                         当是2节点时 则按照中序遍历 找此节点前面或者后面的数顶底下。

                          

                         当是3 节点的时候  将3节点的左孩子提升上去 

                           

               2-3-4理论上跟2-3树是一样的 。  



    关注公众号 海量干货等你
  • 相关阅读:
    【转】go语言的字节序
    【转】Go maps in action
    angular 的进一步深入理解
    go 中goroutine 的使用
    hdu2516-取石子游戏 (斐波那契博弈)【博弈 二分查找】
    poj1067-取石子游戏 (威佐夫博弈)
    hdu1710-Binary Tree Traversals (由二叉树的先序序列和中序序列求后序序列)
    hdu3999-The order of a Tree (二叉树的先序遍历)
    第二个MFC实例:GPA计算器
    第一个MFC实例:计算圆周长和圆面积
  • 原文地址:https://www.cnblogs.com/sowhat1412/p/12734452.html
Copyright © 2020-2023  润新知