快速排序的期望復雜度O(nlogn)證明。


快速排序的最優時間復雜度是 \(O(nlogn)\),最差時間復雜度是 \(O(n^2)\),期望時間復雜度是 \(O(nlogn)\)

這里我們證明一下快排的期望時間復雜度。

\(T(n)\) 為對長度為 \(n\) 的序列進行快速排序所需要的期望時間。我們有:

$$T(0) = 0$$

以及: $$T(n) = n + \frac{1}{n}\sum_{i=0}^{n-1}(T(i) + T(n - i - 1))$$

我們可以通過放縮來獲得對 \(T(n)\) 上界的一個估計。

\[T(n) = n + \frac{1}{n}\sum_{i=0}^{n-1}(T(i) + T(n - i - 1)) \]

\[= n + \frac{2}{n}\sum_{i=\frac{2}{n}}^{n-1}(T(i) + T(n - i - 1)) \]

\[= n + \frac{2}{n}\sum_{i=\frac{2}{n}}^{\frac{3n}{4}}(T(i) + T(n - i - 1)) + \frac{2}{n}\sum_{i=\frac{3n}{4}}^{n-1}(T(i) + T(n - i - 1)) \]

因為 \(T(n) >= n\) , 所以對於 \(\frac{n}{2} <= i <= j\),我們顯然有:

\[T(i) + T(n - i) <= T(j) + T(n - j) \]

所以:

\[T(n) <= n + \frac{2}{n}\sum_{i=\frac{2}{n}}^{\frac{3n}{4}}(T(\frac{3n}{4}) + T(\frac{n}{4})) + \frac{2}{n}\sum_{i=\frac{3n}{4}}^{n-1}(T(n - 1) + T(0)) \]

\[<= n + \frac{1}{2}(T(\frac{3n}{4}) + T(\frac{n}{4})) + \frac{1}{2}T(n-1) \]

我們要證明 \(T(n) = O(nlogn)\) , 這需要證明存在常數 \(c\) 滿足 \(T(n) <= cnlogn\)

我們考慮用數學歸納法證明。\(n = 0\)時定理顯然成立。現在假設對於 \(m <= n\) 定理皆成立。那么:

$$T(n) <= n + \frac{1}{2}(T(\frac{3n}{4}) + T(\frac{n}{4})) + \frac{1}{2}T(n-1) $$

$$<= n +\frac{1}{2}(c(\frac{3n}{4})log(\frac{3n}{4}) + c(\frac{n}{4})log(\frac{n}{4})) + \frac{1}{2}c(n-1)log(n-1)$$

$$<= n +c(\frac{3n}{8}log(n) - \frac{3n}{8}log(\frac{4}{3}) + \frac{n}{8}log(n) - \frac{n}{8}log(4) + \frac{n}{2}log(n))$$

$$= cnlogn + n(1 - \frac{3c}{8}log(\frac{4}{3}) - \frac{c}{4})$$

\(1 - \frac{3c}{8}log(\frac{4}{3}) - \frac{c}{4} <= 0\) 時,也即約 \(c >= \frac{5}{2}\),我們有:

$$T(n) <= cnlogn$$.

歸納成立,\(T(n) = O(nlogn)\).


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM