7.4.2B+樹

B+樹:

(1)每個分支節點最多有m個子樹(孩子節點)。

階:即看當前的B+樹是幾階B+樹,就看每個分支節點最多有幾個子樹,還是看最下一層有幾個分叉就是幾階???

葉子節點:最下邊的一層叫葉子節點(不是跟B樹一樣的失敗節點)

非葉根節點:當前的B+樹中根節點下邊還有子節點,即根節點不是最下邊的一層節點(葉子節點),則當前的根節點叫非葉子節點的根節點,即非葉根節點。

葉根節點:當前的B+樹只有一層,即只有一層根節點,根節點下邊再沒有子樹節點,則當前的根節點也是葉子節點(如圖2中的左一)

(2)非葉根節點至少有2棵子樹,其他每個分支節點至少有m/2向上取整個子樹,前者是為了讓B+樹盡可能的低,使查找效率高一點,所以要保持絕對平衡,即假如當前的根節點是非葉根節點,它如果有左子樹,則它必定有右子樹,否則不滿足B+樹要求(如圖2中的中間的圖),后者是為了讓B+樹的每個節點上的關鍵字盡可能的多,也是為了保證B+樹的高度沒那么高,提高查找效率

(3)節點的子樹個數與關鍵字的個數相等。即一個節點上有幾個關鍵字,則它就有幾個分叉,即就有幾個子樹,如(3,9,15)節點上有3個關鍵字,則它就有3個分叉,即3個子樹,(1,3)(6,8,9)(13,15)。注意與B樹區分,B樹上一個節點上有2個關鍵字它得有3個分叉,即3個子樹

(4)葉節點包含以上成所有的關鍵字+指向相應記錄的指針,葉節點中的關鍵字按大小順序排列,相鄰葉節點按大小順序相互鏈接起來,即葉節點那一層支持橫向順序查找。每個關鍵字對應了一個指向詳細記錄的指針(如葉節點的關鍵字是一個個學號,學號連接著每個學生的具體信息,即學號連接著記錄)

(5)跟分塊查找的索引表類似,所有分支節點上的各個關鍵字都只包含了關鍵字指向子節點上的所有關鍵字的最大值。比如(3,9,15)中的3就是它的子節點(1,3)中關鍵字最大值,9是子節點(6,8,9)中的最大值,15是子節點(13,15)的最大值

對比分塊查找:

B+樹的查找:

查找成功目標元素9(實際查找的是9所指的記錄): 從根節點開始找,第一個關鍵字15是它所有的子節點(所有的子節點指的是它的整個左子樹節點,包括子節點和孫子節點等待)中最大的關鍵字的值,15>9則如果目標元素存在,則它只能在15所指向的分塊中,讓指針指向下一級節點3,3是它所指的分塊中最大的關鍵字,3<9則9肯定不在3所指的分塊里,讓指針右移指向9,9==9,則在9所指的分塊里,讓指針下移,從左往右開始比較葉子節點,直到找到9==9,則9關鍵字所保存指針信息就可以找到9號元素的詳細記錄信息,進而讀出相應記錄

查找失敗目標元素7(實際查找的是7所指的記錄): 從根節點開始找,15>7則如果目標元素存在,則它只能在15所指向的分塊中,讓指針指向下一級節點3,3<7則7肯定不在3所指的分塊中,讓指針右移9,7<9則如果7存在7一定在9所指的分塊中,讓指針下移指向(6,8,9)節點,從左往右開始比較葉子節點,6<7指針右移,7<8,因為已經找的是最下一層的葉子節點了,如果沒找到7證明7不存在,則查找失敗

無論查找成功還是失敗都要走到最下一層即葉子節點處才能確定到底是否查找成功,因為分支節點上的范圍并不是實際的關鍵字,實際有哪些關鍵字其實是在葉子節點存放,但是B樹查找不是,可能停留在任何一層就能知道?是否能查找成功了。

B+樹VSB樹:

m階B樹:

(1)節點中的n個關鍵字對應n+1個分叉,即n+1個子樹

(2)B樹中為了保證樹不太高,節點上的關鍵字不太空,所以要求B樹中的根節點的關鍵字個數不能少于1個,即根節點關鍵字個數范圍(1,m-1)【根節點中最多的關鍵字個數和其他節點的關鍵字個數最多一樣】,其他節點的分叉不能少于m/2向上取整,則關鍵字個數不能少于m/2向上取整-1個,對于m階B樹,則每個節點的最多分叉有m個,即最多的關鍵字個數有m-1個,即其他節點的關鍵字個數范圍(m/2向上取整-1,m-1)

(3)在B樹中,各個節點包含的關鍵字是不會重復出現的

(4)B樹中的各個關鍵字也存儲了實際關鍵字對應的記錄存儲地址,即不用找到葉子節點,只要找到了這個關鍵字就相當于找到了記錄存儲地址即記錄信息,但是B+樹不行,B+樹一定要在葉子節點上找到了這個關鍵字,才能找到這個關鍵字的存儲記錄的地址,才能找到實際存放的數據信息

?

m階B+樹:

(1)節點中的n個關鍵字對應n個分叉,即n個子樹

(2)B+樹中為了保證樹不太高,節點上的關鍵字不太空,所以要求B+樹中的根節點的關鍵字個數不能少于1個,即根節點關鍵字個數范圍(1,m)【根節點中最多的關鍵字個數和其他節點的關鍵字個數最多一樣】,其他節點的分叉不能少于m/2,則關鍵字個數不能少于m/2向上取整個,對于m階B+樹,則每個節點的最多分叉有m個,即最多的關鍵字個數有m個,即其他節點關鍵字個數范圍為(m/2,m)

(3)B+樹葉子節點中包含全部的關鍵字,則某個關鍵字可能會在其他非葉子節點多次出現,如下圖2中的15關鍵字在3處出現

(4)在B樹中,所有非葉子節點僅起到索引查找作用,實際并不包含目標元素記錄的存儲地址,而只有找到葉子節點了,才能找到該關鍵字對應記錄的存儲記錄,如學生信息,學生信息是記錄,關鍵字是學號,一個學號對應一個學生記錄。非葉子節點的每個索引項(指非葉子節點中的關鍵字)只包含了子樹的最大關鍵字和指向該子樹的指針

B+樹中的各個節點存儲在磁盤,操作系統對磁盤的讀寫一般是以一個磁盤塊為單位,一般B+樹的一個節點就會存儲在某個磁盤塊中,即B+樹中所有的節點都是存儲在不同的磁盤塊里,因此從根節點開始查找,會先確定根節點到底在哪個磁盤塊中,然后把根節點所在的磁盤塊讀入內存,即把(15,56)所在磁盤塊讀入內存,讀入內存之后計算機就可以處理查詢數據,就可以知道要去哪個分支去找,比如要找關鍵字42,在讀入內存之后就知道要去56指向的分塊去找,現在知道了56所指的分塊存儲在磁盤什么位置之后,就會把56所指的分塊讀入內存,即(35,42,56)讀入內存后,九三級去查詢分塊內的數據,然后計算機發現42存儲在42所指的分塊中,然后通過內存中的信息就可以知道,42所指的葉子節點存儲在磁盤的哪個位置,然后操作系統再把42所指的分塊讀入內存,讀入內存之后就可以知道42這個關鍵字它所對應的記錄到底存儲在磁盤的哪個位置,然后再把記錄讀入內存。磁盤是一個慢速設備,每次要讀取磁盤塊數據都會花費大量時間,因此假如B+樹高度越高就意味著在讀取磁盤的過程中讀取次數越多,導致查找速度更慢,如何降低B+樹高度,即讓B+樹節點存儲更多的關鍵字,即這也是為什么B+樹上的非葉子節點不存儲實際的記錄地址了,這樣能節省更多的空間來存儲關鍵字,并且這些一個個節點是存儲在每個磁盤塊中,而每個磁盤塊大小基本固定如1kb,而讓每個磁盤塊包含盡可能多的關鍵字的信息,當節點的空間大了則每個節點存儲的關鍵字就多了,則磁盤上就包含了盡可能多的關鍵字信息了。。。。。。,即每個關鍵字不存儲記錄指針,會讓關鍵字更多,即分叉更多,即B+樹的高度越矮,即讀取磁盤的次數減少,即效率更高。B樹的一個關鍵字中還包含了記錄的存儲地址,這就意味著一個節點存儲的關鍵字就會少,這也就意味著磁盤塊中存儲的節點上的關鍵字就會少,則B樹會導致磁盤塊讀取次數增多,而磁盤塊讀取又耗時,則會降低效率

知識回顧:

?

好羅里吧嗦。。。。。。。。。。。。。。。。。。。。。?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/86446.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86446.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86446.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MFC獲取本機所有IP、局域網所有IP、本機和局域網可連接IP

獲取本機所有IP地址 // 獲取本機所有IP地址 int CMachine::GetLocalIPs(std::vector<CString>& vIPValue) {//返回IP數量&#xff0c; -1表示獲取失敗vIPValue.clear();int IpNum 0;//1.初始化wsa WSADATA wsaData;int ret WSAStartup(MAKEWORD(2, 2), &wsaD…

【C語言】貪吃蛇小游戲

1. 所需知識 C語言函數、枚舉、結構體、動態內存管理、預處理指令、鏈表、Win32 API... 2. Win32 API介紹 2.1 Win32 API windows這個多作業系統除了協調應用程序的執行、分配內存、管理資源之外&#xff0c;它同時也是一個很大的服務中心&#xff0c;調用這個服務中心的各種…

PostgreSQL 容器化分布式技術方案

&#x1f4cb; 目錄 引言&#xff1a;為什么選擇容器化PostgreSQLPostgreSQL容器化基礎分布式架構設計高可用實現方案讀寫分離架構動態擴縮容策略生產環境實踐總結與展望 引言&#xff1a;為什么選擇容器化PostgreSQL 在數字化轉型的浪潮中&#xff0c;數據庫作為企業的"…

NV025NV033美光固態閃存NV038NV040

美光固態閃存技術突破與市場布局深度解析 一、技術突破&#xff1a;232層NAND閃存與高密度存儲的革新 美光NV系列固態閃存的核心競爭力源于其232層NAND閃存技術&#xff0c;這一技術通過垂直堆疊工藝&#xff0c;將存儲單元層層疊加&#xff0c;宛如在指甲蓋面積內構建超過20…

Matplotlib 繪圖庫從入門到精通:Python 數據可視化全解析

引言 在數據科學的世界里&#xff0c;"一圖勝千言" 這句話有著深刻的含義。數據可視化不僅是數據分析師展示成果的重要手段&#xff0c;更是數據科學家探索數據、發現規律的強大工具。Matplotlib 作為 Python 生態系統中最著名的數據可視化庫&#xff0c;為我們提供…

北斗導航 | 基于CNN-LSTM-PSO算法的接收機自主完好性監測算法

接收機自主完好性監測 原理概述1. 算法架構2. 核心創新點3. 工作流程數學模型1. CNN特征提取2. LSTM時序建模3. PSO優化決策MATLAB完整代碼算法優勢性能對比應用場景擴展方向原理概述 1. 算法架構 #mermaid-svg-fITV6QrXL1fNYFwG {font-family:"trebuchet ms",verda…

【微信小程序】9、用戶拒絕授權地理位置后再次請求授權

1、獲取用戶當前的地理位置 在本專欄的上一篇文章中講了如何 獲取用戶當前的地理位置 首次請求 wx.getLocation API 后&#xff0c;會拉起用戶授權界面 但這時用戶可能會拒絕授權&#xff0c;當你再次請求 wx.getLocation API 后&#xff0c;沒有任何效果。 2、打開設置 用…

嵌入式Linux驅動開發基礎-1 hello驅動

1:APP打開的文件在內核中如何表示 1.1 APP 打開文件時&#xff0c;可以得到一個整數&#xff0c;這個整數被稱為文件句柄。對于 APP 的每一個文件句柄&#xff0c;在內核里面都有一個“struct file ”與之對應 當我們使用 open 打開文件時&#xff0c;傳入的 flags 、 mode…

目標跟蹤存在問題以及解決方案

3D 跟蹤 一、數據特性引發的跟蹤挑戰 1. 點云稀疏性與遠距離特征缺失 問題表現&#xff1a; 激光雷達點云密度隨距離平方衰減&#xff08;如 100 米外車輛點云數不足近距離的 1/10&#xff09;&#xff0c;導致遠距離目標幾何特征&#xff08;如車輪、車頂輪廓&#xff09;不…

JavaSE-JDK安裝

目錄 一.在官網下載安裝包 二.安裝JDK 三.檢測JDK是否安裝成功 四.配置系統環境變量 一.在官網下載安裝包 Oracle官網https://www.oracle.com/cn/java/technologies/downloads/ 二.安裝JDK 1.首先在C盤以為的其他盤中創建一個自己可以找到的存放JDK路徑&#xff1a; 2.雙擊下…

使用docker搭建redis主從架構,一主2從

使用Docker搭建Redis主從架構&#xff08;一主兩從&#xff09; Redis主從架構是提高系統可用性和讀取性能的重要方案&#xff0c;通過Docker可以快速搭建該架構。下面將詳細介紹搭建步驟。 架構設計 我們將搭建包含以下組件的架構&#xff1a; 1個主節點&#xff08;Maste…

機器學習3——參數估計之極大似然估計

參數估計 問題背景&#xff1a; P ( ω i ∣ x ) p ( x ∣ ω i ) P ( ω i ) p ( x ) p ( x ) ∑ j 1 c p ( x ∣ ω j ) P ( ω j ) \begin{aligned} & P\left(\omega_i \mid \mathbf{x}\right)\frac{p\left(\mathbf{x} \mid \omega_i\right) P\left(\omega_i\right)…

Spring AOP Pointcut 表達式的語法是怎樣的?(execution(...) 是最常用的,還有哪些

Pointcut 表達式是 AOP 的核心&#xff0c;我將詳細解析最常用的 execution 表達式&#xff0c;并介紹其他幾種同樣非常有用的表達式。 1. execution 指示符 (最常用&#xff0c;最強大) execution 用于匹配方法的執行&#xff08;Join Point&#xff09;。它的語法結構最為完…

基于 SpringBoot+Vue 的臺球廳管理系統的設計與實現(畢業論文)

基于 SpringBootVue 的臺球廳管理系統的設計與實現&#xff08;模板&#xff09;[三號宋體加粗&#xff0c;居中] 摘 要[首行縮進2字符&#xff0c;五號黑體加粗]&#xff1a;摘要內容[五號楷體]本文所提出的基于J2EE/EJB標準的電子化采購平臺及其CRM組件綜合解決方案&#xf…

運營醫療信息化建設的思路

醫療機構加強運營管理&#xff0c;必須依賴強有力的醫院信息系統。信息化很重要&#xff0c;但不能為了信息化而信息化。運營信息化必須有明確的建設目標。 運營信息化建設的目標&#xff0c;包括幾個方面&#xff1a; 1.實時反映業務&#xff1b; 2.體現內控思維&#xff1b…

6.24_JAVA_微服務day07_RabbitMQ高級

1、 RabbitListener(queuesToDeclare/*此處是固定寫法&#xff0c;只能寫這個玩意兒&#xff0c;因為這里是庫里的方法*/ Queue(name "lazy.queue",//如果不存在就創建lazy.queue隊列durable "true",//把耐用打開arguments Argument(name "x-que…

Python打卡:Day38

知識點回顧&#xff1a; Dataset類的__getitem__和__len__方法&#xff08;本質是python的特殊方法&#xff09;Dataloader類minist手寫數據集的了解 浙大疏錦行

質量管理五大核心工具之SPC

SPC&#xff08;Statistical Process Control&#xff0c;統計過程控制&#xff09;是一種基于統計學的質量控制方法&#xff0c;旨在通過監控和分析生產過程數據&#xff0c;識別異常波動并消除異常因素&#xff0c;從而確保過程穩定受控&#xff0c;提升產品質量一致性145。以…

【世紀龍科技】新能源汽車VR虛擬體驗展示館-解鎖認知新維度

解鎖新能源汽車深度認知新維度&#xff1a;沉浸式 VR 虛擬體驗展示館 在科技不斷突破邊界的當下&#xff0c;人們對新能源汽車的探索渴望愈發強烈。無論是希望深入了解行業發展脈絡的求知者&#xff0c;還是想要直觀掌握汽車技術原理的學習者&#xff0c;傳統的展示方式似乎總…

oracle基礎審計管理

Oracle數據庫審計功能詳解(簡單易懂!) 更新時間&#xff1a;2024年01月30日 16:21:27 作者&#xff1a;前程的前程也迷茫 Oracle審計查詢是一項重要的任務,可以幫助DBA更好的管理Oracle數據庫,下面這篇文章主要給大家介紹了關于Oracle數據庫審計功能的相關資料,文中通過代碼介紹…