B樹、B+樹、紅黑樹區別

一、核心概念與性質對比

1. B樹(Balanced Tree)
  • 定位:多路平衡搜索樹,專為磁盤存儲優化

  • 核心性質

    • 每個節點存儲?k-1個鍵值k個子節點指針m/2 ≤ k ≤ m,m為階數)

    • 所有葉子節點位于同一層(高度平衡)

    • 節點內鍵值有序排列,左子樹鍵值均小于父節點,右子樹大于父節點

  • 優勢

    • 減少磁盤I/O:單節點存儲大量鍵值,樹高顯著降低(3-4層可存百萬數據)

    • 局部修改:插入/刪除僅影響局部節點,避免全局調整1

2. B+樹(B+ Tree)
  • 定位:B樹變種,數據庫索引標準結構

  • 核心性質

    • 非葉節點僅存鍵值(無數據指針),葉節點存數據并形成雙向鏈表

    • 非葉節點的鍵值在葉節點中重復出現(葉節點含所有數據)

  • 優勢

    • 范圍查詢高效:葉節點鏈表支持順序遍歷(如SQL的BETWEEN

    • 磁盤利用率更高:非葉節點容納更多鍵值,進一步降低樹高

    • 查詢穩定性:所有查詢路徑長度相同(均到葉節點)

3. 紅黑樹(Red-Black Tree)
  • 定位:自平衡二叉搜索樹,內存操作優化

  • 核心性質

    • 顏色約束:節點紅/黑交替,根和葉(NIL)為黑,無連續紅節點

    • 黑高平衡:任意節點到葉節點的路徑含相同黑節點數

  • 優勢

    • 近似平衡:最長路徑≤2倍最短路徑,保證O(log n)操作

    • 低維護成本:插入/刪除最多3次旋轉(遠少于AVL樹)

4. 三樹對比總結
特性B樹B+樹紅黑樹
結構多叉,數據存所有節點多叉,數據僅存葉子二叉,顏色標記平衡
樹高極低(3-4層百萬級)更低(同數據量更矮)較高(約2logN)
磁盤I/O優化優秀最優(索引更緊湊)
范圍查詢需中序遍歷葉子鏈表直接遍歷需中序遍歷
典型應用文件系統MySQL索引Java TreeMap

二、操作復雜度與設計邏輯

1.?B/B+樹:
  • 減少I/O次數

    • 節點大小 ≈ 磁盤頁(如4KB),單次I/O加載數百鍵值

    • 二叉查找樹需O(log n)次I/O,B樹僅需O(log_m n)(m為分支因子)

  • 插入/刪除邏輯

    • 節點分裂:鍵值超限 → 中位數提升至父節點,分裂兩子節點

    • 節點合并:鍵值不足 → 向兄弟節點借鍵或與父節點合并

2.?紅黑樹:
  • 旋轉與變色策略

    • 插入5種Case:如叔節點紅則變色;叔節點黑則旋轉(左旋/右旋)

    • 刪除7種Case:根據兄弟節點顏色調整(如兄弟紅則旋轉+變色)

  • 平衡代價

    • 查詢:O(log n)(常數比AVL大)

    • 插入/刪除:旋轉次數O(1),優于AVL樹的O(log n)


三、應用場景解析

1.?B樹:文件系統
  • 代表:NTFS、Ext4

  • 原因

    • 文件塊存儲分散,B樹局部修改特性減少磁盤寫入

    • 目錄結構需快速定位分散存儲的文件塊

2.?B+樹:數據庫索引
  • 代表:MySQL InnoDB

  • 原因

    • 范圍查詢高效:WHERE id BETWEEN 100 AND 200 → 葉節點鏈表遍歷

    • 聚簇索引優化:葉節點直接存行數據,避免二次查找

3.?紅黑樹:內存數據結構
  • 代表:Java TreeMap、C++ std::map

  • 原因

    • 插入/刪除頻繁(如HashMap沖突鏈轉樹)

    • 避免AVL樹嚴格平衡的高維護成本


四、常見問題總結

Q1:數據庫為什么用B+樹不用紅黑樹?

A:核心在于磁盤I/O優化范圍查詢支持

  • I/O次數:紅黑樹樹高約2logN,百萬數據需20次I/O;B+樹樹高僅3-4層(節點存數百鍵)。

  • 范圍查詢:B+樹葉節點鏈表直接遍歷;紅黑樹需中序遍歷(回溯棧易溢出)。

  • 數據局部性:B+樹非葉節點純索引,單頁緩存更多鍵值,縮小查找范圍。

Q2:B樹和B+樹區別?

A:聚焦數據存儲位置葉子結構

  • 數據存儲:B樹所有節點存數據;B+樹數據僅存葉子,非葉節點為索引。

  • 葉子鏈接:B+樹葉節點雙向鏈表支持順序訪問;B樹葉節點獨立。

  • 查詢穩定性:B樹查詢可能在非葉節點結束;B+樹必須到葉子(穩定O(log n))。

Q3:紅黑樹如何保證平衡?

A:通過顏色約束旋轉策略

  • 黑高平衡:任意路徑黑節點數相同,確保最長路徑≤2倍最短路徑。

  • 旋轉Case:插入分5種情況(如叔節點紅則變色,黑則旋轉);刪除分7種(兄弟節點顏色決定操作)。

  • 低開銷:插入/刪除最多3次旋轉(AVL可能需O(log n)次)。

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

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

相關文章

Spring AI 使用阿里百煉平臺實現流式對話:基于 SSE 的實踐

Spring AI阿里百煉平臺實現流式對話:基于 SSE 的實踐指南 在大模型應用開發中,流式對話是提升用戶體驗的關鍵特性。本文將詳細介紹如何利用 Spring AI 結合 Spring Boot,基于 SSE(Server-Sent Events)協議實現高效的流…

Ubuntu lamp

Ubuntu lamp 前言 在Ubuntu安裝lamp架構 我們了解到 lamp是完整的架構 我們前面了解到了 集合了Linux系統 apache MySQL 和PHP語言的完整架構 我們前面說了Centos7中編譯安裝 lamp 那么 我們去說一下在Ubuntu中安裝 ? ? 安裝apache2 ? apt直接安裝apache2 apt -y install a…

開源向量LLM - Qwen3-Embedding

1 Qwen3-Embedding介紹 Qwen3-Embedding遵循 Apache 2.0 許可證,模型大小從0.6B到8B,支持32k長文本編碼。 Model TypeModelsSizeLayersSequence LengthEmbedding DimensionMRL SupportInstruction AwareText EmbeddingQwen3-Embedding-0.6B0.6B2832K10…

云計算服務模式全解析:IaaS、PaaS、SaaS與DaaS的區別與應用

一、云計算概述 云計算是一種通過互聯網提供計算服務的模式,其核心特點是輸入/輸出與計算不在同一主機上。一個完整的云計算環境由云端(計算設備)、計算機網絡和終端(輸入/輸出設備)三部分組成,即"云…

qwen 多模態 預訓練流程步驟詳細介紹

Qwen(通義千問)是阿里云推出的大語言模型,其多模態預訓練是一個復雜且專業的過程,雖然官方沒有完全公開全部細節, 但從多模態大模型通用的預訓練邏輯上,一般包含以下主要步驟: 數據準備 多模態數…

FastDDS (SharedMemory)

SharedMemSegment Start // Fast-DDS/src/cpp/utils/shared_memory/SharedMemSegment.hppclass SharedSegmentBase {內部類 start class Id { public:typedef UUID<8> type;Id(); // 返回共享內存變量的IDId(const Id& other); // 設置共享內存變量的IDvoid g…

sqli-labs:Less-5關卡詳細解析

1. 思路&#x1f680; 本關的SQL語句為&#xff1a; $sql"SELECT * FROM users WHERE id$id LIMIT 0,1";注入類型&#xff1a;字符串型&#xff08;單引號包裹&#xff09;提示&#xff1a;參數id需以閉合 但有意思的是&#xff0c;php代碼的輸出語句不是如下這種…

標準項目-----網頁五子棋(4)-----游戲大廳+匹配+房間代碼

頁面實現 hall.html <!DOCTYPE html> <html lang"ch"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>游戲大廳</title><l…

MySQL分析步

MySQL分析 -- 庫名 set dbName bsa_crmeb_bak; -- 表名 set tableName bsa_crmeb_bak;-- 查看bsa_crmeb_bak數據庫基本信息 SELECTSCHEMA_NAME AS 數據庫名,DEFAULT_CHARACTER_SET_NAME AS 字符集,DEFAULT_COLLATION_NAME AS 排序規則 FROM information_schema.SCHEMATA WHER…

工程化(二):為什么你的下一個項目應該使用Monorepo?(pnpm / Lerna實戰)

工程化(二)&#xff1a;為什么你的下一個項目應該使用Monorepo&#xff1f;&#xff08;pnpm / Lerna實戰&#xff09; 引子&#xff1a;前端項目的“孤島困境” 隨著你的項目或團隊不斷成長&#xff0c;一個棘手的問題會逐漸浮現&#xff1a;代碼該如何組織&#xff1f; 最…

應用藥品注冊證識別技術,為醫藥行業的合規、高效與創新發展提供核心驅動力

在醫藥行業的龐雜數據海洋中&#xff0c;藥品注冊證&#xff08;如中國的“國藥準字”、美國的NDA/ANDA批號&#xff09;是藥品合法上市流通的“身份證”。面對海量的證書審核、錄入與驗證需求&#xff0c;傳統人工處理方式不僅效率低下、成本高昂&#xff0c;更易因疲勞導致差…

Spring Boot 2.1.18 集成 Elasticsearch 6.6.2 實戰指南

Spring Boot 2.1.18 集成 Elasticsearch 6.6.2 實戰指南前言&#xff1a;一. JAVA客戶端對比二. 導入數據2.1 分析創建索引2.2 代碼實現三. ElasticSearch 查詢3.1 matchAll 查詢3.2 term查詢3.3 match查詢3.4 模糊查詢3.5 范圍查詢3.6 字符串查詢3.7 布爾查詢3.8 分頁與排序3.…

向量投影計算,舉例說明

向量投影計算,舉例說明 向量投影是指將一個向量(設為向量b\mathbf{b}b)投射到另一個向量(設為向量a\mathbf{a}a)所在直線上,得到一個與a\mathbf{a}

如何在技術世界中保持清醒和高效

“抽象泄露&#xff0c;是存在的&#xff0c;但你需要了解多少&#xff0c;需要理解多深&#xff0c;這一點是因人而異的&#xff0c;絕對不是別人能夠建議的。每個人只會站在自己的立場上去建議別人怎么做。”在寫下這句話時&#xff0c;身為一個技術開發者&#xff0c;我似乎…

服裝公司數字化轉型如何做?

WL貿易集團公司&#xff08;以下簡稱WL&#xff09;自2012年成立以來&#xff0c;在十余年的發展歷程中不斷蛻變與升級。公司始終秉持“時尚與品質優先”的核心經營理念&#xff0c;通過嚴格執行高標準、嚴要求&#xff0c;牢牢把握產品品質與交貨周期兩大關鍵&#xff0c;贏得…

GM DC Monitor 之 銀河麒麟 Docker 部署安裝手冊

官方網站&#xff1a;www.gm-monitor.com 本手冊以銀河麒麟為例&#xff0c;介紹在 Linux 系統上安裝和配置DOCKER服務的詳細步驟 一、以root用戶執行以下操作命令 1、環境優化 modprobe br_netfilter cat <<EOF > /etc/sysctl.d/docker.conf net.bridge.bridge-n…

網絡編程接口bind學習

1、概述下面2個問題你會怎么回答呢?1、bind如果綁定0號端口&#xff0c;可以工作么&#xff0c;如果能正常工作&#xff0c;綁定的什么端口 2、客戶端可以調用bind么2、解析2.1、bind如果綁定0號端口&#xff0c;可以工作么&#xff0c;如果能正常工作&#xff0c;綁定的什么端…

FinOps X 2025 核心發布:AI 時代下的 FinOps 轉型

2025年&#xff0c;人工智能技術的突破性發展正深刻重塑商業與技術格局&#xff0c;智能技術已成為各領域創新的核心驅動力。在此背景下&#xff0c;FinOps X 2025 圍繞 AI 技術對財務運營&#xff08;FinOps&#xff09;的革新作用展開深度探討&#xff0c;重點呈現了以下關鍵…

使用Min-Max進行數據特征標準化

在數據處理過程中&#xff0c;標準化是非常重要的步驟之一&#xff0c;特別是在機器學習和數據分析中。Min-Max標準化&#xff08;也稱為歸一化&#xff09;是一種常用的數據標準化方法&#xff0c;它通過將數據縮放到一個指定的范圍&#xff08;通常是0到1之間&#xff09;&am…

【Dart 教程系列第 51 篇】Iterable 中 reduce 函數的用法

這是【Dart 教程系列第 51 篇】,如果覺得有用的話,歡迎關注專欄。 博文當前所用 Dart SDK:3.5.4 文章目錄 一:reduce 作用 二:舉例說明 1:求和 2:查找最大/最小值 3:字符串拼接 4:自定義對象合并 三:注意事項 一:reduce 作用 reduce 是 Iterable 的一個方法,用于…