-
節點大小平衡樹
鎖定
- 中文名
- 節點大小平衡樹
- 外文名
- Size Balanced Tree
- 縮 寫
- SBT
- 應 用
- 計算機
- 創始人
- 陳啓峯
- 出 自
- 《Size Balanced Tree》
節點大小平衡樹技術介紹
陳啓峯於2006年底完成論文《Size Balanced Tree》,並在2007年的全國青少年信息學奧林匹克競賽冬令營中發表。相比紅黑樹、AVL樹等自平衡二叉查找樹,SBT更易於實現。據陳啓峯在論文中稱,SBT是“目前為止速度最快的高級二叉搜索樹”。SBT能在
的時間內完成所有二叉搜索樹(BST)的相關操作,而與普通二叉搜索樹相比,SBT僅僅加入了簡潔的核心操作Maintain。由於SBT賴以保持平衡的是size域而不是其他“無用”的域,它可以很方便地實現動態順序統計中的Select和Rank操作。
[1]
節點大小平衡樹性質
Size Balanced Tree(SBT)是一種通過大小(Size)域來保持平衡的二叉搜索樹,它也因此得名。它總是滿足:
對於SBT的每一個結點
,
即每棵子樹的大小不小於其兄弟的子樹大小。
節點大小平衡樹旋轉
SBT的旋轉(Rotations)與其他許多高級BST相同。它是下面提到的Maintain操作的基礎。
節點大小平衡樹左旋轉
Left-Rotate(t) k = t.right t.right = k.left k.left = t k.s = t.s t.s = t.left.s + t.right.s + 1 t = k
節點大小平衡樹右旋轉
Right-Rotate(t) k = t.left t.left = k.right k.right = t k.s = t.s t.s = t.left.s + t.right.s + 1 t = k
節點大小平衡樹基本操作
節點大小平衡樹查找
Search(t, k) if x == NIL or k == t.key return x if k < x.key return Search(x.left, k) else return Search(x.right, k)
節點大小平衡樹取大取小
由於SBT本身已經維護了size,因此這兩項可用Select操作完成。
節點大小平衡樹後繼
SBT的後繼操作與普通BST完全相同。
節點大小平衡樹前趨
SBT的前趨操作與普通BST完全相同。它與後繼操作對稱。
節點大小平衡樹插入
Insert(t, v) if t == 0 t = v else t.s = t.s + 1 if v < t.key Insert(t.left, v) else Insert(t.right, v) Maintain(t, v, t.key)
節點大小平衡樹刪除
節點大小平衡樹檢索元素
Select(x, i) r = x.left.s + 1 if(i == r) return x elseif i < r return Select(x.left, i) else return Select(x.right, i - r)
節點大小平衡樹求元素的秩
SBT的rank操作與普通BST完全相同。
節點大小平衡樹性能分析
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:17次歷史版本
- 最近更新: 肖肖zhan