順序統計樹

2021-05-26 02:03:29 字數 2030 閱讀 2189

在包含n個元素的無序集合中,尋找第i個順序統計量的時間複雜度為o(n)。通過建立一種特定的結構,可以使得任意的順序統計量都可以在o(lgn)的時間內找到。這就是下面會提到的基於紅黑樹的順序統計樹。

相比於基礎的資料結構,順序統計樹增加了乙個域size[x]。這個域包含以x為根的子樹的節點數(包含x本身)。size域滿足等式:

size[x] = size[left[x]] + size[right[x]] + 1

再根據紅黑樹的排序特性,我們就可以o(lgn)的時間內完成下面的操作。

順序統計樹如下圖所示:

查詢第i小的元素

實現os-select(x, i)返回以x為根的子樹中包含第i小關鍵字的節點的指標。根據排序樹的性質,我們知道左子樹的鍵值要小於根節點的鍵值,右節點的鍵值要大於根節點,這相當於靜態的順序統計量的partition已經完成。同時我們知道左右子樹的大小,我們就可以確定在哪個分支進行接下來的查詢。

os-select(x, i) 整個過程如下:

每次呼叫,必定會下降一層,故os-select的時間複雜度為o(lgn)

確定乙個元素的秩

os-rank(t, x) 整個過程如下:

每次必然至少上公升一層,故os-rank的時間複雜度為o(lgn)

建立順序統計樹的時間為o(nlgn),那和一般的靜態查詢o(n)相比,豈不是更加複雜?其實,這兩種方法應用的場合不一樣,如果只查詢一次或幾次,靜態查詢比較快速,如果多次查詢(查詢次數和n具有可比性),那麼順序統計樹就體現出它的優點了。另外,順序統計樹還可以方便快速(o(lgn)時間內)的支援元素的插入和刪除,這兩點是靜態順序統計量方法無法比擬的。

問題思考,如何利用順序統計樹來解決一些問題呢?

14.1-5給定n個元素的順序統計樹中的乙個元素x和乙個自然數i,如何在o(nlgn)時間內,確定x該樹的線性序中第i個後繼?

分析與解答:

首先利用元素x得到它的秩r,然後查詢第i+r小的元素即可.

os-rank(t, x, i)的整個過程如下: 

14.1-7說明如何在o(nlgn)的時間內,利用順序統計樹對大小為n的陣列中的逆序對進行計數)

分析與解答:

如果這n個元素的陣列記為a1, a2, a3, ... , ai , ... , an,那麼我們可以依次求出以第i個元素ai結尾的逆序對,j那麼總的逆序對的個數為v

v = v1 + v2+ ... + vn

可以這樣考慮,動態集合a1, a2, ... , ai中我們可以求出ai的秩(也就是說ai在排序後的序列中的位置),若為其秩為r,則逆序對的數量

vi = i - r

如此我們便可以迭代的求取。

14-2josephus排列

josephus問題的定義如下:假設n個人排成環形,且有一正整數m<=n。從某個指定的人開始,沿環報數,每遇到第n個人就讓其出列,且報數進行下去。這個過程一直進行到所有人都出列為止。每個人出列的次序定義了整數1, 2, ..., n的(n, m)-josephus排列。例如,(7, 3)-josephus排列為<3, 6, 2, 7, 5, 1, 4>。

a)假設m為常數。請描述乙個o(n)時間的演算法,使之給定的整數n,輸出(n, m)-josephus排列

b)假設m不是常數。請描述乙個o(nlgn)時間的演算法,使之給定的整數n和m,輸出(n, m)-josephus排列

分析與解答:

a)每個人對應乙個元素,共n個元素,鍵值為編號。將這n個元素構成乙個迴圈雙鏈表,那麼每次讓乙個人出列的時間複雜度為o(m)總的時間複雜度為o(nm),由於m是常數,則為o(n)的時間複雜度。

b)若m不是常數,則正好可以使用順序統計樹來動態的進行處理。每次選擇出列乙個元素,在順序統計樹中將其刪除,並重新查詢,迭代進行。如果之前刪除的是當前集合的第j個位置的元素,那麼下一次刪除的是剩餘集合的j-1+m個位置的元素,並對剩餘集合的元素個數取模。整個過程如下

中位數和順序統計

如何求取陣列中第i 小 大 的數,好像就是順序統計了,反正我是這麼理解的。有了順序統計,求取中位數就方便了。假設陣列有n個元素,如果n為奇數,則轉化為求取第 n 1 2小的元素 如果n為偶數,則轉化為求取第n 2小和第n 2 1小的元素,並取平均值得到。中位數的好處?好像是為了解決求平均值時的乙個弊...

順序統計量的選擇

在選擇順序統計量中,期望的時間複雜度是o n 主要是對於給定的陣列,從其中選擇出第k小的值。其與原理 利用了快速排序中的隨機分割區間的函式,將第k小的值分割到乙個區域裡面,相當於把該問題劃分的時候只劃分了乙個子問題,就沒有o lgn 根據快速排序的時間複雜度為o nlgn 可知,其時間複雜度為o n...

第K順序統計量

1.第k順序統計量概念 在乙個由n個元素組成的集合中,第k個順序統計量是該集合中第k小的元素。例如,最小值是第1順序統計量,最大值是第n順序統計量。2.求top k元素與求第k順序統計量不同 第k順序統計量 只求解陣列中的第k大元素,是求解乙個元素。一般使用 快速排序 的思想,將陣列劃分求解。3.第...