【算法导论随笔】第三部分2 二叉搜索树与红黑树与区间树

BST(排序二叉树/搜索树)
排序:中序遍历
同快排一样,有序时挨个插入元素O(n^2),所以先对数组随机化
后继和前驱
https://blog.csdn.net/qq_42403295/article/details/88758816
证明BST高度期望值是logn
Cormen课上用到的思路:令y=2^x,然后证明y
因为比如
max(a,b)<=a+b
max(2的a次方与2的b次方)<=2的a次方+2的b次方
当|a-b|逐渐增大时,后者收敛速度比前者快

https://www.jianshu.com/p/4cb355a6cad0
后继和前驱
定义:一个结点的后继,是大于x.key的最小关键字的结点。(中序遍历中前面的)
一个结点的前驱,是小于x.key的最大关键字的结点。

如果x存在左孩子,则"x的前驱结点"为 “以其左孩子为根的子树的最大结点”
如果x没有左孩子。则x有以下两种可能;
1 x是"一个右孩子",则"x的前驱结点"为 “它的父结点”
2 x是"一个左孩子",则查找"x的最低的父结点,并且该父结点要具有右孩子",找到的这个"最低的父结点"就是"x的前驱结点";

1 如果x存在右孩子,则"x的后继结点"为 “以其右孩子为根的子树的最小结点
2 如果x没有右孩子。则x有以下两种可能;
1 x是"一个左孩子”,则"x的后继结点"为 “它的父结点”;
2 x是"一个左孩子",则查找"x的最低的父结点,并且该父结点要具有左孩子",找到的这个"最低的父结点"就是"x的前驱结点";

插入和删除是否影响中序遍历的升序性:https://ask.csdn.net/questions/199578
合理插入不会产生特殊情况影响升序性,即满足左子树所有节点均小于根节点

删除操作:https://www.cnblogs.com/lanhaicode/p/11298338.html

思考题12.3-4
在这里插入图片描述

思考题出现了radix 基数树 可看作字典树的一种形式

红黑树
二叉搜索树基本动态集合操作(search,predecessor,successor,minimum,maximum,insert,delete等)问O(h),h为树高
红黑树则保证在最坏情况下为O(lgn)
https://www.jianshu.com/p/e136ec79235c

将红结点和父亲结点合并则构成2-3-4树,(结点可以有2,3,4个孩子,叶结点除外)所有叶子结点有一样的树高。

https://www.jianshu.com/p/e136ec79235c

红黑树合并/连接
https://blog.csdn.net/z84616995z/article/details/36184461

扩张:加入新值(秩),记录左子树大小或者子树大小,以便知道key是第几小或者logn找第I小。

区间树:

区间树和线段树不一样,线段树是一种特殊的区间树。

区间树是在红黑树基础上进行扩展得到的支持以区间为元素的动态集合的操作,其中每个节点的关键值是区间的左端点。通过建立这种特定的结构,可是使区间的元素的查找和插入都可以在O(lgn)的时间内完成

思考题:最大重叠点:
https://my.oschina.net/windmissing/blog/690432

设有n个区间,将所有2n个点从小到大排序,对于排序后的第i个点,若它是某个区间的左端点,则p[i]=1,若它是某个区间的右端点,则p[i]=-1。由第一问可知,所求的点一定是某条线段的端点,所以从端点集合中找出被最多区间覆盖的那个。若一个端点是排序后的第i个点,则有SUM(s[1],s[i])个区间覆盖这个点。
使用红黑树对所有的端点进行动态排序并保证有较好的性质,在树的结点中增加一些顺序统计量的信息,用于求SUM(s[1],s[i]),将操作复杂度将为logn级别

Ps:平衡搜索树:

红黑树

替罪羊树

SPLAY树/伸展树

AVL树 平衡二叉树

Treap树

LCT 动态树

Treap树最好写,红黑树最快

  1. AVL树

AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。

2.伸展树

伸展树(Splay Tree),也叫分裂树,是一种二叉排序树,它能在O(log n)内完成插入、查找和删除操作。伸展树支持所有的二叉树操作。伸展树不保证最坏情况下的时间复杂度为O(logN)。伸展树的时间复杂度边界是均摊的。

3.红黑树

红黑树(Red Black Tree) 是一种自平衡二叉查找树,它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的 是树中元素的数目。

5.替罪羊树

替罪羊树是计算机科学中,一种基于部分重建的自平衡二叉搜索树。在替罪羊树上,插入或删除节点的平摊最坏时间复杂度是O(log n),搜索节点的最坏时间复杂度是O(log n)。

平衡树(AVL)是为了解决 二叉查找树(BST)退化为链表的情况。

红黑树(RBT)是为了解决 平衡树 在删除等操作需要频繁调整的情况。

https://baijiahao.baidu.com/s?id=1610302746201562113&wfr=spider&for=pc

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值