當關鍵字是有界范圍內的整數時,能夠規避Ω(lglgn)下界的限制,那么在類似的場景下,我們應弄清楚o(lgn)時間內是否可以完成優先隊列的每個操作。在本章中,我們將看到:van Emde Boas樹支持優先隊列操作及一些其他操作,每個操作最后情況運行時間為O(lglgn)。而這種數據結構限制關鍵字必須為0~n-1的整數且無重復。
下面以n為元素個數,u為全域大小。
20.1 基本方法
直接尋址
即位圖bitmap方法。
insert,delete和member:復雜度O(1)
minimum,maximum,successor和predecessor最壞情況為O(u)
疊加的二叉樹結構
位向量的全部元素組成了二叉樹的葉子,並且每個內部結點為1當且僅當其子樹中任一個葉節點包含1。
由於樹的高度為lgu,每個操作至多沿樹進行一趟向上和一趟向下的過程,因此每個操作的最壞情況運行時間為O(lgn)。
疊加的一棵高度恆定的樹
疊加的樹度數為u1/2。每個操作中,最多對兩個大小為u1/2位的簇以及summary數組進行搜索,所以每個操作耗費O(u1/2)時間。(比二叉樹漸進差)
使用度為u1/2的樹是van Emde Boas樹的關鍵思想。
20.2 遞歸結構
在本節中,我們對位向量上度為u1/2的疊加樹想法進行修改。上一節中,用到了大小為u1/2的summary數組,數組的每項都指向一個大小為u1/2的另一個結構。現在使用結構遞歸,每次遞歸都已平方根大小縮減全域。(u,u1/2,u1/4,u1/8,...)
通過變量替換法,能夠得到遞歸式
T(n)=2T([u1/2])+lgn
的解為T(n)=O(lgnlglgn)。考慮一個相似但更簡單的遞歸式:
T(n)=2T(u1/2)+1
其解為T(n)=O(lglgn)。此遞歸式將指導數據結構上的查找。我們要設計一個遞歸的數據結構,該數據結構每層以u1/2為因子縮減規模。當一個操作遍歷這個數據結構時,在遞歸到下一層次前,其在每一層耗費常數時間。
20.2.1 原型van Emde Boas結構
有些操作達不到O(lglgn)。
MEMBER:O(lglgu)
MINIMUN:O(lgu)
SUCCESSOR:O(lgulglgu)
INSERT:O(lgu)
DELETE:添加一個屬性n來記錄其擁有的元素個數
20.3 van Emde Boas樹及其操作
全域限制放寬到2k,增加兩個屬性min和max,分別記錄vEB樹中的最小和最大元素。而且min不出現在在任何cluster中。
得到T(u)=O(lglgn)。
SUCCESSOR:
INSERT:
DELETE: