Presentation is loading. Please wait.

Presentation is loading. Please wait.

Lecture 7 Sorting in Linear Time. Sorting in Linear Time2 7.1 Lower bounds for sorting 本節探討排序所耗用的時間複雜度下限。 任何一個以比較為基礎排序的演算法,排序 n 個元 素時至少耗用 Ω(nlogn) 次比較。

Similar presentations


Presentation on theme: "Lecture 7 Sorting in Linear Time. Sorting in Linear Time2 7.1 Lower bounds for sorting 本節探討排序所耗用的時間複雜度下限。 任何一個以比較為基礎排序的演算法,排序 n 個元 素時至少耗用 Ω(nlogn) 次比較。"— Presentation transcript:

1 Lecture 7 Sorting in Linear Time

2 Sorting in Linear Time2 7.1 Lower bounds for sorting 本節探討排序所耗用的時間複雜度下限。 任何一個以比較為基礎排序的演算法,排序 n 個元 素時至少耗用 Ω(nlogn) 次比較。 是以時間複雜度 至少為 Ω(nlogn) 。 但不使用比較為基礎 的排序演算法,在某些情形 下可在 O(n) 的時間內執行完畢。

3 Sorting in Linear Time3 Decision-Tree Model 一個以比較為基礎的排序演算法可以按照比較的 順序建出一個 Decision-Tree 。 每一個從 Root 到 Leaf 的路徑都代表一種排序的結 果。 任何一個以比較為基礎排序 n 個元素的演算法,所 對應的 Decision-Tree 高度至少有 Ω(nlogn) 。

4 Sorting in Linear Time4 Decision-Tree Model a 1 :a 2 a 2 :a 3 a 1 :a 3 a 2 :a 3      > > > > > Eg. (a 1 a 2 a 3 ) (9 2 6)

5 Sorting in Linear Time5 證明:因為可能有 n! 種可能的排序結果,故對應 的 Decision tree 至少有 n! 個 leaf nodes 。而高度為 h 的二元樹最多有 2 h 個 leaf nodes 。 因此 h  log 2 (n!)  Θ(nlogn) 。 ( 後者由 Stirling’s approximation 得證: n!>(n/e) n ) Heapsort 與 Mergesort 是 asymptotically optimal 之比 較排序法。 Decision-Tree Model

6 Sorting in Linear Time6 7.2 Counting Sort Counting Sort ( 記數排序法 ) 不需要藉由比較來做 排序。 必須依賴一些對於待排序集合中元素性質的假設。 ( 如:所有待排序元素均為整數,介於 1 到 k 之間 ) 時間複雜度: O(n+k) 主要的關鍵在於,統計 1 到 k 之間每個數值出現過 幾次,然後想辦法將排序好的數列輸出。

7 Sorting in Linear Time7 Input: A[1..n], where A[j] ∈ {1,2,…,k} Output:B[1..n], sorted CountingSort(A,B,k) {for i = 0 to k do C[i]  0 for j = 1 to length[A] do C[A[j]]  C[A[j]]+1 for i = 1 to k do C[i]  C[i]+C[i-1] for j = length[A] downto 1 do B[C[A[j]]]  A[j] C[A[j]]  C[A[j]]-1 }

8 Sorting in Linear Time8 3 k=6 6413414 A: 12345678 202301 C: 123456 224778 123456 2 nd loop 3 rd loop

9 Sorting in Linear Time9 4 B: 12345678 224678 C: 123456 1 st iteration 41 B: 12345678 624178 C: 123456 2 nd iteration 144 B: 12345678 124578 C: 123456 3 rd iteration 4 th loop …… 11334446 B: 12345678 022477 C: 123456 8 th iteration

10 Sorting in Linear Time10 7.3 Radix Sort Radix Sort( 基數排序法 ) 無需利用元素間的比較排 序。 必須依賴一些對於待排序集合中元素性質的假設。 ( 所有待排序元素均為整數,至多 d 位 )

11 Sorting in Linear Time11 Radix Sort 關鍵想法:利用記數排序法由低位數排到高位數。 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436 839 355 457 657 329 355 436 457 657 720 839 先排個位數 再排十位數 最後排百位數

12 Sorting in Linear Time12 Radix-Sort(A,d) {for i = 1 to d do use stable sort to sort A on digit i } 此處使用的 stable sort 如果使用 Counting Sort 則每 個 Iteration 只需花 Θ(n+10) 的時間。 因此總共花費 O(d(n+10)) 的時間。 如果 d 是常數,則 Radix Sort 為一個可以在 Linear time 完成的排序演算法。

13 Sorting in Linear Time13 7.4 Bucket Sort 當元素均勻分布在某個區間時, Bucket sort 平均能 在 O(n) 的時間完成排序。 假定要排序 n 個元素 A[1..n] 均是介於 [0,1] 之間的數 值。 準備 n 個籃子 (bucket) , B[1..n] ,將元素 x 依照 x 所在 的區間放進對應的籃子:即第 個籃子 。

14 Sorting in Linear Time14 Bucket Sort 元素放進籃子時,使用 Linked list 來儲存,並利用 插入排序法排序。 只要依序將 Lined list 串接起來,即得到已排序的 n 個元素。

15 Sorting in Linear Time15.76.07.36.29.74.95.22.05.25.66 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 AB.76.07.36.29.74.95.22.05.25.66 紅色虛線串起的即是最後排序好的 List

16 Sorting in Linear Time16 時間複雜度分析 假定分到第 i 個籃子的元素個數是 n i 。 最差情形: T(n) =O(n) + =O(n 2 ). 平均情形: T(n) = O(n) + = O(n) + = O(n) 的証明請參考課本


Download ppt "Lecture 7 Sorting in Linear Time. Sorting in Linear Time2 7.1 Lower bounds for sorting 本節探討排序所耗用的時間複雜度下限。 任何一個以比較為基礎排序的演算法,排序 n 個元 素時至少耗用 Ω(nlogn) 次比較。"

Similar presentations


Ads by Google