• 沒有找到結果。

2010/12/31 2010最後一堂資料結構課

N/A
N/A
Protected

Academic year: 2022

Share "2010/12/31 2010最後一堂資料結構課"

Copied!
32
0
0

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

全文

(1)

Michael Tsai

2010/12/31 2010最後一堂資料結構課

(2)

Happy New Year

作業六(最後一個作業, 耶)上線

期末考前due (跟助教會再討論)

期末考方式討論(close book, 2 A4雙面大抄)

範圍: 全部(第一堂課到最後一堂課)

(3)

紅黑樹

可以幹嘛?

是棵平衡的樹: 保證從root到某個leaf的simple path一定不會 超過從root到任何一條其他這樣的path的兩倍長

大概平衡operation可以都在O(log n)內完成. 耶.

那些operation?

1. 找

2. 插入某element

3. 殺掉某element

4. 找最大or找最小element

(4)

紅黑樹

每個node都分配一個顏色: 紅或黑

使用extended binary tree: 沒有children的地方都補上external  node, 又叫nil

規則們:

1. 每個node不是黑就是紅

2. root是黑色的

3. 每個leaf (external node, or nil)都是黑色

4. 如果一個node是紅的, 則它的children都是黑的

5. 對每個node來說, 從它到他的所有子孫葉子node的路徑上 含有一樣數目的黑色node

(5)

黑高度

Black height: bh(x) = 從x到任何一個它的子孫葉子node遇到 的black node個數 (因為都一樣, 所以可以是任何一個)

不包含node x自己

external node或nil(葉子node)的black height為0

(6)

巨大的紅黑樹例子

26

17 41

47

nil

30

35 39

28 38

14 21

10 16 19 23

15 20 7 12

nil

nil nil

nil nil

nil nil

nil nil

nil nil

nil nil

nil nil

nil nil

3 nil

nil nil

1 2

1 1 1 1

2 3

1 2

3

2

1

1 1

1 2

1 1 1

bh(x)們

(7)

巨大的紅黑樹例子

26

17 41

30 47

35 39

28 38

14 21

10 16 19 23

15 20 7 12

3

1 2

1 1 1 1

2 3

1 2

3

2

1

1 1

1 2

1 1 1

bh(x)們

nil

(8)

來點證明

定理: 一個有n個node的紅黑樹, 最高為2 log(n+1)

第一步驟: 證明node x底下的subtree最少有2 1個 internal node

歸納法證明:

1. 當x的height為0, 則x是個葉子. bh(x)=0. 2 1 0. 的確 subtree有0個internal node.

2. 假設當x的height為正整數, 且是一個有兩個children的 internal node. 每個小孩的black height為bh(x) or bh(x)‐1. (看 該小孩是黑是紅)

假設小孩的subtree都至少有2 1個internal node

3. 則x底下的subtree應該有

2 1 2 1 1 2 1(成功了!)

(9)

來點證明

“4. 如果一個node是紅的, 則它的children都是黑的”

另外一種解釋:

從任一node到leaf, 至少一半以上的node是黑的

假設h是tree的高度, 則

“node x底下的subtree最少有2 1個internal node”

第二步驟: root底下至少有多少個node?

root底下最少有

2 1 2 1個node.

假設node個數為n, 則 2 1

 2 log 1 . 耶.

(10)

以上證明…

說明為什麼

1. 找

4. 找最大or找最小element

等operation可以在O(log n)內完成

那麼insert和delete呢?

問題: 插入或殺掉之後, 可能不滿足紅黑樹的條件

(11)

Representation

data

parent

left right

color

(12)

Rotate

等一下會用到的

y x

x

y left‐rotate(T,x)

right‐rotate(T,y)

(13)

Insertion

首先, 用原本的binary search tree插入的方法

insert(z)

不同的地方:

1. z的兩個children都指到nil node

2. z為紅色

3. 我們最後要處理不符合紅黑樹規則的部分

怎麼處理?

nil

(14)

會違反那些規則呢?

規則們:

1. 每個node不是黑就是紅

2. root是黑色的

3. 每個leaf (external node, or nil)都是黑色

4. 如果一個node是紅的, 則它的children都是黑的

5. 對每個node來說, 從它到他的所有子孫葉子node的路徑上 含有一樣數目的黑色node

5.不會違反因為z是紅的, z取代掉一個nil, 而z的兩個children 都是nil

如果違反2, 則z是root, 整棵樹只有z: 很容易處理

來看違反4的情形: z’s parent is also red

nil

nil nil

17

(15)

情形一: 你的叔叔是紅的

A D

B C

z: 你 parent(z): 你爸 y:叔叔

A D

B C

z: 你

繼續看新z爸爸是不是紅的 你是你爸右邊的小孩

(16)

情形一: 你的叔叔是紅的

B D

A

C

z: 你

parent(z): 你爸 y:叔叔

B D

A

C

z: 你 你是你爸左邊的小孩

注意看每一個步驟是否有保持 紅黑樹第五個條件

(17)

情形二與三: 你的叔叔是黑的

A

B C

z: 你 parent(z): 你爸 y:叔叔

B

A

C

z: 你

parent(z): 你爸

y:叔叔

B

A C

z: 你 你是你爸右邊的小孩

你是你爸左邊的小孩 left rotate(A)

right rotate(C)

需要繼續往上層看嗎? 不用! 因為B還是黑的!

注意看每一個步驟是否有保持 紅黑樹第五個條件

(18)

黑板練習時間

26

17 41

30 47

35 39

28 38

14 21

10 16 19 23

15 20 7 12

3

1 2

1 1 1 1

2 3

1 2

3

2

1

1 1

1 2

1 1 1

2. 加入4?

1. 加入40?

(19)

要花多少時間呢?

原本正常的binary tree insert要花O(log n)的時間

因為高度最高為2 log(n+1)

那麼花費在調整的時間呢?

最糟的狀況? 情形一一直重複發生, 每次z往上移兩層

執行時間最糟要花跟高度成正比的時間

也是O(log n)

那如果發生情形二or三呢?

執行一次即完成. O(1). (所以比O(log n)小)

另外, 最多rotate只需要執行兩次. (不會再發生第二次情形二 or三) 

(20)

tree 複習)

首先要先找到那個node

接著, 有各種不同情形:

如果沒有手(degree=0)

直接拿掉

20

12 22

10 15 25

11

(21)

tree 複習)

如果只有一隻手 (degree=1)

則把那個唯一的child拿上來接到parent上

例如: 拿掉22

問題: 要怎麼接? 

怎麼記得parent是誰?

20

12 22

10 15 25

11

(22)

tree 複習)

如果兩手都有東西呢? (degree=2)

例如刪掉12

找左邊child底下最大的

(或者是右邊child底下最小的)

刪掉它並把它移到原本刪掉的位置

問題: 那如果那個最大的底下還有child呢?

直接拿上來(最多只會有左邊一隻手)

這時被移上去的node顏色改變成新位置原本node的顏色

20

12 22

10 15 25

11

(23)

拿掉一個node, 什麼時候會違反規則?

假設前述三種情形中,

移動(兩手都有)或是刪除(一隻 手或沒有手)的node為y

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

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

2. 會不會造成兩個紅色node是 相鄰的呢? (父子)

A. 如果y是被刪掉的, 因為它是 紅的, 所以它的上下層都是黑的

不會有問題

20

12 22

10 15

11

y

(24)

拿掉一個node, 什麼時候會違反規則?

B. 如果y是被移動的, 假設y有 children也是黑色的, 不會造成 問題

3. y如果是紅色, 它不會是root. 

所以也不會有造成違反root是 黑色的規定

綜合以上三點, 只有當y為黑色 時才會造成問題, 需要調整

20

12 22

10 15 25

11

(25)

可能違反規則的情形

當y是黑色的, 可能造成違反規則的有下列情形:

1. y是root. y刪掉以後, 它的一個children是紅色的, 變成了 root

2. y原本的上下兩層都是紅色的, 移走或刪除以後變成兩個 紅色相鄰

3. y刪掉或移走以後, 造成black height不一致(因為y是黑的)

(26)

怎麼修正紅黑樹以符合規則呢?

假設x為移動到y位置的node 

(如果忘記了的話, y是被刪掉或被移動的node)

y原本是黑的, 則x好像要”有兩個黑”, 這樣black height才會正 確

每次x都指到一個”兩個黑”的node (或者也有可能是”紅與黑”)

依序修正

(27)

情形一: x的弟弟是紅的

A D

C B

E

x w

D

A C

B E

x

new w change color of B and D

and left rotate(B)

轉換成情形二、三、或四

(28)

x的弟弟是黑的&它的姪子們都是黑的

A D

C B

E

x w

A D

C B

E new x

(29)

它的姪子們都是左紅右黑

A D

C B

E

x w

D

A C

B

E new w x

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

變成case 4

(30)

它的姪子右邊那一個是紅的

A D

C B

E

x w

D

A C

B E

new x=root B,D,E顏色改變

left rotate(B)

(31)

花費的時間

O(log n)

最糟的情形是情形二

每次往上移一層最糟O(log n)

其他情形都是O(1)

(32)

Happy New Year

老師的叮嚀

不要爆肝

不要不睡覺

身體最重要

心情快樂最重要

明年再見~~~

參考文獻

相關文件

In the 2010/2011 academic year, there were 10 institutions of higher education with courses offered; a total of 106 schools a were providing pre-primary, primary and secondary

Principais dados estatísticos de 2009 a 2010, Segundo o ramo de actividade dos estabelecimentos Principal indicators by industry,

Principais dados estatísticos de 2009 a 2010, Segundo o ramo de actividade dos estabelecimentos Principal indicators by industry,

Cauchy, Gauss, Laplace, Poisson (from left to right) Cauchy, Gauss, Laplace, Poisson (from left to right)... Poisson and Poisson Process Poisson and

D Global warming causes less precipitation, thus causing the glaciers to retreat.. •

From the existence theorems of solution for variational relation prob- lems, we study equivalent forms of generalized Fan-Browder fixed point theorem, exis- tence theorems of

Nonreciprocal Phenomena in Chiral Materials - Left and Right in Quantum Dynamics –..

[r]