layout: post title: "其他树" subtitle: " "AVL树、B树、多叉树等"" date: 2018-10-06 07:00:00 author: "青乡" header-img: "img/post-bg-2015.jpg" catalog: true tags: - DataStructure&Algorithm
2-3-4树
最多有4个子节点。
2-3树
最多有3个子节点。
什么是B-树
B-树
2-3-4树是B-树的一个特例。
B不是二叉的意思。而是binary search tree。这个名字起得不好,误导人。
平衡的树。B应该是Balance的意思,平衡树。
有多个子节点。
//维基百科
在计算机科学中,B树(英语:B-tree)是一种自平衡的树,能够保持数据有序。这种资料结构能够让查找数据、顺序访问、插入数据及删除的动作,都在对数时间内完成。B树,概括来说是一个一般化的二元搜寻树(binary search tree),可以拥有多于2个子节点。与自平衡二叉查找树不同,B树适用于读写相对大的数据块的存储系统,例如磁盘。B树减少定位记录时所经历的中间过程,从而加快存取速度。B树这种数据结构可以用来描述外部存储。这种资料结构常被应用在数据库和文件系统的实现上。
速度
1.二叉树/二分查找
logN
2.多叉树
logN / N。//N是多叉树的多。因为层数更少了。
B+树
B*树
B树和红黑树的关系?
红黑树和2 3 4树的关系?
B树与数据库索引的关系
外部存储/磁盘存储
基本概念 1.块是磁盘的最小读写单位
即一次读写一个块的数据。
2.一个块包含多个记录
外部存储和哈希的关系?
索引
解决磁盘的数据查找和插入/删除的问题,有2种方法,
1.多叉树
查找
logN / N
插入/删除
基于查找,然后改变指针指向即可。平衡树的话,稍微麻烦一点,因为要保证平衡,所以需要旋转一些节点。
2.索引
1)索引
包含2个数据,关键字和编号。关键字是需要查找的关键字(数据库表的某个字段),编号是真正存储数据地方的编号(块的编号)。
和字典完全类似,关键字是单词,编号是单词解释的那一页。
2)真正的数据
编号 + 数据。
索引存放在哪里?
1.内存
数据小的话(比如几M),可以放内存。
2.磁盘 数据大,只能放磁盘。
索引使用哪一种数据结构?
1.顺序有序存储
2.树
推荐使用树。
真正的数据使用哪一种数据结构?
就是每次插入到最后面就可以了,因为真正的数据都有一个编号,本身放哪里是无所谓的,怎么方便怎么快怎么来。
1.查找
2.插入和删除
应用场景
为知笔记
1.每个笔记是一篇文章 每个笔记都有一个编号。
2.对这些文章建立索引
怎么建立索引?
就是按关键字建立索引,具体地说是按中文分词等方法来建立索引。
放在哪里?
索引放在本地磁盘。
笔记也在本地磁盘。
3.搜索 搜索关键字的时候,先找到关键字对应的编号,每个编号就是一篇文章,所以每次搜索出来的都是一个文章集合/列表。
外部文件排序 使用归并算法。因为归并算法速度比较快,但是有一个缺点就是需要一倍的空间,如果是在外部存储排序,那么不会有存储空间的问题。