假定有兩個有序數組分別為
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)的結論(該結論也可以通過格路問題解得)