• 沒有找到結果。

Michael Tsai

N/A
N/A
Protected

Academic year: 2022

Share "Michael Tsai"

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 6

1

5

2

4 1

9

2

7 4 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 6

1

5

2

4 1

9

2

7 4 4

(5)

AOE Network

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

2

0 4

6

7

8

3 5

start

finish 6

5

2

4 1

9 7 4 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> 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 6

1

5

2

4 1

9

2

7 4 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)?

(7)

AOE Network

min ,

用reverse topological order來依序算出

請同學來算算看

1

2

0 4

6

7

8

3 5

start

finish 6

1

5

2

4 1

9

2

7 4 4

(8)

Activity 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 6

1

5

2

4 1

9

2

7 4 4

(9)

Sorting

定義:

有 , , , … , 等n個record

每個record有個key.

, , , … ,

我們會定義對key們定義>, =, <

這些operations是transitive, 就是說 a>b, b>c的話, a>c

要找到一個 , , , … , 的排列 使得

1.  , 1 1

2. if i<j and  ,then  precedes 

如果同時兩個條件成立則此sorting方法為 stable.

(10)

Sorting有什麼用?

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

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

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

那如果sort過呢?

繼續苦工的話有幫助嗎? 

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

也可以binary search  log

但是, 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等各種計算裝置)記憶體越 來越大, 越來越便宜, 比較少有機會使用external sort.

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

(14)

到底我們可以sort多快?

假設我們使用”比較”+”交換”的方法.

“比較”: 看list裡面的兩個item誰大誰小

“交換”: 交換/移動兩個item在list裡面的位置

如何歸納出”最差的狀況要花多少時間sort?”

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的所有可能排列數目:  !

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]

(16)

到底我們可以sort多快?

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

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

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

! 1 2 … 3 ⋅ 2 ⋅ 1

log ! log log Ω log

結論: 任何以”比較”為基礎的sorting algorithm worst‐case  complexity為Ω log .

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

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

16

(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

(18)

Insertion Sort

要花多少時間?

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

∑ 1

平均complexity, 也是 .

變形(蟲):

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

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

18

(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

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

先大概算一下

cn 2T cn 2 2T

log 1 log

大約是 log

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

log , 2

(22)

有點長的證明

用歸納法

首先:

∑ 1

假設 0 and 1 .

n=2時,  2 2 2 log 2

假設1 時,  log

22

(23)

有點長的證明

cm ∑

cm ∑ log

cm log

log

log

(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 case). 所以為

總共需要多少pass呢?

每次數量減少一半

所以需要 log passes.

總共所需時間為 log

需要額外的空間來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 1 2

2

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

總共n‐1次, 共 log

只需要少數額外空間.

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 log log

Merge sort log log

Quick sort log

(32)

Sorting on several keys

假設K有很多個sub‐key

, , … ,

則 iff

, , , 1 , , for some  , or

, , , 1

則我們可以有以下的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

32

Most significant key Least significant key

(33)

Sorting on several keys

哪一種比較好?

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

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

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

(34)

Radix Sort

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

怎麼分為r堆?

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

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

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

直到完成(共d個pass).

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

用黑板舉例. 

34

(35)

重要事項提醒

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

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

作業四這周日deadline

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

參考文獻

相關文件

▪ Step 2: Run DFS on the transpose

Greedy-Choice Property : making locally optimal (greedy) choices leads to a globally optimal

 From a source vertex, systematically follow the edges of a graph to visit all reachable vertices of the graph.  Useful to discover the structure of

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

• vertex

✓ Express the solution of the original problem in terms of optimal solutions for subproblems. Construct an optimal solution from

之後每次從 heap 取 出一個 item, 放入 sorted list.. array of items 想是

計算機網路 微積分上 微積分下