關於歸併排序執行時間的證明

2021-06-21 02:08:45 字數 859 閱讀 6898

《演算法導論》第三版第二章利用了插入排序和歸併排序學習了關於程式的執行時間!

我利用課後證明題來演示,如何利用數學歸納法證明歸併排序的程式執行時間!

原題如下:

使用數學歸納法證明:當n剛好是2的冪時,以下遞迴式的解是t(n)= nlgn。

當n = 2 時,

t(n)= 2;

當n = 2^k,k>1時,t(n) = 2t(n/2) + 2 。

這是數學了典型的分段函式,還有乙個要說明的是,^代表冪,*代表乘號、這裡的lgn 不是中學數學裡常說的以10為底n的對數,而是以2為底n的對數。

證明:

(1)	當n = 2時:

t(2) = 2 * lg2 = 2, 顯然接成立;

(2) 當n = 2^k,且k>1時:

由已知,t(n) = 2 * t(n/2) + n ,當n = 2^k,且k>1時的解為t(n) = n * lgn;

(3) 當n = 2^(k+1)時:

t(n) = 2 * t(n/2) + n = 2 * t(2^k) + 2^(k+1)

= 2 * 2^k * lg(2^k) + 2^(k+1)

= 2^(k+1) * (k + 1)

= 2^(k+1) * lg(2^(k+1))

所以,當n = 2^(k+1)時,結論也成立。

綜上所述,當n剛好是2的冪時,

式子:當n = 2 時, t(n)= 2;

當n = 2^k,k>1時,t(n) = 2t(n/2) + 2

的解為 :t(n)= nlgn。

我已經盡量用標準的方法描述了整個證明過程,其實很簡單的!習慣數學歸納法的方法證明這一類題就比較簡單了!

關於歸併排序

暑假集訓的時候就有接觸到歸併排序,但是當時並沒什麼好好地去學習。開學之後資料結構老師提了好幾次歸併排序,我發現模板 我已經忘的一乾二淨了。於是這兩天重新學了一遍。所謂歸併排序,就是將兩個排好序的序列歸併在一起,形成乙個新序列。那麼,如何得到排好序的序列呢,這裡就體現了分治的思想。我們可以將乙個序列,...

關於歸併排序

我只能說看懂歸併排序,你的遞迴思想會再有乙個昇華。其實在之前我做過一道演算法題,用到的就是這種兩個遞迴在一起。馮諾依曼可真是智慧型。我之所以寫成1,2,3,4,3 2 1 根源還是在於遞迴。在重複一句當初我理解遞迴時的最精闢的一句話 在遞迴中的return,不是結束,而是返回它的被調函式。也就是說,...

mysql為啥用歸併排序 關於對於歸併排序的理解

歸併排序是一種利用了分治思想的一種演算法,是我在白書上看到的一種高效的排序演算法,因此學習一下,並在此做下總結,加深理解。畢竟也不能老是用sort不是?首先由此演算法我了解到了一種分治三步法的一種概念 一直對於這些東西雲裡霧裡啊t t 劃分問題,遞迴求解,合併問題。而歸併排序則非常清晰地完成了這三步...