關(guān)于應(yīng)用,知乎上有問題是討論這個(gè)的:
AVL樹褪迟,紅黑樹,B樹答憔,B+樹味赃,Trie樹都分別應(yīng)用在哪些現(xiàn)實(shí)場(chǎng)景中?
關(guān)于AVL的應(yīng)用有篇文章可以看看加深理解:Windows運(yùn)用AVL樹對(duì)進(jìn)程地址空間的管理
根據(jù) 《數(shù)據(jù)結(jié)構(gòu)與算法C語(yǔ)言描述》虐拓,AVL樹的最大高度是1.44 * log(N+2) - 1.328心俗,紅黑樹的最大高度是2.00* log(N+1)。與紅黑樹相比蓉驹,AVL樹的插入刪除操作更慢一些城榛,但是查詢操作更快。想必對(duì)進(jìn)程地址空間的查詢操作更頻繁一些态兴,所以AVL得以入選
寒江獨(dú)釣的整個(gè)[Data Structures & Algorithms]系列的文章也很不錯(cuò)狠持,每篇寫得很詳細(xì)易懂
淺談算法和數(shù)據(jù)結(jié)構(gòu): 七 二叉查找樹
淺談算法和數(shù)據(jù)結(jié)構(gòu): 八 平衡查找樹之2-3樹
淺談算法和數(shù)據(jù)結(jié)構(gòu): 九 平衡查找樹之紅黑樹
淺談算法和數(shù)據(jù)結(jié)構(gòu): 十 平衡查找樹之B樹
淺談算法和數(shù)據(jù)結(jié)構(gòu): 十一 哈希表
值得反復(fù)看,每一次都有收獲瞻润,比如看到“淺談算法和數(shù)據(jù)結(jié)構(gòu): 六 符號(hào)表及其基本實(shí)現(xiàn)”這里面的總結(jié)提到:
用有序數(shù)組的二分查找法提高了符號(hào)表的查找速度喘垂,但是插入效率仍舊沒有得到提高,而且在要維護(hù)數(shù)組有序绍撞,還需要進(jìn)行排序操作正勒。這兩種實(shí)現(xiàn)方式簡(jiǎn)單直觀,但是無(wú)法同時(shí)達(dá)到較高查找和插入效率傻铣。那么有沒有一種數(shù)據(jù)結(jié)構(gòu)既能夠在查找的時(shí)候有較高的效率章贞,在插入的時(shí)候也有較好的效率呢......
才發(fā)現(xiàn)二叉查找樹的引子是基于這樣的思考,以前看到二叉查找樹就是相當(dāng)然的
其實(shí)最開始找到的是Poll的筆記?的一篇文章非洲,
[Data Structure & Algorithm] 七大查找算法
里面簡(jiǎn)單明了的介紹了查找算法鸭限,文章中還有作者應(yīng)用的其它資料,上面提到的寒江獨(dú)釣也是從這里發(fā)現(xiàn)的(不得不感嘆两踏,大神無(wú)處不在)
關(guān)于查找算法里覆,個(gè)人覺得樹表查找比較麻煩一些,總是懵懵懂懂看過后缆瓣,就是這個(gè)地方很容易遺忘
整體結(jié)構(gòu)如下喧枷,作者從簡(jiǎn)單的二叉查找樹開始介紹,只要自己靜下心一步步看下去弓坞,就整個(gè)豁然開朗了隧甚,至少對(duì)于樹表查找一系列的算法思想能有所了解,可以反復(fù)重覆體味
最簡(jiǎn)單的樹表查找算法——二叉樹查找算法
平衡查找樹之2-3查找樹(2-3 Tree)
平衡查找樹之紅黑樹(Red-Black Tree)
B樹和B+樹(B Tree/B+ Tree)
二叉樹在最壞的情況下仍然會(huì)有O(n)的時(shí)間復(fù)雜度渡冻,退化成鏈表
其關(guān)于樹表查找總結(jié):
二叉查找樹平均查找性能不錯(cuò)戚扳,為O(logn),但是最壞情況會(huì)退化為O(n)。
我們?cè)谧顗牡那闆r下仍然有較好的時(shí)間復(fù)雜度寞蚌,這就是平衡查找樹設(shè)計(jì)的初衷?
在二叉查找樹的基礎(chǔ)上進(jìn)行優(yōu)化,我們可以使用平衡查找樹葬馋。平衡查找樹中的2-3查找樹砍艾,這種數(shù)據(jù)結(jié)構(gòu)在插入之后能夠進(jìn)行自平衡操作蒂教,從而保證了樹的高度在一定的范圍內(nèi)進(jìn)而能夠保證最壞情況下的時(shí)間復(fù)雜度。
但是2-3查找樹實(shí)現(xiàn)起來(lái)比較困難脆荷,紅黑樹是2-3樹的一種簡(jiǎn)單高效的實(shí)現(xiàn)凝垛,他巧妙地使用顏色標(biāo)記來(lái)替代2-3樹中比較難處理的3-node節(jié)點(diǎn)問題。紅黑樹是一種比較高效的平衡查找樹蜓谋,應(yīng)用非常廣泛梦皮,很多編程語(yǔ)言的內(nèi)部實(shí)現(xiàn)都或多或少的采用了紅黑樹。
除此之外桃焕,2-3查找樹的另一個(gè)擴(kuò)展——B/B+平衡樹剑肯,在文件系統(tǒng)和數(shù)據(jù)庫(kù)系統(tǒng)中有著廣泛的應(yīng)用。
作者還有些其它的文章也是不錯(cuò)
[Data Structure] 數(shù)據(jù)結(jié)構(gòu)中各種樹
[Data Structure & Algorithm] 八大排序算法
關(guān)于紅黑樹和AVL樹的比較
紅黑樹并不追求“完全平衡”——它只要求部分地達(dá)到平衡要求观堂,降低了對(duì)旋轉(zhuǎn)的要求让网,從而提高了性能;紅黑樹是一個(gè)更高效的檢索二叉樹型将,因此常常用來(lái)實(shí)現(xiàn)關(guān)聯(lián)數(shù)組
AVL樹是最先發(fā)明的自平衡二叉查找樹
紅黑樹的算法時(shí)間復(fù)雜度和AVL相同,但統(tǒng)計(jì)性能比AVL樹更高荐虐。
PS:想對(duì)于紅黑樹有原理七兜、實(shí)現(xiàn)深入了解可以參考skywang12345 寫到文章
(02)紅黑樹(二)之 C語(yǔ)言的實(shí)現(xiàn)
(03)紅黑樹(三)之 Linux內(nèi)核中紅黑樹的經(jīng)典實(shí)現(xiàn)
(05)紅黑樹(五)之 Java的實(shí)現(xiàn)
(06)紅黑樹(六)之 參考資料
MySQL索引背后的數(shù)據(jù)結(jié)構(gòu)及算法原理
待更新.......