fibonacci heaps

41
FIBONACCI HEAPS Michael Tsai 2011/1/6

Upload: jeneil

Post on 18-Feb-2016

77 views

Category:

Documents


0 download

DESCRIPTION

Fibonacci heaps. Michael Tsai 2011/1/6. Outline. 本學期最後一堂課 … 有什麼話要講嗎 ? 考試 方式 Red-black tree 複習 Fibonacci Heaps. x, y, z 的定義. y. z. y. z. z. nil. x. x. y. z: 要被刪掉的 y: z 少於 兩隻手  被砍掉的 z 兩隻手  移動到 z 原本位置的 x: 移動到原本 y 的位置的. x. 拿掉一個 node, 什麼時候會違反規則 ?. 假設前述三種情形中 , - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Fibonacci heaps

FIBONACCI HEAPSMichael Tsai2011/1/6

Page 2: Fibonacci heaps

2

Outline• 本學期最後一堂課…有什麼話要講嗎 ?• 考試方式• Red-black tree 複習• Fibonacci Heaps

Page 3: Fibonacci heaps

3

x, y, z 的定義

z zy y

x

z

y

x

nil x

z: 要被刪掉的y: z 少於兩隻手被砍掉的 z 兩隻手 移動到 z 原本位置的x: 移動到原本 y 的位置的

Page 4: Fibonacci heaps

4

拿掉一個 node, 什麼時候會違反規則 ?• 假設前述三種情形中 ,• 移動 ( 兩手都有 ) 或是刪除 ( 一隻手或沒有手 ) 的 node 為 y

• 當 y 為紅色 ( 原本的顏色 ), 移動或刪除會造成違反規則嗎 ?

• 1. black height 不會改變 , 因為y 是紅色 node

• 2. 會不會造成兩個紅色 node 是相鄰的呢 ? ( 父子 )• A. 如果 y 是被刪掉的 , 因為它是紅的 , 所以它的上下層都是黑的• 不會有問題

20

12 22

10 15

11

y

Page 5: Fibonacci heaps

5拿掉一個 node, 什麼時候會違反規則 ?• B. 如果 y 是被移動的 , 假設y 有 children 也是黑色的 , 不會造成問題• 3. y 如果是紅色 , 它不會是root. 所以也不會有造成違反root 是黑色的規定• 綜合以上三點 , 只有當 y 為黑色時才會造成問題 , 需要調整

20

12 22

2510 15

11

Page 6: Fibonacci heaps

6

可能違反規則的情形• 當 y 是黑色的 , 可能造成違反規則的有下列情形 :• 1. y 是 root. y 刪掉以後 , 它的一個 children 是紅色的 , 變成了 root• 2. y 原本的上下兩層都是紅色的 , 移走或刪除以後變成兩個紅色相鄰• 3. y 刪掉或移走以後 , 造成 y 的祖先們的 black height不一致 ( 因為 y 是黑的 )

• y 拿掉以後 , y 的黑色就被”趕到” x 裡面了• x 是表示 : 這邊要有一份黑色• 但是 x 本身可能原本是紅或黑色

Page 7: Fibonacci heaps

7

x 是”紅與黑”或”黑與黑” ?• 1. x 如果是”紅與黑” , 我們把它改成黑就可以了 . • ( 這邊要多一份黑色 , 所以我就把紅色變成黑色就多一份了 )

• 2. x 如果是 root 且為”黑與黑” , 那麼直接就可以改成單純的黑色• ( 反正已經到 root 了 , 所以就算把一份黑色拿掉也不會有祖先會因此少算一份黑色的 node)

• 3. 其他的就用以下的四種 case 處理…

Page 8: Fibonacci heaps

8

情形一 : x 的弟弟是紅的

DA

C

B

𝛼 𝛽

𝛾 𝛿𝜖

E

𝜁

x w

D

A C

B

𝛼 𝛽 𝛾 𝛿

𝜖

E

𝜁xnew w

change color of B and Dand left rotate(B)

轉換成情形二、三、或四

Page 9: Fibonacci heaps

9

情形二:x的弟弟是黑的&它的姪子們都是黑的

DA

C

B

𝛼 𝛽

𝛾 𝛿𝜖

E

𝜁

x w DA

C

B

𝛼 𝛽

𝛾 𝛿𝜖

E

𝜁

new x

Page 10: Fibonacci heaps

10

情形三: x的弟弟是黑的它的姪子們都是左紅右黑

DA

C

B

𝛼 𝛽

𝛾 𝛿𝜖

E

𝜁

x w

D

AC

B

𝛼 𝛽 𝛾

𝛿

𝜖

E

𝜁

new wx

C 和 D 顏色改變right rotate(D)

變成 case 4

Page 11: Fibonacci heaps

11

情形四: x的弟弟是黑的它的姪子右邊那一個是紅的

DA

C

B

𝛼 𝛽

𝛾 𝛿𝜖

E

𝜁

x w

D

A C

B

𝛼 𝛽 𝛾 𝛿

𝜖

E

𝜁

new x=root

B,D,E 顏色改變left rotate(B)

Page 12: Fibonacci heaps

12

Delete 要花多少時間 ?• 解決路徑圖 :• 1 2 solved ( 從 1 到 2 的 , 情形二中的圖中 B 原本一定是紅色 , 所以可以直接解決 )• 134solved• 14solved• 34 solved• 4 solved• 2 解決 ( 如果圖中 B 原本是紅色 ), or 轉到 1 or 2 or 3 or 4 (x 往上走一層 ) ( 如果圖中 B 原本是黑色 )

• 所以 worst case 為 2,2,2,… 一直到 root 為止• O(log n)

Page 13: Fibonacci heaps

13

Fibonacci heaps• 類似於 Binomial heaps• 也是 forest (min tree or max tree 組成 )• 各層的 sibilings 使用 circular doubly linked list

• 有以下的 operations:• insert• find min• delete min• decrease• merge• 除了 delete min 外 , 其他都可以”平均”達到 O(1)!• 還可以做以下的 operation• decrease• delete

Page 14: Fibonacci heaps

14

Insert• 把要加入的 element 自己當作一棵樹 ( 只有一個 node)• 放到 heap 裡面 ( 當作最高層的一棵樹 )• 檢查指著最小的 element 的指標是不是正確的• ( 不用檢查是否要把同樣 degree 的 tree merge 起來 , 和binomial heap 不同 )• ( 把工作拖到需要做再來做可能之後某一些根本不需要做 ?)• O(1)

52

3

18

39

38

41

17

30

24

26

35

46

723

21

min

Page 15: Fibonacci heaps

15

Merge• 把兩個 forest 直接變成同一個 forest• 也就是把兩個 circular linked list 合併• ( 不用檢查是否要把同樣 degree 的 tree merge 起來 , 和binomial heap 不同 )• O(1)

Page 16: Fibonacci heaps

16

重頭戲 : delete min• 剛剛欠的現在都要要回來了• 跟上次 binomial heaps 裡面 merge 的情形幾乎一樣• 1. 先把 min 指到的 element 底下的 sub tree 都放到最頂層• 2. min 可以從最頂層拿掉了• 3. 依序檢查是否有一樣 degree 的樹 , 有的話就把兩個合併 , 然後繼續尋找下去• 黑色的 node 是被標記 , 在被跟現在的 parent 連結之後 , 有砍掉過一個小孩的• 所以如果某個 node 跟別人合併成一棵 , 則要把黑色消掉

Page 17: Fibonacci heaps

17

delete min 例子

52

3

18

39

38

41

17

30

24

26

35

46

723

21

min

Page 18: Fibonacci heaps

18

delete min 例子

52

18

39

38

41

17

30

24

26

35

46

723

21

min

0 1 2 3

Page 19: Fibonacci heaps

19

delete min 例子

52

18

39

38

41

17

30

24

26

35

46

723

21

0 1 2 317

Page 20: Fibonacci heaps

20

delete min 例子

52

18

39

38

41

17

30

24

26

35

46

723

21

0 1 2 317 24

Page 21: Fibonacci heaps

21

delete min 例子

52

18

39

38

41

17

30

24

26

35

46

723

21

0 1 2 323 17 24

Page 22: Fibonacci heaps

22

delete min 例子

52

18

39

38

41

17

30

24

26

35

46

723

21

0 1 2 323 17 24

Page 23: Fibonacci heaps

23

delete min 例子

52

18

39

38

41

17

30

24

26

35

46

7

23

21

0 1 2 317 24

17

30

Page 24: Fibonacci heaps

24

delete min 例子

52

18

39

38

41

24

26

35

46

7

23

21

0 1 2 324

17

30

24

26

35

46

Page 25: Fibonacci heaps

25

delete min 例子

52

18

39

38

41

7

23

21

0 1 2 37

17

30

24

26

35

46

Page 26: Fibonacci heaps

26

delete min 例子

52

18

39

38

41

7

23

21

0 1 2 321 7

17

30

24

26

35

46

Page 27: Fibonacci heaps

27

delete min 例子

52

18

39

38

41

7

23

21

0 1 2 321 18 7

17

30

24

26

35

46

Page 28: Fibonacci heaps

28

delete min 例子

52

18

39

38

41

7

23

21

0 1 2 321 18 7

17

30

24

26

35

46

Page 29: Fibonacci heaps

29

delete min 例子

18

39

38

41

7

23

21

0 1 2 318 7

17

30

24

26

35

46

52

21

52

Page 30: Fibonacci heaps

30

delete min 例子

18

39

38

41

7

23

0 1 2 318 7

17

30

24

26

35

46

21

52

Page 31: Fibonacci heaps

31

delete min 例子

18

39

38

41

7

23

0 1 2 338 18 7

17

30

24

26

35

46

21

52

min

Page 32: Fibonacci heaps

32

Decrease• 把某一個 element(key) 數字減少• 減少以後 , 那個 element 可能就比他的 parent 小了• 必須做一些動作來修正• 1. 如果減少以後 , 比它的 parent 小 , 就把它跟 parent中間連結砍斷 , 把以該 element 的 subtree 移到最上層• 2. 如果這個 parent 已經被砍過一次小孩 , 則把它和它的parent 也砍斷 , 移到最上層 , 並繼續往上檢查是否有此情形…• ( 此稱為 cascading cut)

Page 33: Fibonacci heaps

33

decrease 例子7

24

17

30

23

462

6

35

18

21

39

52

38

41

min

4615

15

24

Page 34: Fibonacci heaps

34

decrease 例子7

17

30

23

26

35

18

21

39

52

38

41

min

15

24

355

5 26

24

Page 35: Fibonacci heaps

35

Delete• 方法 :• 1. 把某一個 element 減少到負無限大 ( 此時它會被移動到最上層 , 而且 min 會指著它 )• 2. delete min

Page 36: Fibonacci heaps

36

Fibonacci Heap 中 node 的degree• 定理 : • 用歸納法 .• k=0 and k=1 時成立 (• 假設 for

• 得證

Page 37: Fibonacci heaps

37

Fibonacci Heap 中 node 的degree• 定理 : b 為任何 Fibonacci heap 中的一個 node, 則 b 的degree 最多為 , , m 是以 b 為 root 之 subtree 的 node數目 .• 證明 : 假設為當 b 為 degree i 的 subtree 的最少 node個數 . • 則• 假設 為 b 的 children, 其中比早加入 b, 比早加入 b等等依此類推 • 當加入時 , b 已經有 i-1 個 children, 所以至少 degree 為i-1• 此時 , 最多可能少掉一個 children ( 少兩個就會被移到最上層 ), 所以至少 degree 為 i-2

Page 38: Fibonacci heaps

38

Fibonacci Heap 中 node 的degree• 我們現在要證明 , k 為 0 或正整數 , 為 Fibonacci 數列• 用歸納法• •

• k=0,1,2 時都成立• 假設 i=0,1,…,k-1 時 , 都成立• 證明 i=k 時 , 是否成 :

Page 39: Fibonacci heaps

39

Fibonacci Heap 中 node 的degree

• Fibonacci number滿足• 所以 ,

• 得證

Page 40: Fibonacci heaps

40

Fibonacci Heap- time complexity• 又• 所以 ,• m 為實際上以 b 為 root 之 subtree 的 node 數目• . 找到 bound 了 !

• Insert, merge, find min O(1)

• 從 Fibonacci tree degree 的 upper bound 我們可以得知 :• Delete min O(degree(trees)+m) = O(log n + m),

m=number of trees in the first level• Decrease O(c), c 為 mark 為黑色之 node 個數 ( 已經被刪掉一個小孩的個數 )

Page 41: Fibonacci heaps

41

下學期再見• 教得不好請多多包涵• 下學期敬請繼續支持• 歡迎來聊天