hjr-關於樹

引言

樹是一種數據結構,對於數據結構,需要記住的是概念特點,和具有的功能

  • 根節點:最上面的那個節點
  • 葉子節點:最下面一層的節點

二叉排序樹(二叉查找樹):

每個節點一個元素,兩個分支,當插入有序數列會造成單枝

特點

  1. 左子節點小於等於父節點
  2. 右子節點大於等於父節點
  3. 左右子節點可以作爲父節點

功能:

查找、插入、刪除

紅黑樹

兩個分支,是一種自平衡二叉查找樹,避免單枝問題

特點

  1. 每個節點或者是黑色,或者是紅色。
  2. 根節點是黑色
  3. 每個null葉子節點是黑色
  4. 如果一個節點是紅色的,則它的子節點必須是黑色的。
  5. 從一個節點到該節點的子孫節點的所有路徑上包含相同數目的黑節點

功能:

查找、插入、刪除

爲了保證滿足紅黑樹規則,在增刪節點後可能進行旋轉和變色

旋轉:子節點位置轉換

變色:紅黑色轉換

紅黑樹和平衡二叉樹區別:

  1. 紅黑樹放棄了追求完全平衡,追求大致平衡,在與平衡二叉樹的時間複雜度相差不大的情況下,保證每次插入最多只需要三次旋轉就能達到平衡,實現起來也更爲簡單。

  2. 平衡二叉樹追求絕對平衡,條件比較苛刻,實現起來比較麻煩,每次插入新節點之後需要旋轉的次數不能預知。

B樹(多叉查找樹):

每個節點有多個元素,有多個分支

特點

  1. 根結點至少有兩個子女;
  2. 每個非根節點所包含的元素數滿足大於層數的一半小於層數
  3. 除根結點和葉子結點以外的所有結點的子女數目正好是元素數加1
  4. 所有的葉子結點都位於同一層。

B-樹

  1. 集合分佈在整棵樹中;
  2. 任何一個元素出現且只出現在一個結點中;
  3. 搜索有可能在非葉子結點結束;
  4. 其搜索性能等價於在元素全集內做一次二分查找;
  5. 自動層次控制;

B+樹

  1. 有n棵子樹的結點中含有n個元素
  2. 所有的葉子結點中包含了全部元素的信息,及指向含有這些元素記錄的指針,且葉子結點本身依元素的大小自小而大的順序鏈接。
  3. 所有的非終端結點可以看成是索引部分,結點中僅含有其子樹根結點中最大(或最小)
  4. B+樹的有效內容均在葉子節點

B+樹的頭指針有兩個,一個指向根節點,另一個指向最小的元素,因此B+樹有兩種遍歷的方式:
1.從根節點開始隨機查詢
2.從最小關鍵詞順序查詢

爲什麼說B+樹比B 樹更適合實際應用中操作系統的文件索引和數據庫索引?

B+樹的磁盤讀寫代價更低
B+樹的內部結點並沒有指向關鍵字具體信息的指針。因此其內部結點相對B 樹更小。如果把所有同一內部結點的關鍵字存放在同一盤塊中,那麼盤塊所能容納的關鍵字數量也越多。一次性讀入內存中的需要查找的關鍵字也就越多。相對來說IO讀寫次數也就降低了。
舉個例子,假設磁盤中的一個盤塊容納16bytes,而一個關鍵字2bytes,一個關鍵字具體信息指針2bytes。一棵9階B-tree(一個結點最多8個關鍵字)的內部結點需要2個盤快。而B+樹內部結點只需要1個盤快。當需要把內部結點讀入內存中的時候,B 樹就比B+樹多一次盤塊查找時間(在磁盤中就是盤片旋轉的時間)。

B+樹的查詢效率更加穩定
由於非終結點並不是最終指向文件內容的結點,而只是葉子結點中關鍵字的索引。所以任何關鍵字的查找必須走一條從根結點到葉子結點的路。所有關鍵字查詢的路徑長度相同,導致每一個數據的查詢效率相當。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章