演算法導論(14)

2021-07-23 16:45:49 字數 990 閱讀 1897

14.1 動態順序統計

順序統計樹(order-statistic tree)只是簡單地在每個結點上儲存附加資訊的一顆紅黑樹,使得可以在o(logn)時間內確定任何的順序統計量。

struct node

};//查詢具有給定秩的元素,時間複雜度為o(logn)。

node *osselect(node *x,int i)

//確定乙個元素的秩,時間複雜度為o(logn)。

int osrank(node *root,node *x)

return r;

}//對子樹規模的維護

//(1)插入:對由根至葉子的路徑上遍歷的每乙個結點x,都增加x->size屬性。新增加結點的size為1。

//(2)刪除:我們只需要遍歷一條由結點y(從它在樹中的原始位置開始)至根的簡單路徑,並減少路徑上每個結點的size屬性的值。

//(3)在左旋和右旋中增加下面兩行。

y->size=x->size;

x->size=x->left->size+x->right->size+

1;

14.2 如何擴張資料結構

14.3 區間樹

區間樹(interval tree)是一種對動態集合進行維護的紅黑樹。

struct node

};//判斷i和j是否重疊。

bool overlap(pair

i,pair

j)//返回乙個指向區間樹中元素x的指標,使x->int與i重疊;若此元素不存在,則返回nil。時間複雜度為o(logn)。

node *intervalsearch(node *root,pair

i)return x;

}//對資訊的維護

x->

max=

max(max(x->int.second,x->left->

max),x->right->

max);

演算法導論筆記 14資料結構的擴張

一 概述 一些工程應用只會使用教科書式的標準資料結構,但是也會有些應用需要對現有的資料結構進行少許的創新和改造,只有很少的情況會創造全新的資料結構。二 動態順序統計 順序統計 n個元素中第i個順序統計量,就是具有第i小關鍵字的元素。對於乙個無序的集合,可以在 o n 的時間內得到任意的順序統計量。利...

演算法導論 隨機演算法

一.概率分布 對於有些問題本身是屬於概率問題,如僱傭問題 對於此類問題,我們需要利用概率分析來得到演算法的執行時間,有時也用來分析其他的量。例如,僱傭問題中的費用問題也需要結合概率分析來計算得到。為了使用概率分析,我們必須使用或者假設已知關於輸入的概率分布,然後通過分析該演算法計算出平均情況下的執行...

資料結構的擴張 演算法導論第14章(194)

偽 解釋 為明白os select是如何操作的,在上圖所示的順序統計圖上查詢第17小元素的查詢過程。以x為根開始,其關鍵字為26。i 17.因為在26的左子樹大小為12,故他的秩為13,因此,秩為17的節點是26的右子樹第17 13 4小得瑟元素。遞迴呼叫後,x為關鍵字41的節點,i 4,因為41的...