【算法设计与分析】16 分治策略:快速排序(快速排序的时间复杂度计算)
上一篇文章學習了:【算法設計與分析】15 分治策略:芯片測試
文章目錄
- 1. 快速排序的基本思想
- 1.2 時間復雜度的計算
- 1.21 最壞情況時間復雜度計算
- 1.22 最好情況時間復雜度
- 1.23 平均時間復雜度計算
- 2 總結
1. 快速排序的基本思想
- 用首元素 x 作劃分標準,將輸入數 組 A劃分成不超過 x 的元素構成的數 組 AL,大于 x 的元素構成的數組 AR. 其中 AL, AR從左到右存放在數組 A 的位置.
- 遞歸地對子問題 AL和 AR 進行排序, 直到子問題規模為 1 時停止.
下面兩張圖是它的偽代碼表示:
劃分的過程為:
以下是劃分的例子:
1.2 時間復雜度的計算
1.21 最壞情況時間復雜度計算
最壞情況:
- W(n) = W(n-1)+n-1
- W(1) = 0
得出:
- W(n) = n(n-1)/2
在最壞情況下,有一種可能為:每次劃分,首元素依然是在首元素,它是最小的(或者是最大的),下次劃分也是同樣的結果。這種情況下,是最壞的情況。子問題永遠比上一個原問題只少了一個元素。并且每次都需要對n-1個元素進行遍歷比較。
由上面的結果看出最壞的情況的時間復雜度是O(n2)
1.22 最好情況時間復雜度
最好情況下,就是每一次劃分,AL 與AR 總是均衡的在兩邊,首元素最終落到中間。那么子問題就變成了原問題的一半的元素數量(但是有兩個子問題)。
- T(n) = 2 T(n/2)+n-1
- T(1) = 0
得出:
T(n)=Θ(nlogn)T(n) = \Theta (nlogn)T(n)=Θ(nlogn)
以上兩種時間復雜度是最好和最壞的情況下。那么均衡額時間復雜度如何計算呢?
在計算均衡時間復雜度之前先來看看劃分之后AL 與 AR 的比例是固定時的時間復雜度是多少?
例如子問題的規模比是1:9時,那么有:
- T(n) = T(n/10) + T(9n/10) + n
- T(1) = 0
根據遞歸樹,時間復雜度為:
- T(n)=Θ(nlogn)T(n) = \Theta (nlog n)T(n)=Θ(nlogn)
注釋,上面的遞歸樹計算如下:
1.23 平均時間復雜度計算
那么平均時間復雜度計算如下:
首元素最后落在的位置,可能在1,2,3…n
假設情況的概率均為1/n,那么各個情況下,子問題的計算規模如下:
- 首元素在位置 1: T(0), T(n-1)
- 首元素在位置 2: T(1), T(n-2)
…
- 首元素在位置 n-1: T(n-2), T(1)
- 首元素在位置 n: T(n-1), T(0)
那么子問題的工作量一共為:2[T(1)+T(2)+…+T(n-1)]
劃分工作量 n-1
那么平均情況下時間復雜度計算公式為:
首元素劃分后每個位置概率相等
2 總結
快速排序一般人都能寫出來,但是要理解它的時間復雜度計算,恐怕并不是一般人都會計算,我們要追根問底。
快速排序算法
? 分治策略
? 子問題劃分是由首元素決定 ? 最壞情況下時間O(n2)
? 平均情況下時間為O(nlogn)
總結
以上是生活随笔為你收集整理的【算法设计与分析】16 分治策略:快速排序(快速排序的时间复杂度计算)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: max31865C语言程序,max318
- 下一篇: java简历项目经验大全,不吃透都对不起