演算法導論第九章:中位元和順序統計學

來源:互聯網
上載者:User

在一個有n個元素組成的集合中,第i個順序統計量是該集合中第i小的元素。中位元是出現在i=(n+1)/2處(下中位)或i=(n+1)/2+1處(上中位)。

 

9.1最小值和最大值

在一個有n個元素的集合中,要做多少次比較才能確定其最小元素呢?可以很容易地給出n-1這個上界:依次查看集合中的每個元素,並記錄比較過程中的最小元素。

 

n-1也是這個問題的比較次數下界:對於任意一個確定最小值的演算法,可以把它看做是在各元素之間進行的一場錦標賽,每次比較都是錦標賽中的一場比賽,兩個元素中較小的一方獲勝,有一點很關鍵,就是除了最終獲勝者之外,每個元素都少輸掉至少一場比賽;而至少有n-1場比賽。

 

 

同時找出最大值可最小值

 

我們可以獨立地找出最大值和最小值,各用n-1次比較。事實上,至多3(n/2)次比較久足以同時找到最小值和最大值。做法是記錄比較過程遇到的最小值和最大值。我們不是將每一個輸入元素與當前的最大值和最小值進行比較。而是成對地處理元素。先將一對輸入元素互相比較,然後把較大的與當前最大值進行比較,較小的與當前最小值進行比較,因此每對元素需要比較3次。

 

練習:

9.1-1證明:在最壞情況下,利用n+lgn-2次比較,即可以找到n個元素中的第2小的元素。

參考答案:(從網上找的答案)

將n個元素進行兩兩比較,將較大的淘汰,較小的留下。這樣通過n/2次比較就剩下n/2個元素。再進行第二輪;如此往複直到得出最小的元素。這個過程可以用一棵二叉樹來描述。那麼第二小的元素只有在於最小元素的比較才會被淘汰。最小的元素進行過的元素有lgn-1個。於是在進行lgn-2次比較就可以得出第二小的元素。

 

PS:這個解法的問題在於,如何記住與最小元素比較過的元素集合,難道要整棵樹建出來。這樣的話這個演算法沒有什麼實際意義。

 

 

9.2以期望線性時間做選擇

 一般的選擇問題比找最小值的簡單問題更難,兩種問題的漸進已耗用時間卻是相同的都是Θ(n)。本節介紹一種解決選擇問題的分治演算法,即RANDOMIZED-SELECT演算法,以第七章的快速排序演算法為模型,如同在排序中一樣,對輸入的數組進行遞迴劃分,但和快速排序不同的是,快速排序會遞迴處理劃分的兩邊,而RANDOMIZED-SELECT只處理劃分的一邊。RANDOMIZED-SELECT的期望時間為Θ(n)。

 

RANDOMIZED-SELECT(A,p,r,i)

1  if p=r

2    then return A[p]

3  q<--RANDOMIZED-PARTITION(A,p,r)

4  k<--q-p+1

5  if i=k

6    then return A[q]

7  elseif i<k

8    then return RANDOMIZED-SELECT(A,p,q-1,i)

9 else return RANDOMIZED-SELECT(A,q+1,r,i-k)

 

RANDOMIZED-PARTITION就是快速排序演算法中的partition過程。

RANDOMIZED-SELECT的最壞已耗用時間是n2。期望已耗用時間為n。

 

思考題:

9-2帶權中位元

對分別具有正的權重w1,w2,...,wn且∑wi=1的n個不同元素x1,x2,...,xn,帶權中位元是滿足如下條件的元素xk:∑(xi<xk)<1/2且∑(xi>xk)<=1/2。

a)論證如果wi=1/n,那麼x1,x2,x3...,xn的中位元即是帶權中位元。

假設集合xi的中位元為xk,滿足xi<xk的元素個數和xi>xk的元素個數都約為n/2。所以滿足帶權中位元的定義。

b)說明如何通過排序求出n個元素的帶權中位元。

對xi進行排序,依照排序後的順序依次計算前k個權重的和。當第一次計算到某個位置發現權重和大於或等於1/2時,xk就為帶權中位元。

c)說明如何利用一的中位元演算法,來求帶權中位元。

以RANDOMIZED-SELECT演算法為例,我們以對xi的快速排序演算法為基礎,區別在於,我們不是尋找第k大的數,而是尋找使∑(xi<=xk)>=m滿足的最小k位置。演算法可以從RANDOMIZED-SELECT修改而來。

WRANDOMIZED-SELECT(A,p,r,m)

1  if p=r

2    then return A[p]

3  q<--RANDOMIZED-PARTITION(A,p,r)

4  計算A[p...q]的權重和m'

5  if m=m'

6    then return A[q]

7  elseif m<m'

8    then return WRANDOMIZED-SELECT(A,p,q-1,m)

9 else return WRANDOMIZED-SELECT(A,q+1,r,m'-m)

 

 

郵局位置問題:已知n個點p1,p2,...,pn即它們相練習的權重w1,w2,...,wn。我們希望能找到一點p(不一定是輸入焦點中的一個),使得何時∑wiD(p,pi)最小,此處D(a,b)表示點a與b之間的距離。

 

d)證明帶權中位元是一維郵局位置問題的最佳解決方案,其中所有的點都是實數。一維意味著d(a,b)=|a-b|。

首先證明p點必然可以是輸入焦點中的一點,採用反證法:假設p是pk和pk+1之間的一點。如果∑(i=1~k)wi>=1/2,那麼pk點將是一個更優(或同優)的點,pk+1將是一個更優的點。在再證明帶權中位元就是最優點,同樣採用反證法:假設pk是帶權中位點,那麼對於如果選取pl(l<k),那麼由於∑(i=1~l)wi<1/2,那麼pl+1是一個更優的點。如果選取pm(m>k),那麼由於∑(i=m~l)wi<1/2,那麼pm-1是一個更優的點。

 

e)找出二維郵局位置問題的最佳解答。其中所有的點都是(x,y)座標組,並且點a(x1,y1)和b(x2,y2)之間的距離是Manhanttan距離:d(a,b) = |x1-x2|+|y1-y2|。

只要分別從x1,x2,...,xn和y1,y2,...,yn找出帶權中位元xi,yj。那麼點(xi,yj)就是最佳位置。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.