AVL樹,紅/黑樹狀結構,B-B+樹,Trie樹原理和應用

來源:互聯網
上載者:User

標籤:資料結構   樹   紅/黑樹狀結構   

前言:本文章來源於我在知乎上回答的一個問題
AVL樹,紅/黑樹狀結構,B樹,B+樹,Trie樹都分別應用在哪些現實情境中?
看完後您可能會瞭解到這些資料結構大致的原理及為什麼用在這些情境,文章並不涉及具體操作(如插入刪除等等)

目錄
  • AVL樹
    • AVL樹原理與應用
  • 紅/黑樹狀結構
    • 紅/黑樹狀結構原理與應用
  • B/B+樹
    • B/B+樹原理與應用
  • Trie樹
    • Trie樹原理與應用
AVL樹

簡介:
AVL樹是最早的自平衡二叉樹,在早期應用還相對來說比較廣,後期由於旋轉次數過多而被紅/黑樹狀結構等結構取代(二者都是用來搜尋的),AVL樹內部是有序的。

原理:
平衡二叉樹,一般是用平衡因子差值判斷是否平衡並通過旋轉來實現平衡,左右子樹樹高差不超過1,那麼和紅/黑樹狀結構比較它是嚴格的平衡二叉樹,平衡條件非常嚴格(樹高差只有1),只要插入或刪除不滿足上面的條件就要通過旋轉來保持平衡。由於旋轉是非常耗費時間的。我們可以推出AVL樹適合用於插入刪除次數比較少,但尋找多的情況,並且保證深度是Olog(n)。

為一棵AVL樹

側邊是平衡因子,我們可以看到任意節點的左右子樹的平衡因子差值都不會大於1,所以維持這顆強平衡二叉樹的條件就非常嚴格了。

應用:
Windows核心通過AVL樹來儲存一些離散的地址空間.
原因可能是訪問次數多於插入刪除的次數。AVL樹的高度較低於紅/黑樹狀結構等

紅/黑樹狀結構

簡介:
平衡二叉樹,由於旋轉次數較少在插入刪除操作多的情況下效能高於其他平衡二叉樹,所以被廣泛應用。內部是有序的

原理:
平衡二叉樹,通過對任何一條從根到葉子的簡單路徑上各個節點的顏色進行約束(紅和黑),確保沒有一條路徑會比其他路徑長2倍,因而是近似平衡的(一個節點的兩棵子樹高度不會相差二倍),是一棵弱平衡二叉樹。所以相對於嚴格要求平衡的AVL樹來說,它的旋轉保持平衡次數較少。用於搜尋時,插入刪除次數多的情況下我們就用紅/黑樹狀結構來取代AVL。

一個簡單的紅/黑樹狀結構

應用:
1.c++STL 包括set,multiset,map,multimap(侯捷前輩的STL源碼剖析比較詳細)。c++關聯容器
java容器中的TreeMap

2.IO多工epoll,內部用紅/黑樹狀結構來維持我們想要監控的socket。以支援快速的插入和刪除

3.nginx中定時器是用紅/黑樹狀結構來維持的,因為紅/黑樹狀結構是有序的,每次從紅/黑樹狀結構內部取出最小的定時器即可。

4.linux核心中用紅/黑樹狀結構來管理進程的記憶體使用量,進程的虛擬位址空間塊都以虛擬位址為key值掛在這棵紅/黑樹狀結構上。

B/B+樹

簡介:
B/B+樹主要用在資料庫或者大型索引資料中,是一種多路尋找樹。(注意B樹和B-樹是同一個,B-樹不是”B減樹”,”-“僅僅是個符號)

原理:
B樹,B+樹:它們特點是一樣的,是多路尋找樹,一般用於資料庫系統中,為什麼,因為它們分支多層數少唄(一般一個節點有成千上萬個子節點,所以B樹層數是非常少的,節點個數為N個高度為logN,但是這個log的底數不是我們常用的2了,而是一個節點的子節點個個數,底數非常大從而樹高度很低),都知道磁碟IO是非常耗時的(和記憶體訪問速度差千倍),而像大量資料存放區在磁碟中所以我們要有效減少磁碟IO次數避免磁碟頻繁的尋找。減少磁碟IO就意味著提升效能。

B+樹是B樹的變種樹,有n棵子樹的節點中含有n個關鍵字,每個關鍵字不儲存資料(也就是節點只儲存key),只用來索引,資料都儲存在葉子節點。是為檔案系統而生的。

一棵B樹

一棵B+樹

應用:
B樹一般用在資料庫等大型索引,主要原因就是層數少,重點—>減少避免磁碟IO
B+樹適應檔案系統,想下檔案系統的樣子,目錄並不儲存檔案只有底層葉子節點儲存資料。

Trie樹

簡介:
又名單詞尋找樹,主要處理字串,字串的相同首碼儲存在相同的節點中。它的變種樹非常多。
比如:
首碼樹(prefix tree),尾碼樹(suffix tree)
詳情見 從首碼樹談到尾碼樹

radix tree(patricia tree, compact prefix tree, 基數樹)

crit-bit tree(解決耗費記憶體問題)

double array trie

原理:
它是不同字串的相同首碼只儲存一份。
相對直接儲存字串肯定是節省空間的,但是它儲存大量字串時會很耗費記憶體(是記憶體)。

類似

應用:
首碼樹(prefix tree):
1.字串快速檢索
2.字串排序
3.最長公用首碼
4.自動匹配首碼顯示尾碼。

尾碼樹(suffix tree):
1.尋找字串s1在s2中
2.字串s1在s2中出現的次數
3.字串s1,s2最長公用部分
4.最長迴文串
詳情還是見
從首碼樹談到尾碼樹

radix樹:
1.ip路由表–《TCP/IP詳解卷2:實現》筆記–Radix樹路由表
2.linux核心記憶體管理–戳linux核心radix

完

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

AVL樹,紅/黑樹狀結構,B-B+樹,Trie樹原理和應用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.