• 沒有找到結果。

Michael Tsai2010/12/10 SORTING

N/A
N/A
Protected

Academic year: 2022

Share "Michael Tsai2010/12/10 SORTING"

Copied!
35
0
0

加載中.... (立即查看全文)

全文

(1)

Michael Tsai

2010/12/10

(2)

今日菜單

上次還沒講完的 AOE 網路

Sorting

定義

最快可以 sort 多快 ?

Insertion Sort

Quick Sort

Merge Sort

Heap Sort

2

(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

start

finish

  1

=6

  4

=1

  3

=5

  6

= 2

  9

= 4

  5

=1

  7

= 9

  10

=2

  11

= 4

  8

=7

  2

= 4

(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

( 完全不能延誤 )

4

1

2

0 4

6

7

8

3 5

start

finish

  1

=6

  4

=1

  3

=5

  6

= 2

  9

= 4

  5

=1

  7

= 9

  10

=2

  11

= 4

  8

=7

  2

= 4

(5)

AOE Network

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

2

0 4

6

7

8

3 5

start

finish

  1

=6

  3

=5

  6

= 2

  9

= 4

  5

=1

  7

= 9

  11

= 4

  8

=7

  2

= 4

Initia l

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

0 0 6 4 5 0 0 0 0 0 [3 2

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

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

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

<k,l> then e(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]

(6)

AOE Network

6

1

2

0 4

6

7

8

3 5

start

finish

  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] stac

1 0 6 4 5 7 7 0 11 0 k[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)?

(7)

AOE Network

用 reverse topological order 來依序算出

請同學來算算看

•  

1

2

0 4

6

7

8

3 5

start

finish

  1

=6

  4

=1

  3

=5

  6

= 2

  9

= 4

  5

= 1

  7

= 9

  10

=2

  11

= 4

  8

=7

  2

= 4

(8)

Activit

y 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 yes

Activit

y 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 yes

8

1

2

0 4

6

7

8

3 5

start

finish

  1

=6

  4

=1

  3

=5

  6

= 2

  9

= 4

  5

=1

  7

= 9

  10

=2

  11

= 4

  8

=7

  2

= 4

(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.

•  

(10)

Sorting 有什麼用 ?

例子一 : 在一個 list 裡面找東西 .

如果沒有 sort 過 , 要怎麼找 ?

答 : 只能苦工 , 從頭找到尾 

那如果 sort 過呢 ?

繼續苦工的話有幫助嗎 ?

有 . 可以提早知道要找的數字不在裡面 .

也可以 binary search 

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

•  

10

(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 個

所以需要

•  

(12)

Sorting 有什麼用 ?

如果 sort 過呢 ?

可以利用類似之前講過 polynomial 加法的方法 .

( 請同學回憶並解釋 ?)

可參考課本 program 7.3 (p.337)

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

不要忘了還有 sorting 的時間

所以 sorting 究竟要花多少時間呢 ?

•  

12

(13)

Sorting 的分類

Internal Sort: 所有的資料全部可以一股腦地放在記憶體 裡面

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

我們只講 internal sort 的部分

 現在電腦 ( 及如手機 , iPod, iPad 等各種計算裝置 ) 記 憶體越來越大 , 越來越便宜 , 比較少有機會使用 externa l sort.

有興趣的同學可以看一看課本 7.10 (p.376)

(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 像有錯

14

(15)

每個 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

(16)

到底我們可以 sort 多快 ?

所以 , worst case 所需要花的時間 , 為此 binary tree 的 height.

Binary tree 的性質 : 如果 height 為 k, 則最多有個 lea ves

所以有個 leaves 的話 , 至少 height 為

結論 : 任何以”比較”為基礎的 sorting algorithm wors t-case complexity 為 .

< 動腦時間 > 如何證明 average complexity 也是 ?

答 : 算算看 leaf 到 root 的 distance 的平均值 .

•  

16

(17)

Insertion sort

方法 : 每次把一個 item 加到已經排好的 , 已經有 i 個 it em 的 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

(18)

Insertion Sort

要花多少時間 ?

答 : 最差的狀況 , 每次都要插到最末端 ( 花目前 sorted 大小的時間 )

平均 complexity, 也是 .

變形 ( 蟲 ):

1. 在找正確的應該插入的地方的時候 , 使用 binary searc h. ( 但是移動還是

2. 使用 linked list 來表示 整個 list 的 item, 則插入時 不需要移動 , 為 . ( 但是尋找插入的地方的時候還是需要 )

•  

18

(19)

Quick Sort

方法 : 每次找出一個 pivot( 支點 ), 所有它左邊都比它 小 ( 但是沒有 sort 好 ), 所有它右邊都比它大 , 然後再 c all 自己去把 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

(20)

Quick Sort

20

11 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

(21)

先大概算一下

大約是

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

•  

(22)

有點長的證明

用歸納法

首先 :

假設 and .

n=2 時 ,

假設時 ,

•  

22

(23)

有點長的證明

•  

(24)

Quick Sort 的其他性質

但是 Worst case 時所需時間還是

想想看 , 什麼時候會變成這樣呢 ?

答 : 每次 pivot 都是最大的 . (or 每次都是最小的 )

所需空間 :

需要 stack ( 處理 recursive call 用 )

stack 需要多大呢 ?

Worst case: 需要

•  

24

(25)

Merge Sort

先看看 : 要怎麼把兩個已經排好的 list merge 成一個 ?

請同學講講看 也類似於之前 polynomial 加法

所花時間 :

Merge sort 版本一

方法 : 每個 item 一開始當作一個有一個 item 已經排好的 list

然後每次把兩個 merge 成一個

一直到全部變成一個 list 為止

•  

(26)

Merge sort

26

26 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

(27)

Merge sort

每個 pass, 正好每個 item 都 process 了一次 (worst cas e). 所以為

總共需要多少 pass 呢 ?

每次數量減少一半

所以需要 passes.

總共所需時間為

需要額外的空間來 sorting

使用兩組跟 n 一樣大的空間 , 交互存入 merge 過後的 list

也可以用 recursive 的方法寫 . 請參見 program 7.10 (p.

350)

•  

(28)

Heap Sort

方法 : 用 minimum heap 或 maximum heap 來 sort list.

使用所有 item( 的 key) 來建立 heap. 之後每次從 heap 取 出一個 item, 放入 sorted list. 則拿完以後就 sorting 完畢 .

1. 稍微改變一下 : 是否可以做到不用額外空間來建 heap 呢 ?

可以 . array of items 想是 binary tree.

28

(29)

5 77

48 19

15

1 61 11 59

這些不用 check, 因為沒有 children

[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)

(30)

Heap sort

兩個步驟 :

1. 一開始建 heap

2. 每次拿一個 item 出來

1. 開始建 heap 的時候

花的時間為

2. 每次拿一個 item 出來 , 花

總共 n-1 次 , 共

只需要少數額外空間 .

•  

30

第 k 層有幾個 node

第 k 層到 leaf 的 distance

(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

Worst Average

Insertion sort Heap sort Merge sort Quick sort

(32)

Sorting on several keys

假設 K 有很多個 sub-key

則 iff

for some , or

則我們可以有以下的 sorting 方法 .

先依照 most significant key sort, 然後依序往 least significan t key sort 過去 : Most Significant Digit first (MSD) sorting

先依照 least significant key sort, 然後依序往 most significan t key sort 過去 : Least Significant Digit first (LSD) sorting

•  

32

Most significant key Least significant key

(33)

Sorting on several keys

哪一種比較好 ?

如果使用 stable sorting algorithm, 則 LSD sort 比較 單純

sort 成”一桶一桶”以後不需要分開 sort

用黑板舉例吧 ~~ ( 投影片做到發瘋了 )

(34)

Radix Sort

方法 : 每次用某種方法把 items 分為 r 堆 . 然後再 concaten ate 起來 .

怎麼分為 r 堆 ?

舉例 : 每次使用某一位數的數字分堆 .

第一次依照個位數分為十堆 , 然後再放在一起 .

第二次依照十位數分為十堆 , 然後再放在一起 .

直到完成 ( 共 d 個 pass).

最後放在一起的 items 即為 sort 好的 list.

用黑板舉例 .

•  

34

(35)

重要事項提醒

ptt2 開板完畢 (HsinMu) 歡迎大家問問題

作業五周日會上線 , 期限兩周

作業四這周日 deadline

下週五停課一次 , 於下下周二晚上 6-9pm 補課

參考文獻

相關文件

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

• vertex

• 以下我們將說明為什麼 average running time 會接近 bes t-case. • 假設很糟的一個狀況 :

” 影格速率(Frame Rate )是指 Flash 動畫每 秒鐘播放的影格數,預設是 12 fps(frame per second),也就是每秒播放 12

然後,他在同樣的器皿中放入另外一隻大白 鼠,在它掙扎了 5分鐘左右的時候,放入一

We use neighborhood residues sphere (NRS) as local structure representation, an itemset which contains both sequence and structure information, and then

A majority of the secondary schools adopted project learning to develop students’ language development strategies and generic skills but this was only evident in a small number of

When an algorithm contains a recursive call to itself, we can often describe its running time by a recurrenceequation or recurrence, which describes the overall running time on