日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【算法设计与分析】16 分治策略:快速排序(快速排序的时间复杂度计算)

發布時間:2023/12/10 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【算法设计与分析】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 分治策略:快速排序(快速排序的时间复杂度计算)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。