【算法筆記】遞歸樹應(yīng)用實例:計算歸并排序平均時間復(fù)雜度

遞歸樹

遞歸樹是迭代的圖形表示,可用于求解遞推方程。


例1:利用遞歸樹計算歸并排序的平均時間復(fù)雜度。

歸并排序偽代碼:

MergeSort(A,p,r)
{
    if(p<r)
    {
        q = (p+r)/2;
        MergeSort(A,p,q);
        MergeSort(A,q+1,r);
        Merge(A,p,q,r); //合并兩個子數(shù)組
    }
    
}

根據(jù)以上的偽代碼,可以寫出歸并排序的遞推方程:
W(n) = 2W(n/2) + n-1
W(1) = 0
其中,2W(n/2)表示對2個子問題進行歸并排序,n-1表示合并2個有序的子數(shù)組的工作量(需要進行n-1次比較)。

假設(shè)則遞歸樹總共有k層, 則有n = 2^k。

舉例,假設(shè)k=3,也就是n=8,則遞歸樹有3層。

  • 第一層,每個節(jié)點的工作量為8,求W(8),對2個長度為4的有序數(shù)組進行合并,需要8-1=7次比較。
  • 第二層,每個節(jié)點的工足量為4,求2個W(4),對2個長度為2的有序數(shù)組進行合并,各需要4-1=3次比較
  • 第三層,每個節(jié)點的工足量為2,求4個W(2),對2個長度為1的有序數(shù)組進行合并,各需要2-1=1次比較,畢竟2個數(shù)比大小,1次比較就夠了。

回到一般情況,畫出遞歸樹:


上述遞歸樹共有k層,將右側(cè)的所有值相加,結(jié)合等比數(shù)列求和公式,得到:
\begin{aligned} W(n) &= (n-1) + (n-2) + (n-4) +...+ (n-2^{k-1})\\ &=kn - (1+2+4+...+2^{k-1})\\ &=kn-(2^k-1) \end{aligned}

因為n = 2^k,有
\begin{aligned} W(n) &= n\log_2n-n+1 \end{aligned}
所以,
T(n) = \Theta(n\log n)


參考資料:https://www.icourse163.org/course/PKU-1002525003

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一些概念 數(shù)據(jù)結(jié)構(gòu)就是研究數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)以及它們之間相互關(guān)系,并對這種結(jié)構(gòu)定義相應(yīng)的運算,而且確保經(jīng)過這...
    Winterfell_Z閱讀 6,606評論 0 13
  • 概述 排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    蟻前閱讀 5,303評論 0 52
  • 數(shù)據(jù)結(jié)構(gòu)與算法--歸并排序 歸并排序 歸并排序基于一種稱為“歸并”的簡單操作。比如考試可能會分年級排名和班級排名,...
    sunhaiyu閱讀 997評論 0 6
  • 歸并排序和快速排序都用到了分治思想,非常巧妙。我們可以借鑒這個思想,來解決非排序的問題。 歸并排序 歸并排序的核心...
    被吹落的風(fēng)閱讀 1,413評論 0 3
  • 一. 寫在前面 要學(xué)習(xí)算法,“排序”是一個回避不了的重要話題,在分析完并查集算法和常用數(shù)據(jù)結(jié)構(gòu)之后,今天我們終于可...
    Leesper閱讀 2,649評論 0 40

友情鏈接更多精彩內(nèi)容