紅黑樹和b樹應用場景有何不同?
2者都是有序資料結構,可用作資料容器。
紅黑樹多用在內部排序,即全放在記憶體中的,微軟stl的map和set的內部實現就是紅黑樹。
b樹多用在記憶體裡放不下,大部分資料儲存在外存上時。因為b樹層數少,因此可以確保每次操作,讀取磁碟的次數盡可能的少。
在資料較小,可以完全放到記憶體中時,紅黑樹的時間複雜度比b樹低。
反之,資料量較大,外存中佔主要部分時,b樹因其讀磁碟次數少,而具有更快的速度
b樹是為了提高磁碟或外部儲存裝置查詢效率而產生的一種多路平衡查詢樹。
b+樹為b樹的變形結構,用於大多數資料庫或檔案系統的儲存而設計。
b樹相對於紅黑樹的區別
在大規模資料儲存的時候,紅黑樹往往出現由於樹的深度過大而造成磁碟io讀寫過於頻繁,進而導致效率低下的情況。 根據磁碟查詢訪問的次數往往由樹的高度所決定,所以,只要我們通過某種較好的樹結構減少樹的結構儘量減少樹的高度,b樹可以有多個子女,從幾十到上千,可以降低樹的高度。
b樹和b+樹的區別
b樹所有葉子結點都出現在同一層,葉子結點不包含任何關鍵字資訊。
b+樹所有的葉子結點中包含了全部關鍵字的資訊,及指向含有這些關鍵字記錄的指標,且葉子結點本身依關鍵字的大小自小而大的順序鏈結,所有的非終端結點可以看成是索引部分,結點中僅含有其子樹根結點中最大(或最小)關鍵字。 (而b 樹的非終節點也包含需要查詢的有效資訊)
為什麼說b+比b樹更適合實際應用中作業系統的檔案索引和資料庫索引?
1) b+的磁碟讀寫代價更低
b+的內部結點並沒有指向關鍵字具體資訊的指標。因此其內部結點相對b樹更小。如果把所有同一內部結點的關鍵字存放在同一盤塊中,那麼盤塊所能容納的關鍵字數量也越多。一次性讀入記憶體中的需要查詢的關鍵字也就越多。相對來說io讀寫次數也就降低了。
2) b+-tree的查詢效率更加穩定
由於非終結點並不是最終指向檔案內容的結點,而只是葉子結點中關鍵字的索引。所以任何關鍵字的查詢必須走一條從根結點到葉子結點的路。所有關鍵字查詢的路徑長度相同,導致每乙個資料的查詢效率相當。
資料庫索引採用b+樹的主要原因是 b樹在提高了磁碟io效能的同時並沒有解決元素遍歷的效率低下的問題。正是為了解決這個問題,b+樹應運而生。b+樹只要遍歷葉子節點就可以實現整棵樹的遍歷。而且在資料庫中基於範圍的查詢是非常頻繁的,而b樹不支援這樣的操作(或者說效率太低)
B樹 B 樹 B 樹 B 樹 紅黑樹
b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就進...
B樹 B 樹 B 樹 B 樹 紅黑樹
b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就進...
B樹 B 樹 B 樹 B 樹 紅黑樹
b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就進...