B樹學習筆記之B樹的刪除
B樹的下溢發生於刪除關鍵碼後違反了B樹的性質 。
一. 旋轉
- 如果左右兄弟存在,則間接向左右兄弟借關鍵碼
二. 合併
B樹高度的減少只會發生於根節點的兩個孩子合併 。
三. 例項
1. 刪除249
不急於合併,先左顧右盼,向有兄弟接一個關鍵碼。
刪除操作順利結束。
2. 刪除619
664沒有左兄弟,右兄弟處於即將下溢的邊緣臨界狀態,旋轉技巧已不適用,選擇合併。
此時,父節點發生了下溢,繼續合併。
整棵B樹的高度降低了一層,這時B樹高度得以下降的唯一可能。
四. 總結
B樹被設計成相對矮寬,而對B樹的訪問是由一系列的外存操作和記憶體操作交替組成的。有多少外存操作,就有多少記憶體操作。但要使外存操作的代價與記憶體操作的代價大致相當。
- 水平方向:對應與每個節點的內部搜尋,在記憶體(RAM)中進行。
- 垂直方向:對應於磁碟(Disk)操作。樹中每下降一層,就要付出一次IO操作的代價。
相關推薦
B樹學習筆記之B樹的刪除
B樹的下溢發生於刪除關鍵碼後違反了B樹的性質 。一. 旋轉如果左右兄弟存在,則間接向左右兄弟借關鍵碼 二. 合併B樹高度的減少只會發生於根節點的兩個孩子合併 。三. 例項1. 刪除249不急於合併
sklearn學習筆記之決策樹分類和線性迴歸
decisoin tree: # -*- coding: utf-8 -*- import sklearn from sklearn import tree import matplotlib.pyplot as plt from sklearn.model_selection impor
機器學習筆記之決策樹ID3
機器學習筆記之決策樹 優點:計算複雜度不高,輸出結果易於理解,對中間值的缺失不敏感,可以處理不相關特 徵資料。 缺點:可能會產生過度匹配問題。 適用資料型別:數值型和標稱型。 資訊增益 劃分資料集最大的原則是:將無序的資料變得更加有序。我們可以使用多種方法劃分資
紅黑樹學習筆記之插入操作
紅黑樹是234樹的一種,它是自平衡的二叉查詢樹,其優點為可以在㏒(n)時間內完成查詢,刪除和插入的動作。性質1:節點為有色的(紅色和黑色)性質2:根節點以及所有的葉子節點為黑色性質3:所有的紅色節點的父節點為黑色節點(黑色節點的父節點可以為紅色也可以為黑色)性質4:從任意節點
普通平衡樹學習筆記之Splay演算法
# 前言 今天不容易有一天的自由學習時間,當然要用來“學習”。在此記錄一下今天學到的最基礎的平衡樹。 ## 定義 平衡樹是二叉搜尋樹和堆合併構成的資料結構,它是一 棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。 這裡僅僅說明一下平衡樹中的$Splay$演算法 ##
學習筆記:B樹建立,搜尋和刪除操作
#include <iostream> #include <queue> using namespace std; /****************************** PROGRAMER: Fanchenxin M階多路查詢樹: 1.定
數據機構與算法之美學習筆記:B+樹(第48講)
存儲空間 計算 數據庫 數據行 劃分數 需求 散列 動態 不可 一、解決問題的前提是定義清楚問題 通過對一些模糊需求進行假設,來限定要解決問題的範圍 根據某個值查找數據,比如 select * from use where id=1234; 根據區間值來查詢某些數據比
B樹 學習筆記3
接上,演算法導論 - 18.3 從B樹中刪除關鍵字 這一節沒有給出虛擬碼,寫起來怕是會有坑,放點參考: https://www.youtube.com/watch?v=svfnVhJOfMc ht
B樹與B+樹學習筆記
一般情況下,我們所討論的資料結構,都是處理在記憶體中的資料。因此考慮的都是記憶體中的運算時間複雜度。 如果我們要操作的資料集非常大,達到記憶體已經沒辦法處理了怎麼辦呢?如資料庫中的上千萬條記錄的資料表。硬碟中的上萬個檔案等。在這種情況下,對資料的處理需要不斷從硬碟燈儲存裝置中調入或調出記憶體頁面
資料結構與演算法之美專欄學習筆記-二叉樹基礎(上)
樹 節點的定義 樹中的元素稱之為節點 高度的定義 節點的高度:節點到葉子節點的最長路徑 樹的高度:跟節點的高度 深度的定義 根節點到這個節點所經歷的邊的個數 層的定義 節點的深度+1 二叉樹 滿二叉樹 除了葉子結點外每個節點都有左右兩個子節點 完全二叉樹 葉子結
資料結構與演算法之美專欄學習筆記-二叉樹基礎(下)
二叉查詢樹 Binary Search Tree 二叉查詢樹的定義 二叉查詢樹又稱二叉搜尋樹。其要求在二叉樹中的任意一個節點,其左子樹中的每個節點的值,都要小於這個節點的值,而右子樹的節點的值都大於這個節點的值。 二叉查詢樹的查詢操作 二叉樹類、節點類以及查詢方法的程式碼實現
數據結構與算法之美專欄學習筆記-二叉樹基礎(下)
binary 特性 child 數據大小 del delet 動態擴容 eve 怎麽 二叉查找樹 Binary Search Tree 二叉查找樹的定義 二叉查找樹又稱二叉搜索樹。其要求在二叉樹中的任意一個節點,其左子樹中的每個節點的值,都要小於這個節點的值,而右子樹的
紅黑樹學習筆記 — (1) 定義、插入、刪除
紅黑樹(RBT)本質上是一種二叉查詢樹(BST),但它在二叉查詢樹的基礎上額外添加了一個標記(顏色),同時具有一定的規則。這些規則使紅黑樹保證了一種平衡,插入、刪除、查詢的最壞時間複雜度都為 O(logn)。 五個特性 每個節點是黑色或紅色 根節點(roo
學習筆記之使用前序遍歷和中序遍歷構造二叉樹
總結一下學習筆記: 一、提出問題 給出一棵樹的前序遍歷和中序遍歷,構造二叉樹,你可以假設這棵樹中不存在重複的數。 例如:給出前序和中序遍歷序列:preorder = [3,9,20,15,7],inorder=[9,3,15,20,7] 得到如下所示的二叉樹:
機器學習筆記之九——決策樹原理以及舉例計算
決策樹是機器學習最基本的演算法之一,它本身作為一顆樹而言,十分簡單。 就是將特徵屬性放在結點的未知,按照特徵屬性將樣本分類,放在左子樹和右子樹。 而在左子樹和右子樹,繼續使用其他的特徵屬性作為結點,向下分類。 學習決策樹複雜的部分在
機器學習筆記之八—— knn-最簡單的機器學習演算法以及KD樹原理
上一節結束了線性迴歸、邏輯迴歸,今天一節來介紹機器學習中最簡單的演算法: K近鄰(KNN,全稱K-nearst Neighbor) 概述:判斷一個樣本的label只需要判斷該樣本週圍其他樣本的label。簡言之,朋
Bootstrap學習筆記之Nestable可拖拽樹結構
Nestable是基於Bootstrap的一個可拖拽的樹結構表現外掛。 下面粗略的介紹一下它的用法,只作為學習參考,如有不合適之處,請各位湊合看。 下圖是我在現在系統中用到的Nestable,對系統模組排序。 1.首先是需要引入的檔案 bootstrap.min
《機器學習實戰》筆記之九——樹迴歸
第九章 樹迴歸 CART演算法迴歸與模型樹樹減枝演算法python中GUI的使用 線性迴歸需要擬合所有的樣本點(區域性加權線性迴歸除外),當資料擁有眾多特徵並且特徵之間關係十分複雜時,就不可能使用全域性線性模型來擬合任何資料。 將資料集切分成很多份易建模的資料,再用線性
Java學習筆記之二叉樹的節點數、深度
在上篇博文《Java學習筆記之建立二叉樹》後,我們現在來求增加二叉樹的節點數、二叉樹的深度的函式,以下程式碼中黃色背景是增加實現的程式碼,由於註釋較多,我用綠色字型將自己解讀的註解區分。 老樣子還是先註明這句話:【本文的程式碼請見原創http://blog.csdn.net
資料結構學習筆記——二叉樹之已知兩序排列還原二叉樹
對於非線性資料結構二叉樹,通過人為規定的三種遍歷順序將其轉化為線性結構存入計算機中。 三種遍歷順序即是三種轉換方式: 先序:先訪問當前節點,再訪問左子樹,後訪問右子樹。 中序:先訪問左子樹,再訪問當前節點,後訪問右子樹。 後序:先訪問左子樹,再訪問右子樹,後訪問當前節