Linux核心之於紅/黑樹狀結構and AVL樹

來源:互聯網
上載者:User

標籤:實用主義   linux   二叉樹   平衡   

為什麼Linux早先使用AVL樹而後來傾向於紅/黑樹狀結構?
       實際上這是由紅/黑樹狀結構的實用主義特質導致的結果,本短文依然是形而上的觀點。紅/黑樹狀結構可以直接由2-3樹匯出,我們可以不再提紅/黑樹狀結構,而只提2-3樹,因為2-3樹的操作太簡單。另外,任何紅/黑樹狀結構的操作和特性都可以映射到2-3樹中。因此紅/黑樹狀結構和AVL樹的比較就成了2-3樹和AVL樹的比較。
       它們倆的區別在哪?2-3樹的平衡是完美平衡的,但是樹杈數量卻可以是3個,而AVL樹差一點點就完美平衡的標準二叉樹,它只允許子樹的高度差最多為1。可見這麼看來,2-3樹比AVL樹更加平衡,但是2-3樹轉換為二叉樹,即紅/黑樹狀結構的時候,它就不再能保持完美平衡了,因為三叉節點要分割出來一個紅色節點,使得子樹高度加1,這麼看來,紅/黑樹狀結構在嚴格意義上完全沒有AVL樹平衡!
       AVL樹在每一次插入刪除時都要保持它那“差一點點的平衡”,而紅/黑樹狀結構則只需要不擾動黑色節點即可,以2-3樹來講,它畢竟是犧牲了二叉樹的標準特性變成三叉樹保持平衡的。可見,紅/黑樹狀結構的插入/刪除開銷遠小於AVL樹,對於查詢開銷,理論上,更加平衡的AVL樹要比紅/黑樹狀結構好(因為對於2-3樹,遇到三叉節點,你需要比較2次),但是,紅/黑樹狀結構的2倍樹高的不平衡狀態是一個小機率事件!因此對於正常情況,你可以認為AVL樹和紅/黑樹狀結構的查詢開銷是一樣的,總之,常規情況下,紅/黑樹狀結構要好於AVL樹。
       AVL樹太理想了,而Linux核心中的資料結構,特別是虛擬記憶體管理模組,尤其是CFS調度器的task對列,它們是會被頻繁插入刪除的,因此選擇了紅/黑樹狀結構而不是AVL樹。


Linux核心之於紅/黑樹狀結構and AVL樹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.