原文作者: Rob Landley 原文連結: http://lxr.linux.no/linux+v3.2.1/Documentation/rbtree.txt red-black tree是什麼?它們有什麼用? red-black tree是一種self-balancing binary search tree,用來儲存可被排序的key/value資料組合。與radix trees不同(用來有效地儲存sparse arrays,所以會用長整數的索引來安插/存取/刪除節點),也與hash tables不同(沒有保持在有序的狀態,所以無法輕易地以有序的方式巡訪,並且必須以特定的大小與hash function來微調效能,而rbtresss則可以優雅地擴展並儲存任意的key值)。 (譯註:雖然是很基本的觀念,但小弟還是要囉唆一下。資料結構的選用是因時制宜的。千萬不要以為rbtrees比上述兩種結構好,rbtrees基本上算是對各種操作最四平八穩的結構,但應用時,往往可以挑選更佳的資料結構。舉例來說,如果我們只需要安插/搜尋節點,那麼幾乎沒有什麼資料結構比hash table更合適了,複雜度只要O(1)。) red-black tree跟AVL trees很像,不過為最糟狀況下的安插與刪除提供了較佳的時間表現(個別最多兩次旋轉與三次旋轉便可讓tree恢復平衡),不過對於搜尋會有一點點的損失(不過還是保持在O(logn))。 引用自Linux Weekly News: 在kernel中有許多red-black trees的應用。deadline與CFQ I/O排程器用rbtrees追蹤請求;ext3檔案系統使用rbtrees紀錄directory entries。Virtual memory areas (VMAs) 也是以rbtrees追蹤、epoll的檔案描述器、密碼學用的key值、以及在"階層式token bucket"的網路封包。 這份文件涵蓋Linux rbtress的使用方式。更多有關red-black tree的原理與實作資訊可參考: Linux Weekly News上的文章 http://lwn.net/Articles/184495/ ...