Sorting

35
SORTING Michael Tsai 2010/12/10

description

Sorting. Michael Tsai 2010/12/10. 今日菜單. 上次還沒講完的 AOE 網路 Sorting 定義 最快可以 sort 多快 ? Insertion Sort Quick Sort Merge Sort Heap Sort. Activity-on-edge ( AOE) Network. 不是 Ages of Empires ( 爛梗 ) “Activities” 發生在 edge 上 edge cost= 所需要完成 activity 的時間 例如 : vertex 4 可以解釋為完成 及 後的時間. 1. - PowerPoint PPT Presentation

Transcript of Sorting

Page 1: Sorting

SORTINGMichael Tsai2010/12/10

Page 2: Sorting

2

今日菜單• 上次還沒講完的 AOE 網路• Sorting• 定義• 最快可以 sort 多快 ?• Insertion Sort• Quick Sort• Merge Sort• Heap Sort

Page 3: Sorting

3

Activity-on-edge (AOE) Network

• 不是 Ages of Empires ( 爛梗 )• “Activities” 發生在 edge 上• edge cost= 所需要完成 activity

的時間• 例如 : vertex 4 可以解釋為完成及

後的時間1

2

0 4

6

7

8

3 5

startfinish𝑎1=6

𝑎4=1

𝑎3=5

𝑎6=2

𝑎9=4

𝑎5=1

𝑎7=9

𝑎10=2

𝑎11=4𝑎8=7𝑎2=4

Page 4: Sorting

4

可以思考的一些問題• vertex 8= 完成所有工作 . 完成的時間為 ? • 完成的時間為從 start finish 的最長 path.• 又稱為 critical path• 想想看為什麼 ?

• earliest time(edge e): 為該 activity 最早可以開始的時間• latest time(edge e):

不延誤最後完成時間的前提下activity 可以開始的最晚時間• earliest time(e) == latest time(e)• then e 為 critical activity• ( 完全不能延誤 )

1

2

0 4

6

7

8

3 5

startfinish𝑎1=6

𝑎4=1

𝑎3=5

𝑎6=2𝑎9=4

𝑎5=1

𝑎7=9

𝑎10=2

𝑎11=4𝑎8=7𝑎2=4

Page 5: Sorting

5

AOE Network

ee [0] [1] [2] [3] [4] [5] [6] [7] [8] stack

1

2

0 4

6

7

8

3 5

startfinish𝑎1=6

𝑎4=1

𝑎3=5

𝑎6=2𝑎9=4

𝑎5=1

𝑎7=9

𝑎10=2

𝑎11=4𝑎8=7𝑎2=4

Initial

0 0 0 0 0 0 0 0 0 [0]

0 0 6 4 5 0 0 0 0 0 [3 2 1]

3 0 6 4 5 0 7 0 0 0 [5 2 1]

5 0 6 4 5 0 7 0 11 0 [2 1]

ee[i]=i-th event’s earliest event time

<k,l> thene(i)=ee[k]

2 0 6 4 5 5 7 0 11 0 [1]

1 0 6 4 5 7 7 0 11 0 [4]

Page 6: Sorting

6

AOE Network 1

2

0 4

6

7

8

3 5

startfinish𝑎1=6

𝑎4=1

𝑎3=5

𝑎6=2𝑎9=4

𝑎5=1

𝑎7=9

𝑎10=2

𝑎11=4𝑎8=7𝑎2=4

ee [0] [1] [2] [3] [4] [5] [6] [7] [8] stack

1 0 6 4 5 7 7 0 11 0 [4]

4 0 6 4 5 7 7 16 14 0 [7 6]

7 0 6 4 5 7 7 16 14 18 [6]

6 0 6 4 5 7 7 16 14 18 [8]

接下來怎麼算 e(i)?

Page 7: Sorting

7

AOE Network

• 用 reverse topological order 來依序算出• 請同學來算算看

1

2

0 4

6

7

8

3 5

startfinish𝑎1=6

𝑎4=1

𝑎3=5

𝑎6=2𝑎9=4

𝑎5=1

𝑎7=9

𝑎10=2

𝑎11=4𝑎8=7𝑎2=4

Page 8: Sorting

8Activity

e l l-e (slack)

l-e=0

0 0 0 Yes

0 2 2

0 3 3

6 6 0 Yes

4 6 2

5 8 3

7 7 0 Yes

7 7 0 Yes

7 10 3

16 16 0 Yes

14 14 0 yes1

2

0 4

6

7

8

3 5

startfinish

𝑎1=6𝑎4=1

𝑎3=5

𝑎6=2𝑎9=4

𝑎5=1

𝑎7=9

𝑎10=2

𝑎11=4𝑎8=7𝑎2=4

Page 9: Sorting

9

Sorting• 定義 :• 有等 n 個 record• 每個 record 有個 key.

• 我們會定義對 key 們定義 >, =, <• 這些 operations 是 transitive, 就是說 a>b, b>c 的話 , a>c• 要找到一個的排列使得• 1. • 2. if i<j and ,then precedes • 如果同時兩個條件成立則此 sorting 方法為 stable.

Page 10: Sorting

10

Sorting 有什麼用 ?• 例子一 : 在一個 list 裡面找東西 .

• 如果沒有 sort 過 , 要怎麼找 ?• 答 : 只能苦工 , 從頭找到尾

• 那如果 sort 過呢 ?• 繼續苦工的話有幫助嗎 ? • 有 . 可以提早知道要找的數字不在裡面 .• 也可以 binary search

• 但是 , sorting 本身要花多少時間呢…

Page 11: Sorting

11

Sorting 有什麼用 ?• 例子二 : 比對兩個 list 有沒有一樣 ( 列出所有不一樣的item). 兩個 lists 分別有 n 與 m 個 items.

• 如果沒有 sort 要怎麼找呢 ? • list 1 的第 1 個 , 比對 list 2 的 1-m 個• list 1 的第 2 個 , 比對 list 2 的 1-m 個• …• list 1 的第 n 個 , 比對 list 2 的 1-m 個• 所以需要

Page 12: Sorting

12

Sorting 有什麼用 ?• 如果 sort 過呢 ?

• 可以利用類似之前講過 polynomial 加法的方法 .• ( 請同學回憶並解釋 ?)• 可參考課本 program 7.3 (p.337)

• 則需要花多少時間來比對 ?

• 不要忘了還有 sorting 的時間• 所以 sorting 究竟要花多少時間呢 ?

Page 13: Sorting

13

Sorting 的分類• Internal Sort: 所有的資料全部可以一股腦地放在記憶體

裡面

• External Sort: 資料太大了 , 有些要放到別的地方 ( 硬碟 , 記憶卡 , 網路上的其他電腦上 , 等等等 )

• 我們只講 internal sort 的部分• 現在電腦 ( 及如手機 , iPod, iPad 等各種計算裝置 ) 記

憶體越來越大 , 越來越便宜 , 比較少有機會使用 external sort.• 有興趣的同學可以看一看課本 7.10 (p.376)

Page 14: Sorting

14

到底我們可以 sort 多快 ?• 假設我們使用”比較” +” 交換”的方法 .• “ 比較” : 看 list 裡面的兩個 item 誰大誰小• “ 交換” : 交換 / 移動兩個 item 在 list 裡面的位置• 如何歸納出”最差的狀況要花多少時間 sort?”

𝐾 1≤𝐾 2

𝐾 2≤𝐾 3 𝐾 1≤𝐾 3

𝐾 1≤𝐾 3𝐾 2≤𝐾 3

stop

stop

stop

stop

stop stop

[1,2,3]

[1,3,2]

[1,2,3]

[1,2,3]

[1,3,2]

[2,3,1]

[2,1,3]

[2,1,3]

[3,1,2]

[3,1,2] [3,2,1]

課本 p.344 的 Figure 7.2 好像有錯

Yes No

Page 15: Sorting

15

Decision tree for sorting

• 每個 node 代表一個 comparison 及 swap• 到達 leaf 時表示 sorting 完畢• 共有幾個 leaf?• 共有 n 個 items 的所有可能排列數目 :

𝐾 1≤𝐾 2

𝐾 2≤𝐾 3 𝐾 1≤𝐾 3

𝐾 1≤𝐾 3

stop

stop

stop

stop

stop stop

[1,2,3]

[1,3,2]

[1,2,3]

[1,2,3]

[1,3,2]

[2,3,1]

[2,1,3]

[2,1,3]

[3,1,2] [3,2,1]

𝐾 2≤𝐾 3

Page 16: Sorting

16

到底我們可以 sort 多快 ?• 所以 , worst case 所需要花的時間 , 為此 binary tree 的height.• Binary tree 的性質 : 如果 height 為 k, 則最多有個leaves• 所以有個 leaves 的話 , 至少 height 為

• 結論 : 任何以”比較”為基礎的 sorting algorithm worst-case complexity 為 .• < 動腦時間 > 如何證明 average complexity 也是 ?• 答 : 算算看 leaf 到 root 的 distance 的平均值 .

Page 17: Sorting

17

Insertion sort• 方法 : 每次把一個 item 加到已經排好的 , 已經有 i 個item 的 list, 變成有 i+1 個 item 的排好的 list

2 3 6 5 1 4

2 3 6 5 1 4

2 3 6 5 1 4

2 3 5 6 1 4

2 3 5 6 1 4

1 2 3 5 6 4

1 2 3 5 6 4

1 2 3 4 5 6

Page 18: Sorting

18

Insertion Sort• 要花多少時間 ?• 答 : 最差的狀況 , 每次都要插到最末端 ( 花目前 sorted

大小的時間 )

• 平均 complexity, 也是 .

• 變形 ( 蟲 ):• 1. 在找正確的應該插入的地方的時候 , 使用 binary search. ( 但是移動還是• 2. 使用 linked list 來表示 整個 list 的 item, 則插入時不

需要移動 , 為 . ( 但是尋找插入的地方的時候還是需要 )

Page 19: Sorting

19

Quick Sort• 方法 : 每次找出一個 pivot( 支點 ), 所有它左邊都比它小( 但是沒有 sort 好 ), 所有它右邊都比它大 , 然後再 call自己去把 pivot 左邊與 pivot 右邊排好 .

26 5 37 1 61 11 59 15 48 19

26 5 37 1 61 11 59 15 48 19

26 5 19 1 61 11 59 15 48 37

26 5 19 1 15 11 59 61 48 37

11 5 19 1 15 26 59 61 48 37

Page 20: Sorting

20

Quick Sort11 5 19 1 15 26 59 61 48 37

1 5 11 19 15 26 59 61 48 37

1 5 11 19 15 26 59 61 48 37

1 5 11 15 19 26 59 61 48 37

1 5 11 15 19 26 59 61 48 37

1 5 11 15 19 26 48 37 59 61

1 5 11 15 19 26 37 48 59 61

1 5 11 15 19 26 37 48 59 61

Page 21: Sorting

21

先大概算一下

• 大約是

• 接下來要稍微嚴謹一點證明 :

Page 22: Sorting

22

有點長的證明• 用歸納法• 首先 :

• 假設 and .• n=2 時 , • 假設時 ,

Page 23: Sorting

23

有點長的證明

Page 24: Sorting

24

Quick Sort 的其他性質• 但是 Worst case 時所需時間還是• 想想看 , 什麼時候會變成這樣呢 ?• 答 : 每次 pivot 都是最大的 . (or 每次都是最小的 )

• 所需空間 :• 需要 stack (處理 recursive call 用 )• stack 需要多大呢 ?• Worst case: 需要

Page 25: Sorting

25

Merge Sort• 先看看 : 要怎麼把兩個已經排好的 list merge 成一個 ?• 請同學講講看 也類似於之前 polynomial 加法• 所花時間 :

• Merge sort版本一• 方法 : 每個 item 一開始當作一個有一個 item 已經排好的list• 然後每次把兩個 merge 成一個• 一直到全部變成一個 list 為止

Page 26: Sorting

26

Merge sort26 5 77 1 61 11

5 26 1 77 11 61

1 5 26 77 11 61

1 5 11 26 61 77

pass 1

pass 2

pass 4

pass 3

Page 27: Sorting

27

Merge sort• 每個 pass, 正好每個 item 都 process 了一次 (worst case). 所以為• 總共需要多少 pass 呢 ?• 每次數量減少一半• 所以需要 passes.• 總共所需時間為

• 需要額外的空間來 sorting• 使用兩組跟 n 一樣大的空間 , 交互存入 merge 過後的 list• 也可以用 recursive 的方法寫 . 請參見 program 7.10 (p. 350)

Page 28: Sorting

28

Heap Sort• 方法 : 用 minimum heap 或 maximum heap 來 sort list. 使用所有 item( 的 key) 來建立 heap. 之後每次從heap取出一個 item, 放入 sorted list. 則拿完以後就sorting 完畢 .

• 1. 稍微改變一下 : 是否可以做到不用額外空間來建 heap呢 ?• 可以 . array of items 想是 binary tree.

Page 29: Sorting

29

26

5 77

48 1915

1 61 11 59

這些不用 check, 因為沒有 children

[1]

[2][3]

[4]

[5][6] [7]

[8] [9] [10]

從 n/2 之前開始往回 check, 只要檢查該 node 為 root 的 binary tree 是否為 heap即可 .

接下來只要每次把 root跟最後一個 node 交換重新整理維持 heap即可 .當拿完以後就是完成 sorting 時 .( 過程可參考課本 figure 7.8 p 355)

Page 30: Sorting

30

Heap sort• 兩個步驟 :• 1. 一開始建 heap• 2. 每次拿一個 item 出來

• 1. 開始建 heap 的時候• 花的時間為

• 2. 每次拿一個 item 出來 , 花• 總共 n-1 次 , 共• 只需要少數額外空間 .

第 k層有幾個 node

第 k層到 leaf 的 distance

Page 31: Sorting

31

比較四大金剛

• Insertion sort: n 小的時候非常快速 . (因為常數 c 小 )• Quick sort: average performance 最好• Merge sort: worst-case performance 最好• Heap sort: worst-case performance 不錯 , 且不用花多的空間• 可以 combine insertion sort和其他 sort• 怎麼 combine?• 答 : 看 n 的大小決定要用哪一種 sorting algorithm.

Worst Average

Insertion sort

Heap sort

Merge sort

Quick sort

Page 32: Sorting

32

Sorting on several keys• 假設 K 有很多個 sub-key

• 則 iff• for some , or

• 則我們可以有以下的 sorting 方法 .• 先依照most significant key sort, 然後依序往 least significant key sort 過去 : Most Significant Digit first (MSD) sorting• 先依照 least significant key sort, 然後依序往most significant key sort 過去 : Least Significant Digit first (LSD) sorting

Most significant key Least significant key

Page 33: Sorting

33

Sorting on several keys• 哪一種比較好 ?

• 如果使用 stable sorting algorithm, 則 LSD sort 比較單純• sort 成”一桶一桶”以後不需要分開 sort• 用黑板舉例吧~~ (投影片做到發瘋了 )

Page 34: Sorting

34

Radix Sort• 方法 : 每次用某種方法把 items 分為 r堆 . 然後再concatenate起來 .

• 怎麼分為 r堆 ?• 舉例 : 每次使用某一位數的數字分堆 .• 第一次依照個位數分為十堆 , 然後再放在一起 .• 第二次依照十位數分為十堆 , 然後再放在一起 .• …• 直到完成 ( 共 d 個 pass).• 最後放在一起的 items即為 sort 好的 list.

• 用黑板舉例 .

Page 35: Sorting

35

重要事項提醒• ptt2 開板完畢 (HsinMu) 歡迎大家問問題• 作業五周日會上線 , 期限兩周• 作業四這周日 deadline• 下週五停課一次 , 於下下周二晚上 6-9pm補課