MySQL数据库设计总结

二叉查找树、平衡二叉树、红黑树、B-/B+树性能对比

PHPer 2018-09-16 2667 0 0
1. 二叉查找树 (Binary Search Tree)概念二叉查找树又称二叉搜索树,二叉排序树,特点如下:1. 左子树上所有结点值均小于根结点2. 右子树上所有结点值均大于根结点3. 结点...

1. 二叉查找树 (Binary Search Tree)

概念

二叉查找树又称二叉搜索树,二叉排序树,特点如下:1. 左子树上所有结点值均小于根结点2. 右子树上所有结点值均大于根结点3. 结点的左右子树本身又是一颗二叉查找树4. 二叉查找树中序遍历得到结果是递增排序的结点序列。

BST 的操作代价分析:

(1)查找代价

任何一个数据的查找过程都需要从根结点出发,沿某一个路径朝叶子结点前进。因此查找中数据比较次数与树的形态密切相关。当树中每个结点左右子树高度大致相同时,树高为logN。则平均查找长度与logN成正比,查找的平均时间复杂度在O(logN)数量级上。当先后插入的关键字有序时,BST退化成单支树结构。此时树高n。平均查找长度为(n+1)/2,查找的平均时间复杂度在O(N)数量级上。

(2)插入代价

新结点插入到树的叶子上,完全不需要改变树中原有结点的组织结构。插入一个结点的代价与查找一个不存在的数据的代价完全相同。

(3)删除代价

当删除一个结点P,首先需要定位到这个结点P,这个过程需要一个查找的代价。然后稍微改变一下树的形态。如果被删除结点的左、右子树只有一个存在,则改变形态的代价仅为O(1)。如果被删除结点的左、右子树均存在,只需要将当P的左孩子的右孩子的右孩子的…的右叶子结点与P互换,在改变一些左右子树即可。因此删除操作的时间复杂度最大不会超过O(logN)

BST效率总结:

查找最好时间复杂度O(logN),最坏时间复杂度O(N)。插入删除操作算法简单,时间复杂度与查找差不多。

2. 平衡二叉查找树 ( Balanced Binary Search Tree )

二叉查找树在最差情况下竟然和顺序查找效率相当,这是无法仍受的。事实也证明,当存储数据足够大的时候,树的结构对某些关键字的查找效率影响很大。当然,造成这种情况的主要原因就是BST不够平衡(左右子树高度差太大)。既然如此,那么我们就需要通过一定的算法,将不平衡树改变成平衡树。因此,AVL树就诞生了。

AVL 的操作代价分析:

(1)查找代价

AVL是严格平衡的BST(平衡因子不超过1)。那么查找过程与BST一样,只是AVL不会出现最差情况的BST(单支树)。因此查找效率最好,最坏情况都是O(logN)数量级的。

(2)插入代价

AVL必须要保证严格平衡(|bf|<=1),那么每一次插入数据使得AVL中某些结点的平衡因子超过1就必须进行旋转操作。事实上,AVL的每一次插入结点操作最多只需要旋转1次(单旋转或双旋转)。因此,总体上插入操作的代价仍然在O(logN)级别上(插入结点需要首先查找插入的位置)。

(3)删除代价

AVL删除结点的算法可以参见BST的删除结点,但是删除之后必须检查从删除结点开始到根结点路径上的所有结点的平衡因子。因此删除的代价稍微要大一些。每一次删除操作最多需要O(logN)次旋转。因此,删除操作的时间复杂度为O(logN)+O(logN)=O(2logN)

AVL 效率总结:

查找的时间复杂度维持在O(logN),不会出现最差情况AVL树在执行每个插入操作时最多需要1次旋转,其时间复杂度在O(logN)左右。AVL树在执行删除时代价稍大,执行每个删除操作的时间复杂度需要O(2logN)。

3. 红黑树 (Red-Black Tree )

二叉平衡树的严格平衡策略以牺牲建立查找结构(插入,删除操作)的代价,换来了稳定的O(logN) 的查找时间复杂度。但是这样做是否值得呢?能不能找一种折中策略,即不牺牲太大的建立查找结构的代价,也能保证稳定高效的查找效率呢? 答案就是:红黑树。

RBT 的操作代价分析:

(1)查找代价

由于红黑树的性质(最长路径长度不超过最短路径长度的2倍),可以说明红黑树虽然不像AVL一样是严格平衡的,但平衡性能还是要比BST要好。其查找代价基本维持在O(logN)左右,但在最差情况下(最长路径是最短路径的2倍少1),比AVL要略逊色一点。

(2)插入代价

RBT插入结点时,需要旋转操作和变色操作。但由于只需要保证RBT基本平衡就可以了。因此插入结点最多只需要2次旋转,这一点和AVL的插入操作一样。虽然变色操作需要O(logN),但是变色操作十分简单,代价很小。...

立即注册
分享的网址网站均收集自搜索引擎以及互联网,非查问网运营,查问网并没有提供其服务,请勿利用其做侵权以及违规行为。

更新于:2018-09-16 11:19:46
    您需要登录后才可以评论。 立即注册
    相关内容

    Mysql问题整理

    Yii2数据库报错-SQLSTATE[HY093]: Invalid parameter number: no para...

    Mysql server has gone away 报错原因分析及解决办法

    mysql 警告 could not be resolved: Name or service not known

    Mysql用特殊字符设置密码遇到的问题

    Mysql的函数substring使用注意事项

    MySQL 5.7内存使用分析

    mysql 命令整理

    【mysql】主键、普通索引、唯一索引和全文索引的比较

    没有接收到要导入的数据。可能是文件名没有提交,也可能是文件大小超出 PHP 限...

    Mysql 报错'SQLSTATE[HY000] [1045] Access denied for user 'root'@'...

    php连接mysql报错The server requested authentication method unknown to ...

    Mysql登录提示ERROR 2003 (HY000): Can't connect to MySQL server o...

    Mysql报错SQLSTATE[HY000]: General error: 1366 Incorrect string ...

    全网最详尽的Centos和Windows系统 Mysql8 root忘记密码解决办法

    mysql数据库操作 报错 #1030 - Got error 176 "Read page with wrong ...

    Linux系统彻底卸载MySQL数据库

    Linux下mysql5.7忘记root密码的解决方法

    ERROR 1130 (HY000): Host '127.0.0.1' is not allowed to connect to...

    mysql创建数据类型为JSON时,显示的longtext数据类型

    mysql 修改编码utf8mb4依旧无法保存表情 Incorrect string value: '\x解决办法

    MySQL 中 不等于 会过滤掉 Null 的问题

    win7安装Redis遇到的问题

    在window系统上安装redis服务-Invalid argument during startup: Failed to...

    推荐内容

    分享几个好用的bt搜索bt资源下载网址网站

    影视电影剧集动漫综艺bt资源在线播放网址网站推荐分享

    全网最新bt磁力搜索引擎bt资源bt网站网址分享

    人气美女女优百度指数排行榜(波多野结衣,苍井空,三上悠亚,深田咏美,桥本有菜,北条...

    最强人造人深田咏美,业界的社交女王

    人生起起落落的三上悠亚,成名前的清纯风,怎么搭配出来的?

    业内第一大长腿,桥本有菜的腿究竟有多长

    波多野结衣,岛国业界著作最多的超级劳模

    日本AV界NO.1,苍井空是多少宅男的疯狂?

    美女女优视频混剪 This Girl-Laza Morgan

    怎样使用V2Ray代理和SSTap玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩...

    sstap游戏代理教程 从此玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩虹六...

    影视电影剧集动漫综艺bt资源在线播放网址网站推荐分享