B樹簡單理解

2021-07-15 09:26:19 字數 1744 閱讀 9582

平衡二叉排序樹便於動態查詢,因此用平衡二叉排序樹來組織索引表是一種可行的選擇。當用於大型資料庫時,所有資料及索引都儲存在外存,因此,

涉及到內、外存之間頻繁的資料交換

,這種交換速度的快慢成為制約動態查詢的瓶頸。若以二叉樹的結點作為內、外存之間資料交換單位,則查詢給定關鍵字時對磁碟平均進行㏒㏒次訪問是不能容忍的(

樹的深度過大而造成磁碟i/o讀寫過於頻繁,進而導致查詢效率低下)。

磁碟讀取資料是以盤塊(block)為基本單位的。位於同一盤塊中的所有資料都能被一次性全部讀取出來。而磁碟io代價主要花費在查詢時間ts上。因此我們應該盡量將相關資訊存放在同一盤塊,同一磁軌中。或者至少放在同一柱面或相鄰柱面上,以求在讀/寫資訊時儘量減少磁頭來回移動的次數,避免過多的查詢時間ts

所以,在大規模資料儲存方面,大量資料儲存在外存磁碟中,而在外存磁碟中讀取

/寫入塊

(block)

中某資料時,首先需要定位到磁碟中的某塊,如何有效地查詢磁碟中的資料,需要一種合理高效的外存資料結構,就是下面所要重點闡述的

b-treeb+-tree結構和b*-tree結構。

因此,必須選擇一種能盡可能降低磁碟i/oi/o次數的索引組織方式。樹結點的大小盡可能地接近頁的大小。

b樹主要用於檔案系統中,

在b樹中,每個節點的大小為乙個磁碟的頁

,節點中鎖包含的關鍵字及其子節點的數目取決於頁的大小。乙個度為m的b樹,稱為m階b樹,定義如下:

(1)乙個m階b樹,或者是空樹,或者滿足一下性質的m叉樹;

(2)根節點或者是葉子,或者至少有兩顆子樹,至多是m棵子樹;

(3)除根節點外,所有非終端節點至少是「m/2 (向上取整)棵子樹,至多是m棵子樹;

(4)所有葉子節點都在樹的同一層上。

下圖為b樹的乙個例子:

1,b樹的資料結構,根據以上的資訊,定義b樹的資料結構如下:

//節點資料結構的定義

typedef struct btnode

btnode;

2,b樹的查詢

查詢的基本思想是:

(1)從樹的根節點t開始,在節點中利用遍歷或折半查詢給定的值,如果找到,則返回節點指標和在節點中的位置;如果沒有,則到(2)

(2)與節點中的key進行比較,找到給定值左右key中間的指標,去其子樹中查詢

(3)重複執行1,2兩步,直到找到。如果直到葉子節點,仍未找到,則返回0,並返回最後搜尋的葉子節點。(此節點是給定值需要插入的位置)

3,b樹的插入

插入新節點的基本思想如下:

(1)在b樹查詢關鍵字,如果找到,則不插入;否則,執行(2)

(2)將給定值插入到葉子節點中,如果:

a,葉子的節點數

b,葉子的節點數=m-1:插入節點,並將節點**。**的方式是將該節點拆分成兩個節點,然後,將中間節點插入到父節點當中,拆分後的兩個節點,分別作為插入到父節點的中間節點的左右子。如果中間節點插入到父節點後,仍然需要**,則繼續**,直到根節點。如果仍然需要**,則新建乙個根節點,將**後的兩個節點分別作為新根節點的兩個子節點。

例如如下圖:

紅黑樹,B樹,B 樹,B 樹 理解

紅黑樹rbtree 二叉排序樹 map 就是採用紅黑樹儲存的,紅黑樹 rb tree 是平衡二叉樹,其優點就是樹到葉子節點深度一致,查詢的效率也就一樣,為logn.在實行查詢,插入,刪除的效率都一致,而當是全部靜態資料時,沒有太多優勢,可能採用hash表各合適。hash map是乙個hash tab...

b樹和b 樹簡單描述

資料庫的b樹和b 樹,b樹的非葉子節點儲存資料,而乙個葉子節點對應的是檔案系統的乙個資料單元,也是磁碟上的一頁512,當既儲存資料,又儲存索引key值時 乙個節點的大小有限,既有資料又有key值,當樹的深度比較深時,必然會需要多次io才能找到key值 必然導致,查詢底層資料會經歷更多次的io,同時乙...

b樹與b 樹原理解析

b樹 balance tree 和b 樹應用在資料庫索引,可以認為是m叉的多路平衡查詢樹,但是從理論上講,二叉樹查詢速度和比較次數都是最小的,為什麼不用二叉樹呢?因為我們要考慮磁碟io的影響,它相對於記憶體來說是很慢的。資料庫索引是儲存在磁碟上的,當資料量大時,就不能把整個索引全部載入到記憶體了,只...