B-tree
2-3 Tree
二叉搜索树的每个节点只带有一个值,这个值将数据区间划分成两部分,值左边的部分(也就是小于这个值的数据)保存到节点的左子树,值右边的部分保存到节点的右子树。因此,每个非叶子节最多能够拥有两个子节点。
如果每个节点保存两个值,那么这两个值可以将数据区间划分成三部分,左边部分的数据保存在左子树,右边部分的数据保存在右子树,介于两个值之间的那部分数据保存在中间子树。也就是说,在一个节点保存两个值的情况下,这个节点有三个子节点。
节点可以存储1个或者2个值的搜索树,就是2-3树了。二叉搜索树的查找效率为O(h),h为树的高度。在最好的情况下(完全平衡),有N个节点的二叉搜索树的高度为h=log(N),但添加删除节点时二叉搜索树容易失去平衡,失去平衡后树的高度就会发生变化,最差情况下,树的高度为N。使用平衡算法来平衡二叉搜索树,又需要花费额外的开销。

2-3树在插入数据过程中,会自动平衡。二叉搜索树的新节点只能作为叶子节点添加,而添加叶子节点提高了增加树高度的概率;二叉搜索树的根节点一旦确定就不会再被修改,直观地想下,如果根节点的值在数据区间的两端,那么最终肯定会导致树的非常不平衡。另一方面,因为二叉搜索树的节点只能保存一个值,同2-3树可以最多保存2个值相比,即使在都完全平衡的情况下,2-3树的高度也要小。
2-3树插入新节点时,如果插入点已经存在2个值,那么它首先将新值和原来的2个值放在一起构成3个值的节点,然后将这三个值的中间值向上提到父节点, 而剩余的两个值变成了父节点的两个子节点(因为分别在中间值的左右两边)。父节点也做相同的处理,依次向上提,直到根节点, 如果根节点已经为2个值的节点,那么就会改变根节点的值。这种“将中间值向上提”的过程,实际就是自动平衡的过程。
2-3树的最差查找效率为lgN,最好查找效率为log3N,约等于0.631lgN。
本节主要参考浅谈算法和数据结构:平衡查找树之2-3树
B-tree
本节主要参考MySQL索引背后的数据结构及算法原理
B-tree的更多相关文章
- [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法
二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...
- SAP CRM 树视图(TREE VIEW)
树视图可以用于表示数据的层次. 例如:SAP CRM中的组织结构数据可以表示为树视图. 在SAP CRM Web UI的术语当中,没有像表视图(table view)或者表单视图(form view) ...
- 无限分级和tree结构数据增删改【提供Demo下载】
无限分级 很多时候我们不确定等级关系的层级,这个时候就需要用到无限分级了. 说到无限分级,又要扯到递归调用了.(据说频繁递归是很耗性能的),在此我们需要先设计好表机构,用来存储无限分级的数据.当然,以 ...
- 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...
- Leetcode 笔记 110 - Balanced Binary Tree
题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...
- Leetcode 笔记 100 - Same Tree
题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...
- Leetcode 笔记 99 - Recover Binary Search Tree
题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...
- Leetcode 笔记 98 - Validate Binary Search Tree
题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...
- Leetcode 笔记 101 - Symmetric Tree
题目链接:Symmetric Tree | LeetCode OJ Given a binary tree, check whether it is a mirror of itself (ie, s ...
- Tree树节点选中及取消和指定节点的隐藏
指定节点变色 指定节点隐藏 单击节点 未选中则选中该节点 已选中则取消该节点 前台: 1.HTML <ul id="listDept" name="listDept ...
随机推荐
- 45、Docker 加 tensorflow的机器学习入门初步
[1]最近领导天天在群里发一些机器学习的链接,搞得好像我们真的要搞机器学习似的,吃瓜群众感觉好神奇呀. 第一步 其实也是最后一步,就是网上百度一下,Docker Toolbox,下载下来,下载,安装之 ...
- java多线程的几种实现方式记录
传统的实现线程的方式为三种,分别为继承Thread类,重写run()方法:实现Runable接口,重写run()方法:实现callable接口,重写call()方法:下面来记录一下最基本的三种编码实现 ...
- 利用BeautifulSoup抓取新浪网页新闻的内容
第一次写的小爬虫,python确实功能很强大,二十来行的代码抓取内容并存储为一个txt文本 直接上代码 #coding = 'utf-8' import requests from bs4 impor ...
- poj1068
Parencodings Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18785 Accepted: 11320 De ...
- python 二叉树实现带括号的四则运算(自学的孩子好可怜,不对的地方请轻责)
#!/usr/bin/python #* encoding=utf-8 s = "20-5*(0+1)*5^(6-2^2)" c = 0 top = [0,s[c],0] op = ...
- sql while 遍历表
declare @n int declare @rowcount int ) create table #temp ( id ,), employeeName ) ) insert into #tem ...
- 写了cookie阻止通过输入地址直接访问下一个html,但是直接输入地址访问时,会闪一下下一个页面,怎么回事啊????、
描述:做了两个页面login.html index.html 在index的body加了onload事件,调用一个js,js中有cookie的判断,防止没有登录就打开index.html,如果没 ...
- ubuntu 安装 git & smartgit
1. 安装 git # sudo apt-get update# sudo apt-get install git 2. 配置 # git config --global user.name &q ...
- U-boot中的FDT
1. U-boot为了支持FDT,添加了新的代码:/libfdt目录fdt.h libfdt.h fdt_support.h fdt_support.c 2. http://blog.csdn.net ...
- window go protobuf
http://studygolang.com/articles/8804 protoc --go_out=. protocol.proto E:\TEST\TESTGRPC\src\google.go ...