目錄3.3.2 紅黑二叉查詢樹
3.3.3 實現
3.3.4 刪除操作
3.3.5 紅黑樹的性質
定義。一棵2-3查詢樹或為一棵空樹,或由以下結點組成:3.3.1.2 向2-結點中插入新鍵和以前一樣,我們將指向一顆空樹的連線稱為空鏈結。
3.3.1.3 向一棵只含有乙個3-結點的樹中插入新鍵
3.3.1.4 向乙個父結點為2-結點的3-結點中插入新鍵
3.3.1.5 向乙個父結點為3-結點的3-結點中插入新鍵
3.3.1.6 分解根結點
3.3.1.8 全域性性質
在一顆大小為n的2-3樹中,查詢和插入操作訪問的結點必然不超過lgn個。3.3.2.1 替換3-結點
3.3.2.2 一種等價的定義
滿足這樣定義的紅黑樹和相應的2-3樹是一一對應的
3.3.2.4 顏色表示
3.3.2.5 旋轉
node rotateleft(node h)
3.3.2.6 在旋轉後重置父結點的鏈結
3.3.2.7 向單個2-結點中插入新鍵
3.3.2.8 向樹底部的2-結點插入新鍵
3.3.2.9 向一棵雙鍵樹(即乙個3-結點)中插入新鍵
3.3.2.10 顏色轉換
3.3.2.11 根結點總是黑色
3.3.2.12 向樹底部的3-結點插入新鍵
3.3.2.13 將紅鏈結在樹中向上傳遞
public class redblackbst, value>
private boolean isred(node h);
private node rotateleft(node h);
private node rotateright(node h);
private void flipcolors(node h);
private int size();
public void put(key key, value, val)
public node put(node h, key key, value val)
}
3.3.4.1 自頂向下的2-3-4樹
3.3.4.2 刪除最小鍵
最後能夠得到承恩含有最小鍵的3-結點或4-結點,直接將其刪除,然後再回頭向上分解所有臨時的4-結點
3.3.4.3 刪除操作3.3.5.1 效能分析
一棵大小為n的紅黑樹的高度不會超過2lgn。
一棵大小為n的紅黑樹中,根結點到任意結點的平均路徑長度為~1.00lgn3.3.5.2 有序符號表api
在一棵紅黑樹中,以下操作在最壞情況下所需的時間是對數級別的:查詢(get())、插入(put())、查詢最小鍵、查詢最大鍵、floor()、ceiling()、rand()、select()、刪除最小鍵(deletemin())、刪除最大鍵(deletemax())、刪除(delete())和範圍查詢(range())。演算法(資料結構)
最壞情況下查詢時間
最壞情況下插入時間
平均情況下查詢時間
平均情況下插入時間
是否支援有序性相關的操作
順序查詢(無序鍊錶)nn
n/2n
否二分查詢(有序陣列)
lgnn
lgnn/2
是二叉樹查詢(bst)nn
1.39lgn
1.39lgn
是2-3樹查詢(紅黑樹)
2lgn
2lgn
1.00lgn
1.00lgn
是
第三章讀書筆記
程序管理 3.1程序 程序就是處於執行期的程式 目標碼存放在某種儲存介質上 但程序並不僅僅侷限於一段可執行程式 執行執行緒,執行緒,是程序活動的物件。兩種虛擬機制 虛擬處理器和虛擬記憶體。最終,程式通過exit 系統呼叫退出執行。3.2程序描述及任務結構 核心把程序的列表存放在叫做任務佇列的雙向迴圈...
第三章讀書筆記
本章是講了git的使用入門,為學習本書的人展示了git的基本用法。儘管git並不是學習android移植和linux核心 驅動開發必須掌握的技術。但對於深入研究這些底層技術的人來說,git將成為學習過程中必不可少的工具。git是什麼,git就是乙個開源的分布式版本控制系統,用以有效 高速的處理從很小...
第三章 查詢 一 《演算法》讀書筆記
目錄3.1.2 有序符號表 3.1.4 無序鍊錶中的順序查詢 3.1.5 有序陣列中的二分查詢 3.1.6 對二分查詢的分析 3.1.7 預覽 符號表是一種儲存鍵值對的資料結構,支援兩種操作 插入 put 即將一組新的鍵值對存入表中 查詢 get 即根據給定的鍵得到相應的值 3.1.1.2 重複的鍵...