兩個有序數組歸併的平均比較次數的定量分析

來源:互聯網
上載者:User

假定有兩個有序數組分別為

An{A1,A2,....An},其中A1<A2<...An

Bm{B1,B2,....Bm},其中B1<B2<...<Bm

歸併後得到Cm+n,其中C1<C2<...<Cn

 

很容易得到

最好情況下,比較次數為min(m,n)次(後續的max(m,n)個數直接拷貝到數組C中)。

最壞情況下,比較次數為m+n-1(只有最後一個數獲得直接拷貝到數組C中的機會)。

 

平均情況是怎樣的呢?

引理1

假定有兩個有序數組分別為

An{A1,A2,....An},其中A1<A2<...An

Bm{B1,B2,....Bm},其中B1<B2<...<Bm

歸併後得到Cm+n,其中C1<C2<...<Cn

其中數組C的不同的方案數有C(m+n,m)次

【C(x,y)表示組合數,從x個元素中選擇y個,y不區分順序】

-------------------------------------------------------------------------------------------

 

假定最後留存下來直接拷貝進數組C的是B數組中的數,

則最終數組C必有形如:XXXXXXXAn Bk+1 Bk+2 ...Bm

由引理1,數組C的不同的方案數有C(n-1+k,k)。

則平均為

(1/C(m+n,n))* Σ[k=0,m-1](C(n-1+k,k)*(n+k))   【Σ[i=1,m]i = m*(m+1)/2】

= (m/C(m+n,n))*Σ[k=0,m-1]C(m+k,m)

= (m/C(m+n,n))*(C(m,m)+C(m+1,m)+...+C(m+n-1,m)

= (m/C(m+n,n))*C(m+n,m+1)

=m-m/(n+1)

 

最後剩下An的情況類似,計算得到n-n/(m+1)

 

則平均情況下比較次數為m+n-n/(m+1)-m/(n+1)

 

當m=n時,平均比較次數為2n - 2n/(n+1) ,當n很大時接近2n-2。

 

因此到這這樣一個結論:歸併的平均比較次數只比最好情況下少1次。

 

--------------------------------------------------------------------------------------------

註:此題是清華組合數學常見基本考題,解題用到了模型轉換,格路問題,

以及C(m,m)+C(m+1,m)...+C(m+n,m) = C(m+n+1,m+1)的結論(該結論也可以通過格路問題解得) 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.