33 多路查詢樹

2022-08-02 08:15:10 字數 2310 閱讀 4767

二叉樹的操作效率較高,但是也存在問題, 請看下面的二叉樹:

二叉樹需要載入到記憶體的,如果二叉樹的結點少,沒有什麼問題,但是如果二叉樹的結點很多(比如 1 億), 就存在如下問題:

在電腦科學中,b 樹(b-tree) 是一種樹狀資料結構,它能夠儲存資料,對其進行排序並允許以 o(log n) 的時間複雜度執行進行查詢、順序讀取、插入和刪除的資料結構。

首先,b 樹不要和二叉樹混淆,在電腦科學中,b 樹是一種自平衡樹資料結構,它維護有序資料並允許以對數時間進行搜尋,順序訪問,插入和刪除。b 樹是二叉搜尋樹的一般化,因為節點可以有 2 個以上的子節點。與其他自平衡二進位制搜尋樹不同,b 樹非常適合讀取和寫入相對較大的資料塊(如光碟)的儲存系統。它通常用於資料庫和檔案系統(mysql 和 berkeley db 都是基於 b 樹原理而建立資料庫的)。

注意! b-tree 即 b樹,b 即 balanced,平衡的意思。有人把 b-tree 翻譯成「b-樹」,容易讓人產生誤解。會以為 「b-樹」是一種樹,而「b樹」又是另一種樹。實際上,b-tree 就是指的 b 樹。

b 樹的出現是為了彌合不同的儲存級別之間的訪問速度上的巨大差異,實現高效的 i/o。平衡二叉樹的查詢效率是非常高的,並可以通過降低樹的深度來提高查詢的效率。但是當資料量非常大,樹的儲存的元素數量是有限的,這樣會導致二叉查詢樹結構由於樹的深度過大而造成磁碟 i/o 讀寫過於頻繁,進而導致查詢效率低下。另外資料量過大會導致記憶體空間不夠容納平衡二叉樹所有結點的情況。b樹是解決這個問題的很好的結構。

b 樹通過重新組織結點,降低樹的高度,並且減少 i/o 讀寫次數來提公升效率。檔案系統及資料庫系統的設計者利用了磁碟預讀原理,將乙個結點的大小設為等於乙個頁(頁得大小通常為 4k),這樣每個結點只需要一次 i/o 就可以完全載入。將樹的度 m 設定為 1024,在 600 億個元素中最多隻需要 4 次 i/o 操作就可以讀取到想要的元素,b(b+) 樹廣泛應用於檔案儲存系統以及資料庫系統中。

b 樹是一種平衡的多分樹,通常我們說 m 階的 b 樹,它必須滿足如下條件:

2-3 樹是最簡單的 b 樹結構

有 2 個 value 且 有 3 個子結點的結點叫3-結點,3-結點 要麼沒有子結點,要麼有 3 個子結點

2-3樹是由 2-結點 和 3-結點 構成的樹

將二叉查詢樹的演算法一般化就能得到2-3樹的查詢演算法。要判斷乙個 value 是否在樹中,我們先將它和根結點中的 value 進行比較。如果它和其中任意乙個相等,查詢命中;否則我們就根據比較的結果找到指向相應區間的鏈結,並在其指向的子樹中遞迴地繼續查詢。如果這是個空樹,查詢未命中。

將數列 構建成 2-3 樹,並保證資料插入的大小順序。

b 樹,概括來說是乙個節點可以擁有多於 2 個子結點的二叉排序樹;前面已經介紹了 2-3 樹和 2-3-4 樹,他們都是 b 樹。

b+ 樹是 b 樹的變體,也是一種多路搜尋樹。

b* 樹是 b+ 樹的變體,在 b+ 樹的非根和非葉子結點再增加指向兄弟的指標。

多路查詢樹

二叉樹的操作效率較高,但是也存在問題,請看下面的二叉樹 二叉樹需要載入到記憶體的,如果二叉樹的節點少,沒有什麼問題,但是如果二叉樹的節點很多 比如1億 就 存在如下問題 問題1 在構建二叉樹時,需要多次進行i o操作 海量資料存在資料庫或檔案中 節點海量,構建二叉樹時,速度有影響 問題2 節點海量,...

多路查詢樹

二叉樹的操作效率較高,但也存在問題 二叉樹需要載入到記憶體,如果二叉樹的節點少,沒有什麼問題,但是如果二叉樹的節點很多 比如1億 就存在如下問題 問題1 在構建二叉樹時,需要多次進行io操作 海量資料存在資料庫或檔案中 節點海量,構建二叉樹時,速度有影響 問題2 節點海量,也會造成二叉樹的高度很大,...

多路查詢樹

二叉樹的操作效率較高,但是也存在問題 二叉樹需要載入到記憶體的,如果二叉樹的節點少,沒有什麼問題,但是如果二叉樹的節點很多 比如1億 就存在如下問題 問題1 在構建二叉樹時,需要多次進行i o操作 海量資料存在資料庫或檔案中 節點海量,構建二叉樹時,速度有影響 問題2 節點海量,也會造成二叉樹的高度...