- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
常见排序算法的实现与性能比较
红黑树、二叉搜索树的实现与性能比较实现红黑树、二叉搜索树相关算法:插入(红黑树涉及的调整:左旋、右旋等),删除,搜索(指定Key值节点)。总结对各种排序的性能分析In0.txt In1.txt In2.txt 二叉查找树 63 78 83 红黑树 47 78 62
以上为对三个文件,选择不同的算法,查找100个关键字所用的时间。从表中可以看出,红黑树的时间优于二叉搜索树。
七、算法分析
a)红黑树
1)插入
插入首先是按二叉搜索树的插入步骤,把新节点z插入到某一个叶节点的位置上。接下来把z的颜色设成红色。如果z的父节点也是红色,。Insert-Fixup,来修补这棵红黑树。
在Insert-Fixup中,每一次迭代的开始,指针z一定都指向一个红色的节点。如果z-parent是黑色,
为了方便,我们这里都假设z-parent是grandfather的左子节点,而uncle是grandfather的右子节点。如果遇到的实际情况不是这样,那也只要把所有操作中的左、右互反就可以了。可能遇到以下三种情况。Case 1. uncle也是红色。这时只要把z-parent和uncle都设成黑色,并把grandfather设成红色。这样仍然确保了每一条路径上的黑色节点数不变。然后把z指向grandfather,并开始新一轮的迭代。如下图:
Case 2. uncle是黑色,并且z是z-parent的右子节点。这时我们只要把z指向z-parent,然后做一次Left-Rotate(z)。就可以把情况转化成Case 3。
Case 3. uncle是黑色,并且z是z-parent的左子节点。到了这一步,我们就剩最后一步了。只要把z-parent设成黑色,把grandfather设成红色,再做一次Right-Rotate(grandfather),整棵树就修补完毕了。Case 2和Case 3如下图:
反复进行迭代,直到某一次迭代开始时z-parent为黑色而告终,也就是当遇到Case 3后,做完它而告终。
删除
如果删除的节点是黑色的,那么显然它所在的路径上就少一个黑色节点,那么红黑树的性质就被破坏了。这时我们就要执行一个称为Delete-Fixup的过程,来修补这棵树。
一个节点被删除之后,一定有一个它的子节点代替了它的位置即使是叶节点被删除后,也会有一个空节点来代替它的位置。x指向这个代替位置的节点。显然,如果x是红色的,那么我们只要把它设成黑色,它所在的路径上就重新多出了一个黑色节点,那么红黑树的性质就满足了。然而,如果x是黑色的,那我们就要假想x上背负了2个单位的黑色。那么红黑树的性质也同样不破坏,但是我们要找到某一个红色的节点,把x上“超载”的这1个单位的黑色丢给它,这样才算完成。Delete-Fixup来完成这样的工作。
引入另一个指针w,指向x的兄弟。默认x是x-parent的左子节点,则w是x-parent的右子节点。如果实际遇到相反的情况,只要把所有操作中的左、右互反一下就可以了。Case 1. w是红色。根据红黑树的性质可以肯定x-parent是黑色、w-lchild是黑色。把x-parent与w的颜色互换,然后做一次Left-Rotate(x-parent)。做完之后x就有了一个新的兄弟:原w-lchild,把Case 1转换成了Case2、3、4中的一个,也就是w是黑色的情况。如下图:
Case 2. w是黑色,并且w的两个子节点都是黑色。只要把w设成红色。然后把x移到x-parent,开始下一轮迭代如下图(图中节点B不一定是红色,也可能是黑色):
Case 3. w是黑色,并且w的两个子节点左红右黑。这时我们把w与w-lchild的颜色互换,然后做Right-Rotate(w)。而Case 3被转化成了Case 4。
Case 4. w是黑色,并且w的右子节点是红色。先把w与x-parent的颜色互换,再做Left-Rotate(x-parent)。这时图中节点E(也就是原w-rchild)所在的路径就肯定少了一个黑色,而x所在的路径则多了一个黑色。那么就把x上多余的1个单位的黑色丢给E就可以了。至此,Delete-Fixup就顺利完成了。
3)Left-Rotate和Right-Rotate操作节点的Left-Rotate和Right-Rotate操作。所谓Left-Rotate(x)就是把节点x向左下方向移动一格,然后让x原来的右子节点代替它的位置。而Right-Rotate当然就是把Left-Rotate左、右互反一下。如下图:
Left-Rotate(x)后,x的右子树变成了原来y的左子树,Right-Rotate反之。二叉树是通过把一个有序表的 n 个结点依次插入而生成的,此时所得的二叉树蜕
您可能关注的文档
- 基于喘振频域特性的失稳预警技术研究-空压机.pdf
- 基于小分子的核酸结构探针最新研究进展.pdf
- 基于序列号的一种数据包容错排序算法-武汉理工大学学报.pdf
- 基于应用层协议关键词序列的应用层异常检测方法-计算机研究与发展.pdf
- 基于快速高斯变换的不确定数据聚类算法uncertaindataanalysis.pdf
- 基于密度的不确定数据流聚类算法-清华大学学报.pdf
- 基于新模板的算法在车牌字符分割中的应用-计算机工程与应用.pdf
- 基于最大树聚类的多超球体一类分类算法及其应用研究-中国机械工程.pdf
- 基于斐波那契序列的应用层组播协议-core.pdf
- 基于时间序列分析的dns服务器的ddos攻击检测-常州大学学报.pdf
文档评论(0)