内存中的二叉树和磁盘中的B树

1) 程序在内存中运行,内存分区,时间复杂度:即while循环的次数

2)数组array

    存储:一数占1byte=8bit,每个元素有相对于首个的index,一个数组占一片区

    查找:逐个

    增删:①重,牵一发而动全身

               ②10个要增至18个时,所占的区大小不够,还需要先找到大小能满足存储的区,再把10个挪过去,再开始增

3)链表

    优点:解决了数组的缺陷②

    存储:数组不需要再抱团占区,每个元素独立见缝插针即可,但前一个数同时要存储指向下一个数的指针,这不可避免会有tradeoff,一个指针在64位设备上占用8byte,32位占用4byte。

    查找复杂度:O(n)

4)二分查找策略(也称折半查找)

    定义:首先要对数字进行排序,有序的数组index为0,1,2…n,先从floor(n/2)开始查询,如果要找的数小于当前数,则下一步在左边子组的范围中查询,左边子组也是从该子组的floor(n/2)开始查询…每查找一次,或成功,或使查找数组中元素的个数减少一半,如果某一步数组为空,则表示找不到目标元素

    时间复杂度:O(log_{2}^n )

5)链表搭配上二分查找策略就可以演变为二叉树

    二叉树的优点:一个节点只存一个关键字,每查找一次,只需要和一个值进行比较,或成功,或使查找数组中元素的个数减少一半,适合内存中使用。

    二叉树的缺点:树高,很可能趋近线性链表,如果用在磁盘,查找时IO次数多。

6)平衡二叉树(AVL)

    平衡要求:左子树与右子树的高度之差的绝对值不超过1

7)特化的AVL树-红黑树

    对之进行平衡的代价低于平衡二叉树

8)平衡多路查找树-B树

    优点:树低,用在磁盘,有效减少查找时的IO次数

9)B+树

    优点:范围查找全表扫描更高效

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容