日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

紅黑樹與平衡二叉樹區(qū)別?

 風(fēng)清揚r 2019-07-23
如果說平衡二叉樹是一個類的話,那么紅黑樹就是該類的一個實例。
算法的書我丟久了,一下子也找不到,我是憑記憶說的。紅黑樹的算法比較麻煩,但它的思想很好,如果理解了它的思想也就理解它的算法,我也只記得思想,具體算法記不得了。我就在這說說思想吧。

紅黑樹有兩個重要性質(zhì):
1、紅節(jié)點的孩子節(jié)點不能是紅節(jié)點;
2、從根到前端節(jié)點的任意一條路徑上的黑節(jié)點數(shù)目一樣多。

這兩條性質(zhì)確保該樹的高度為logN,所以是平衡樹。

紅黑樹是每個節(jié)點都帶顏色的樹,節(jié)點顏色或是紅色或是黑色,紅黑樹是一種查找樹。紅黑樹有一個重要的性質(zhì),從根節(jié)點到葉子節(jié)點的最長的路徑不多于最短的路徑的長度的兩倍。對于紅黑樹,插入,刪除,查找的復(fù)雜度都是O(log N)。


插入的節(jié)點總是設(shè)為紅節(jié)點,當其復(fù)節(jié)點為紅節(jié)點時,這就有破壞了性質(zhì)1,就需要調(diào)整。將插入節(jié)點作為考察節(jié)點,考察其叔父,如果也是紅節(jié)點,則將其父親和叔父改為黑節(jié)點,而將其祖父改為紅節(jié)點,然后以其祖父為考察節(jié)點。如果其叔父是黑節(jié)點則做一旋轉(zhuǎn)變換可以搞定,沒有圖不太好說明,你可以自己考慮一下,總之它的思想是把“多出來”的紅色往上一層推去,確保下面層紅黑性質(zhì),最后推到根以后,如果依然違反性質(zhì)1,則可以直接把根由紅改黑即可,就相當于把這“多出來”的紅色推到樹以外的節(jié)點去了。

刪除節(jié)點時先要找到頂替的節(jié)點,如果刪去的節(jié)點是黑色則破壞了性質(zhì)2,也需要調(diào)整。調(diào)整的思想也同前面類似,把這個黑色賦予頂替節(jié)點,則頂替節(jié)點相當于有兩重黑色,然后將它的兩重黑色向上推,一直推到根,再從根推到外面去了。

平衡二叉樹的調(diào)整算法幾乎所有數(shù)據(jù)結(jié)構(gòu)的書都有呀,根據(jù)破壞平衡性的加入點,將插入操作分為了四種,分別是LL、LR、RR、RL。每種引起不平衡的插入位置,均有相應(yīng)的調(diào)整算法。

AVL樹又稱高度平衡的二叉搜索樹,是1962年由兩位俄羅斯的數(shù)學(xué)家G.M.Adel'son-Vel,sky和E.M.Landis提出 的.引入二叉樹的目的是為了提高二叉樹的搜索的效率,減少樹的平均搜索長度.為此,就必須每向二叉樹插入 一個結(jié)點時調(diào)整樹的結(jié)構(gòu),使得二叉樹搜索保持平衡,從而可能降低樹的高度,減少的平均樹的搜索長度. 

AVL樹的定義:

 一棵AVL樹滿足以下的條件: 

1>它的左子樹和右子樹都是AVL樹 

2>左子樹和右子樹的高度差不能超過1 從條件1可能看出是個遞歸定義,如GNU一樣. 

性質(zhì): 

1>一棵n個結(jié)點的AVL樹的其高度保持在0(log2(n)),不會超過3/2log2(n+1) 

2>一棵n個結(jié)點的AVL樹的平均搜索長度保持在0(log2(n)). 

3>一棵n個結(jié)點的AVL樹刪除一個結(jié)點做平衡化旋轉(zhuǎn)所需要的時間為0(log2(n)).


# 紅黑樹是一種很有意思的平衡檢索樹。它的統(tǒng)計性能要好于平衡二叉樹(有些書籍根據(jù)作者姓名,Adelson- Velskii和Landis,將其稱為AVL-樹),因此,紅黑樹在很多地方都有應(yīng)用。在C++ STL中,很多部分(目前包括 set, multiset, map, multimap)應(yīng)用了紅黑樹的變體(SGI STL中的紅黑樹有一些變化,這些修改提供了更好的性能,以及對set操作的支持)。  
#   
# 紅黑樹的定義如下:  
#   
#   
# 滿足下列條件的二叉搜索樹是紅黑樹  
#   
#     * 每個結(jié)點要么是“紅色”,要么是“黑色”(后面將說明)  
#     * 所有的葉結(jié)點都是空結(jié)點,并且是“黑色”的  
#     * 如果一個結(jié)點是“紅色”的,那么它的兩個子結(jié)點都是“黑色”的  
#     * (注:也就是說,如果結(jié)點是黑色的,那么它的子節(jié)點可以是紅色或者是黑色的)。  
#     * 結(jié)點到其子孫結(jié)點的每條簡單路徑都包含相同數(shù)目的“黑色”結(jié)點  
#     * 根結(jié)點永遠是“黑色”的  

AVL 樹是高度平衡的,頻繁的插入和刪除,會引起頻繁的reblance,導(dǎo)致效率下降
紅黑樹不是高度平衡的,算是一種折中,插入最多兩次旋轉(zhuǎn),刪除最多三次旋轉(zhuǎn)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多