算法导论--学习笔记03

1.持久动态集合

在更新动态集合的时候需要更新过去的版本,这样的集合就叫持久动态集合。持久动态集合的思路是对改变的部分建立新的节点路径,其余不变的部分与原来的节点路径共享。

2.

菲波那契数列指的是这样一个数列: 
1,1,2,3,5,8,13,21…… 
这个数列从第三项开始,每一项都等于前两项之和 
它的通项公式为:[(1+√5)/2]^n /√5 - [(1-√5)/2]^n /√5 【√5表示根号5】 
很有趣的是:这样一个完全是自然数的数列,通项公式居然是用无理数来表达的。 
性质1:随着数列项数的增加,前一项与后一项之比越逼近黄金分割0.6180339887
性质2:从第二项开始,每个奇数项的平方都比前后两项之积多1,每个偶数项的平方都比前后两项之积少1

3.顺序统计量:统计两种第i个元素就是集合中第i小的元素;该统计量以树的形式存储,以中序来遍历;

4.注意:二叉平衡树的调整必须是从最开始不平衡的位置调整(比如根的位置---这样可以操作尽可能少的步骤);

5.红黑树用在关联数组、字典的实现上。需要的空间比散列表小。任何键值对应,需要随机存储和键有序的情况都可以用。

6.红黑树与AVL的比较:

AVL是严格平衡树,因此在增加或者删除节点的时候,根据不同情况,旋转的次数比红黑树要多;

红黑是用非严格的平衡来换取增删节点时候旋转次数的降低;

所以简单说,如果你的应用中,搜索的次数远远大于插入和删除,那么选择AVL,如果搜索,插入删除次数几乎差不多,应该选择RB。

7.红黑树的红点和黑点作用------这些结颜色被用来检测树的平衡性。-------但是红黑树不是一个严格的二插平衡树。

8.注意:红黑树的路径上必须要有最少的黑色节点,
  1. 我们来解释一下这个结论。考虑一棵黑色高度为3的红黑树:从根结到叶结的最短路径长度显然是2(黑-黑-黑),最长路径为4(黑-红-黑-红- 黑)。
  2. 由于性质4,不可能在最长路经中加入更多的黑色结,此外根据性质3,红色结的子结必须是黑色的,因此在同一简单路径中不允许两个连续的
  3. 红色结。综上,我们能够建立的最长路经将是一个红黑交替的路径。  
  4.   
  5. 由此我们可以得出结论:对于给定的黑色高度为n的红黑树,从根到叶结的简单路径的最短长度为n-1,最大长度为2(n-1)。 
  1. 红黑树能够以O(log2 n)的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还一些更好的,
  2. 但实现起来更复杂的数据结构能够做到一步旋转之内达到平衡,但红黑树能够给我们一个比较“便宜”的解决方案。红黑树的算法时间复杂度和AVL相同,
  3. 但统计性能比AVL树更高。  
  4.   
  5. 当然,红黑树并不适应所应用树的领域。如果数据基本上是静态的,那么让他们待在他们能够插入,并且不影响平衡的地方会具更好的性能。
  6. 如果数据完全是静态的,例如,做一个哈希表,性能可能会更好一些。  
  7.   
  8. 在实际的系统中,例如,需要使用动态规则的防火墙系统,使用红黑树而不是散列表被实践证明具更好的伸缩性。

9.在讨论红黑树的插入操作之前必须要明白,任何一个即将插入的新结点的初始颜色都为红色。这一点很容易理解,因为插入黑点会增加某条路径上黑结点的数目,

从而导致整棵树黑高度的不平衡。但如果新结点父结点为红色时(如图2所示),将会违返红黑树性质:一条路径上不能出现相邻的两个红色结点。

这时就需要通过一系列操作来使红黑树保持平衡。


10.

红黑树上结点的删除

红黑树本身是一棵二叉查找树,它的删除和二叉查找树的删除类似。首先要找到真正的删除点,当被删除结点n存在左右孩子时,真正的删除点应该是n的中序遍在前驱,关于这一点请复习二叉查找树的删除。如图9所示,当删除结点20时,实际被删除的结点应该为18,结点20的数据变为18。

 

 

 

所以可以推断出,在进行删除操作时,真正的删除点必定是只有一个孩子或没有孩子的结点。而根据红黑树的性质可以得出以下两个结论:

1、 删除操作中真正被删除的必定是只有一个红色孩子或没有孩子的结点

2、 如果真正的删除点是一个红色结点,那么它必定是一个叶子结点


参考:http://blog.youkuaiyun.com/eric491179912/article/details/6179908


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值