二叉樹和資料庫索引

2021-09-23 23:39:50 字數 1184 閱讀 5111

二叉樹:左節點《根節點,右節點》根節點,沒有鍵值相等的節點,二叉樹效率取決於樹的深度。普通二叉樹有可能退化為線性鍊錶。因此有了平衡二叉樹來提高效率保證資料平衡的情況下查詢資料的速度近於二分法查詢;

平衡二叉樹:左右子樹高不超過1,所以在做增加刪除操作,需要進行旋轉來維護樹的平衡(耗資源)。

紅黑樹:是二叉查詢樹,但是在每個節點增加了顏色值(red black)

每個節點非紅即黑

根節點是黑的; 

每個葉節點(葉節點即樹尾端null指標或null節點)都是黑的; 

如果乙個節點是紅的,那麼它的兩兒子都是黑的; 

對於任意節點而言,其到葉子點樹null指標的每條路徑都包含相同數目的黑節點;

我們知道鍊錶的查詢效率是o(n)。就像上面的例子,遍歷了n次才找到第一條符合條件的記錄,這是很低效的。而我們知道,陣列+二分查詢的效率是o(lgn),但是陣列的插入元素以及刪除元素的效率很低,因此使用陣列做為索引結構並不合適。

紅黑樹這種結構,h明顯要深的多。由於邏輯上很近的節點(父子)物理上可能很遠,無法利用區域性性,所以紅黑樹的i/o漸進複雜度也為o(h),效率明顯比b-tree差很多。

區域性性原理與磁碟預讀

由於儲存介質的特性,磁碟本身訪問就比主存慢很多,再加上機械運動耗費,磁碟的訪問速度往往是主存的幾百分分之一,因此為了提高效率,要儘量減少磁碟i/o。為了達到這個目的,磁碟往往不是嚴格按需讀取,而是每次都會預讀,即使只需要乙個位元組,磁碟也會從這個位置開始,順序向後讀取一定長度的資料放入記憶體。這樣做的理論依據是電腦科學中著名的區域性性原理: 

當乙個資料被用到時,其附近的資料也通常會馬上被使用。 

程式執行期間所需要的資料通常比較集中。 

由於磁碟順序讀取的效率很高(不需要尋道時間,只需很少的旋轉時間),因此對於具有區域性性的程式來說,預讀可以提高i/o效率。

b樹:有序陣列+平衡多叉樹; 

b+樹:有序陣列鍊錶+平衡多叉樹;

在b+tree的每個葉子節點增加乙個指向相鄰葉子節點的指標,就形成了帶有順序訪問指標的b+tree。做這個優化的目的是為了提高區間訪問的效能,例如圖4中如果要查詢key為從18到49的所有資料記錄,當找到18後,只需順著節點和指標順序遍歷就可以一次性訪問到所有資料節點,極大提到了區間查詢效率。

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...

樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹

目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...

二叉樹,完全二叉樹,滿二叉樹

二叉樹 是n n 0 個結點的有限集合,它或者是空樹 n 0 或者是由乙個根結點及兩顆互不相交的 分別稱為左子樹和右子樹的二叉樹所組成。滿二叉樹 一顆深度為k且有2 k 1個結點的二叉樹稱為滿二叉樹。說明 除葉子結點外的所有結點均有兩個子結點。所有葉子結點必須在同一層上。完全二叉樹 若設二叉樹的深度...