ĐỊNH NGHĨA CÂY ĐỎ ĐEN

Một phần của tài liệu giáo trình cấu trúc dữ liệu 2 (Trang 63 - 68)

Cõyđỏ đen là một cõy nhị phõn tỡm kiếm( BST) tuõn thủ cỏc quy tắc

sau: (hỡnh 3.2)

Mọi node phải làđỏ hoặc đen.

Node gốc và cỏc node lỏ phải luụn luụn đen.

Nếu một node làđỏ, những node con của nú phải đen.

Mọi đường dẫn từ gốc đến một lỏ phải cú cựng số lượng node đen. Khi chốn (hay xúa) một node mới, cần phải tuõn thủ cỏc quy tắc trờn -gọi là quy tắc đỏ đen. Nếu được tuõn thủ, cõy sẽ được cõn bằng.

Hỡnh 3.2Một vớ dụ về cõy đỏ đen

Số lượng node đen trờn một đường dẫn từ gốc đến lỏ được gọi là

chiều cao đen(black height). Ta cú thể phỏt biểu quy tắc 4 theo một

cỏch khỏc là mọi đường dẫn từ gốc đến lỏ phải cú cựng chiều cao đen.

Bổ đề: Một cõy đỏ đen n-node Cú: height <= 2 log(n+1)

height- Chiều cao cõy

Tớnh chất: height <= 2 * bh(x)

Thời gian tỡm kiếm: O( log n ) 3. PHẫP QUAY

Để cõn bằng cõy, cần phải tỏi sắp xếp node về mặt vật lý. Nếu tất cả

cỏc node nằm bờn trỏi node gốc, ta cần phải di chuyển một vài node qua bờn phảị Điều này làmđược nhờ cỏc phộp quaỵ Trong phần

này, chỳng ta sẽ học phộp quay là gỡ và làm sao thực hiện những

phộp quay nàỵ

Phộp quay là cỏch tỏi sắp xếp cỏc nỳt, chỳng được thiết kế làm cỏc cụng việc sau:

Nõng một số node lờn và hạ một số khỏc xuống để giỳp cõn bằng

cõỵ

Bảo đảm những tớnh chất của cõy tỡm kiếm nhị phõn khụng bị vi

phạm.

Trong cõy tỡm kiếm nhị phõn, cỏc node con trỏi cú giỏ trị khúa nhỏ

hơn node gốc, trong khi cỏc node con phải cú giỏ trị khúa lớn hơn hay bằng node gốc. Phộp quay phải đảm bảo tớnh chất nàỵ

Quay là gỡ?

Thuật ngữ quay cú thể bị hiểu nhầm. Thực ra quay khụng cú nghĩa là cỏc node bị quay màđể chỉ sự thay đổi quan hệ giữa chỳng. Một

nodeđược chọn làm "đỉnh" của phộp quaỵ Nếu chỳng ta đang thực

hiện một phộp quay qua phải, node "đỉnh" này sẽ di chuyển xuống

dưới và về bờn phải, vào vị trớ của node con bờn phải của nú. Node con bờn trỏi sẽ đi lờnđể chiếm lấy vị trớ của nú.

Nodeđỉnh khụng phải là "tõm" của phộp quaỵ Nếu lấy bỏnh xe hơi làm vớ dụ, vị trớ node đỉnh khụng ở trục của mõm bỏnh xe, màđỳng hơn làở phần trờn cựng của bỏnh xẹ

• •

Hỡnh 3.3.Phộp quay

•Kết quả của hai phộp quay thứ cõy trong phộp duyệt khụng thay đổi: • A x B y C

Ta phải đảm bảo là nếu làm phộp quay phải, node đỉnh phải cú node

con trỏị Nếu khụng chẳng cú gỡđể quay vàođiểm đỉnh. Tương tự,

nếu làm phộp quay trỏi, nodeđỉnh phải cú node con phảị

4. THấM NODE MỚI

Chỳng ta sẽ xem xột việc mụ tả qui trỡnh chốn. Gọi X, P, và Gđể chỉ định nhón những node liờn quan. X là node vi phạm quy tắc ( X cú

thể là một node mới được chốn, hoặc node con khi node cha và node con xungđột đỏ-đỏ, nghĩa là cú cựng màuđỏ).

 X là một node cho trước  P là node cha của X

 G là node ụng bà của X (node cha của P).

Trong quỏ trỡnh thờm vào node mới cú thể vi phạm cỏc quy tắc của

cõyđỏ đen, chỳng ta sẽ thực hiện cỏc thao tỏc sau đõy:

 Cỏc phộp lật màu trờnđường đi xuống  Cỏc phộp quay khi nodeđóđược chốn

 Cỏc phộp quay trờnđường đi xuống.

i) Cỏc phộp lật màu trờnđường đi xuống

Phộp thờm vào trong cõyđỏ đen bắt đầu nhưtrờn cõy tỡm kiếm nhị

phõn thụng thường: đi theo một đường dẫn từ node gốc đến vị trớ

cần chốn, đi qua phải hay trỏi tựy vào giỏ trị của khúa node và khúa tỡm kiếm.

Tuy nhiờn, trong cõy đỏ đen, đến được điểm chốn là phức tạp bởi

cỏc phộp lật màu và quaỵ

Để bảo đảm khụng vi phạm cỏc quy tắc màu, cần phải tiến hành cỏc phộp lật màu khi cần. Theo quy tắcnhưsau: nếu phộp thờm vào làm xuất hiện tỡnh trạng một node đen cú hai node con đỏ, chỳng ta đổi

cỏc node con thành đen và node cha thành đỏ (trừ khi node cha là node gốc, nú vẫn vẫn giữ màu làđen).

Một phộp lật màuảnh hưởng đến cỏc quy tắc đỏ-đen ra saỏ chỳng ta gọi node ở đỉnh tam giỏc, node cú màuđỏ trước phộp lật là P (P thay cho node cha). Chỳng ta gọi hai node con trỏi và phải của P là X1 và X2. Xem hỡnh 3.4ạ

Hỡnh 3.4ạTrước khi lật màu Hỡnh 3.4bsau khi lật màụ

Chỳng ta nhận thấy sau khi lật màu chiếu con đen của cõy khụng đổị Nhưvậy phộp lật màu khụng vi phạm quy tắc 4.

P

X1 X2

P

X1 X2

Mặc dự quy tắc 4 khụng bị vi phạm qua phộp lật, nhưng quy tắc 3

(một node con và node cha khụng thể đồng màuđỏ) lại cú khả năng bị vi phạm. Nếu node cha của P làđen, khụng cú vấn đề vi phạm khi

P chuyển từ đen sang đỏ, nhưng nếu node cha của P là đỏ, thỡ sau khiđổi màu, ta sẽ cú hai node đỏ trờn một hàng.

Điều này cần phải được chuẩn bị trước khi đi xuống theo cõy để

chốn node mớị Chỳng ta cú thể giải quyết trường hợp này bằng một

phộp quaỵ

Đối với node gốc thỡ phộp lật màu node gốc và hai node con của nú

vẫn làm cho node gốc cũng nhưhai node con cú màuđen. Điều này trỏnh sự vi phạm quy tắc 2 và quy tắc 3 (xung đột đỏ-đỏ). Trong

trường hợp này, chiều cao đen trờn mỗi đường đi từ node gốc tăng lờn 1, dođú quy tắc 4 cũng khụng bị vi phạm.

ii) Cỏc phộp quay khi chốn node

Thao tỏc chốn node mới cú thể làm cho quy tắc đỏ-đen bị vi phạm.

Do vậy sau khi chốn, cần phải kiểm tra xem cú phạm quy tắc khụng

và thực hiện những thao tỏc hợp lý.

Như đó xột ở trờn, node mới được chốn mà ta gọi là node X, luụn luụn đỏ. Node X cú thể nằm ở những vị trớ khỏc nhau đối với P và G, nhưtrong hỡnh 3.5.

X là một node chỏu ngoại nếu nú nằm cựng bờn node cha P và P cựng bờn node cha G. Điều này cú nghĩa là, X là node chỏu ngoại

nếu hoặc nú là node con trỏi của P và P là node con trỏi của G, hoặc

nú là node con phải của P và node P là node con phải của G. Ngược

lại, X là một node chỏu nộị

Hỡnh 3.5Cỏc biến dạng của node được chốn

Nếu X là node chỏu ngoại, nú cú thể hoặc bờn trỏi hoặc bờn phải của

P, tựy vào việc node P ở bờn trỏi hay bờn phải node G. Cú hai khả

năng tương tự nếu X là một node chỏu nộị Bốn trường hợp này

được trỡnh bày trong hỡnh 3.5.

Thao tỏc phục hồi quy tắc đỏ-đenđược xỏc định bởi cỏc màu và cấu

hỡnh của node X và những bà con của nú. Cú ba khả năng xảy ra được xem xột nhưsau(hỡnh 3.6)

GP P X G P X a . b . G P X d . G P G X c . X là chỏu ngoại X là chỏu nội X là chỏu ngoại X là chỏu nội

.

Hỡnh 3.6Ba khả năng sau khi chốn nỳt

i) Khả năng 1: Pđen

ii) Khả năng 2: Pđỏvà X là chỏu ngoại của G

iii) Khả năng 3: Pđỏ và X là chỏu nội của G

Chỳng ta lần lượt xột cỏc khả năng cụ thể nhưsau:

i) Khả năng 1: Pđen

P đen là trường hợp đơn giản. Node thờm vào luụn đỏ. Nếu node

cha đen, khụng cú xung khắc đỏ-đỏ (quy tắc 3), và khụng cú việc

cộng thờm vào số node đen (quy tắc 4). Do vậy, khụng bị vi phạm

quy tắc về màụ Thao tỏc chốnđó hoàn tất.

ii) Khả năng 2: Pđỏ và X là chỏu ngoại của G

Nếu node P đỏ và X là node chỏu ngoại, ta cần một phộp quay đơn giản và một vài thayđổi về màụ Bắt đầu với giỏ trị 50 tại node gốc,

và chốn cỏc node 25, 75 và 12. Ta cần phải làm một phộp lật màu trước khi chốn node 12.

Bõy giờ, chốn node mới X là 6 (hỡnh 3.7ạ) xuất hiện lỗi: cha và con

đều đỏ, vỡ vậy cần phải cú cỏc thao tỏc nhưsau: (hỡnh 3.7)

Trong trường hợp này, ta cú thể ỏp dụng ba bước để phục hồi tớnh đỏ-đen và làm cho cõn bằng cõỵ Sau đõy là cỏc bước ấy:

1. Đổi màu node G - node ụng bà của node X (trong thớ dụ này là node 25).

2. Đổi màu node P - node cha của node X (node 12)

3. Quay với node G (25) ở vị trớ đỉnh, theo hướng làm nõng node X lờn (6).Đõy là một phộp quay phảị

Khi ta hoàn tất ba buớc trờn sẽ bảo toàn cõyđỏ đen. Xem hỡnh 3.7b. Trong thớ dụ này, node X là node chỏu ngoại của một node con trỏị

Cú một trường hợp đối xứng khi node X là node chỏu ngoài nhưng của một node con phảị Thử làmđiều này bằng cỏch tạo nờn cõy 50, 25, 75, 87, 93 (với phộp lật màu khi cần). Chỉnh sửa cõy bằng cỏch đổi màu node 75 và 87, và quay trỏi với node 75 là node đỉnh. Một

lần nữa cõy lại được cõn bằng. P G P G P X G P X (iii) (ii) (i)

Hỡnh 3.7Node Pđỏ và X là node chỏu ngoại iii) Khả năng 3: Pđỏ và X là chỏu nội của G

Nếu node P đỏ và X là node chỏu nội, chỳng ta cần thực hiện hai

phộp quay và một vài phộpđổi màụ Cõyđỏ đen được tạo thành từ

cỏc node 50, 25, 75, 12 và 18. (cần phải lật màu trước khi chốn node 12), xem hỡnh 3.8ạ Lưu ý là node 18 là node chỏu nộị Node này và

node chađều đỏ (cha và conđều đỏ). Hỡnh 3.8Khả năng 3: Pđỏ và X là node chỏu nội 50 25 75 12 6 P G ẹoồi maứu ẹoồi maứu Xoay 50 75 12 6 25 b. 50 6 75 0 25 5 12 18 P Đổi màu Đổi màu Xoay G X 50 75 25 18 12 Xoay b) c) 50 75 18 12 25 a)

Chỉnh lại sự sắp xếp này cũng khỏ rắc rối hơn. Nếu ta cố quay phải

node ụng bà G (25) ở đỉnh, như ta đó làm trong khả năng 2, node chỏu trong X (18)đi ngang hơn làđi lờn, nhưthế cõy sẽ khụng cũn cõn bằng nhưtrước. (Thử làmđiều này, rồi quay trở lại, với node 12 ở đỉnh, để phục hồi cõy nhưcũ). Phải cần một giải phỏp khỏc.

Thủ thuật cần dựng khi X là node chỏu nội là tiến hành hai phộp quay hơn là một phộp. Phộp quay đầu biến X từ một node chỏu nội

thành node chỏu ngoại, nhưtrong hỡnh 3.8b. Bõy giờ, trường hợp là tương tự nhưkhả năng 1, và ta cú thể ỏp dụng cựng một phộp quay,

với node ụng bà ở đỉnh, như đó làm trước đõỵ Kết quả như trong hỡnh 3.8c.

Chỳng ta cũng cần tụ màu lại cỏc nỳt. Ta làmđiều này trước khi làm bất cứ phộp quay nào (thứ tự khụng quan trọng, nhưng nếu ta đợi đến khi sau khi quay mới tụ màu lại node thỡ khú mà biết phải gọi

chỳng nhưthế nào). Cỏc bước là:

1. Đổi màu node ụng bà của node X ( node 25).

2. Đổi màu node X (khụng phải màu của node cha; node X đõy là node 18).

3. Quay với node P - node cha của X -ở đỉnh (khụng phải với

node ụng bà; node chađõy là 12).

4. Quay lần nữa với node ụng bà của X (25) ở đỉnh, về hướng

nõng X lờn (quay phải).

5. LOẠI BỎ NODE

Trong cõy BST chỳng ta thấy rằng phộp loại bỏ phức tạp hơn so với

phộp thờm vàọ Trong cõyđỏ đen phộp loại bỏ càng phức tạp hơn rất

nhiều so với phộp thờm vào vỡ yờu cầu đảm bảo quy tắc đỏ đen. Chỳng ta cú thể tham khảo trong phần càiđặt.

Một phần của tài liệu giáo trình cấu trúc dữ liệu 2 (Trang 63 - 68)

Tải bản đầy đủ (PDF)

(121 trang)