數據結構的擴張—算法導論第14章(194)

這裏寫圖片描述

OS-SELECT(x,i)
int r=x.left.size+1;
if(i==r)
{
return x;
}
esle
if(i<r)
return OS-SELECT(x.left,i);
else
return OS-SELECT(X.right,i-r);

僞代碼解釋
爲明白OS-SELECT是如何操作的,在上圖所示的順序統計圖上查找第17小元素的查找過程。以X爲根開始,其關鍵字爲26。i=17.因爲在26的左子樹大小爲12,故他的秩爲13,因此,秩爲17的節點是26的右子樹第17-13=4小得瑟元素。遞歸調用後,x爲關鍵字41的節點,i=4,因爲41的左子樹大小爲5,故他的秩爲6,這樣,可以知道秩爲秩爲4的節點是41的左子樹的第4小元素。再次遞歸調用後,x爲關鍵字30的節點,在其子樹中他的秩爲2,如此,再進行一次遞歸調用,就能找到以關鍵字38的節點爲根的子樹中第4-2=2小的元素。他的左子樹大小爲1,這意味着他就是第2小的元素。最終,該過程返回一個指向關鍵字38的節點的指針。

## 確定一個元素的秩 ##
給定指向順序統計樹T中節點x的指針,過程OS-RANK返回對T中序遍歷對應的線性序中X的位置。
OS-RANK(T,x)
int r=x.left.size+1;
int y=x;
while(y!=T.root)
{
if(y==y.p.right)
{
  r=r+y.p.left.size+1;
}
y=y.p;
}

return r;

僞代碼解釋
這裏寫圖片描述

發佈了72 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章