51
Cây đỏ den – lý thuyết và mô phỏng MỤC LỤC PHẦN MỞ ĐẦU I. LÝ DO CHỌN ĐỀ TÀI.......................................................................... 2 II. MỤC ĐÍCH CỦA ĐỀ TÀI..................................................................... 3 III. NHIỆM VỤ NGHIÊN CỨU.................................................................. 3 IV. PHƯƠNG PHÁP NGHIÊN CỨU.......................................................... 3 V. BỐ CỤC BÀI BÁO CÁO....................................................................... 4 PHẦN NỘI DUNG CHƯƠNG 1: TỔNG QUAN VỀ CẤU TRÚC CÂY............................................. 5 1.1 ĐỊNH NGHĨA VÀ CÁC KHÁI NIỆM..............................5 1.2 CÂY NHỊ PHÂN.............................................9 CHƯƠNG 2: CÂY NHỊ PHÂN TÌM KIẾM.................................................... 13 2.1 ĐỊNH NGHĨA CÂY NHỊ PHÂN TÌM KIẾM........................13 2.2 GIẢI THUẬT TÌM KIẾM.....................................13 2.3 PHÂN TÍCH ĐÁNH GIÁ......................................16 2.4 THAO TÁC XOÁ TRÊN CÂY NHỊ PHÂN TÌM KIẾM.................18 CHƯƠNG 3: CÂY ĐỎ ĐEN......................................................................... 21 3.1 ĐỊNH NGHĨA..............................................21 3.2 CÁC TÍNH CHẤT...........................................23 3.3 THUẬN LỢI KHI SỬ DỤNG...................................24 3.4 CÁC PHÉP TOÁN TRÊN CÂY ĐỎ ĐEN...........................26 3.4.1............................................. PHÉP CHÈN 26 3.4.2.............................................. PHÉP XOÁ 29 3.4.3.............................................. TÌM KIẾM 33 PHẦN KẾT LUẬN TÀI LIỆU THAM KHẢO Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN 1

Cây đỏ đen

Embed Size (px)

Citation preview

Page 1: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

MỤC LỤCPHẦN MỞ ĐẦU

I. LÝ DO CHỌN ĐỀ TÀI..................................................................................2II. MỤC ĐÍCH CỦA ĐỀ TÀI.............................................................................3III. NHIỆM VỤ NGHIÊN CỨU..........................................................................3IV. PHƯƠNG PHÁP NGHIÊN CỨU.................................................................3V. BỐ CỤC BÀI BÁO CÁO................................................................................4PHẦN NỘI DUNGCHƯƠNG 1: TỔNG QUAN VỀ CẤU TRÚC CÂY.................................................51.1 ĐỊNH NGHĨA VÀ CÁC KHÁI NIỆM...........................................................................5

1.2 CÂY NHỊ PHÂN.............................................................................................................9

CHƯƠNG 2: CÂY NHỊ PHÂN TÌM KIẾM..........................................................132.1 ĐỊNH NGHĨA CÂY NHỊ PHÂN TÌM KIẾM..............................................................13

2.2 GIẢI THUẬT TÌM KIẾM.............................................................................................13

2.3 PHÂN TÍCH ĐÁNH GIÁ.............................................................................................16

2.4 THAO TÁC XOÁ TRÊN CÂY NHỊ PHÂN TÌM KIẾM.............................................18

CHƯƠNG 3: CÂY ĐỎ ĐEN..................................................................................213.1 ĐỊNH NGHĨA...............................................................................................................21

3.2 CÁC TÍNH CHẤT.........................................................................................................23

3.3 THUẬN LỢI KHI SỬ DỤNG.......................................................................................24

3.4 CÁC PHÉP TOÁN TRÊN CÂY ĐỎ ĐEN...................................................................26

3.4.1 PHÉP CHÈN..........................................................................................................26

3.4.2 PHÉP XOÁ............................................................................................................29

3.4.3 TÌM KIẾM.............................................................................................................33

PHẦN KẾT LUẬN

TÀI LIỆU THAM KHẢO

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN 1

Page 2: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

PHẦN MỞ ĐẦU

I. LÝ DO CHỌN ĐỀ TÀI

Trong khoa học máy tính, cấu trúc dữ liệu là một cách lưu dữ liệu trong máy

tính sao cho nó có thể được sử dụng một cách hiệu quả. Thông thường, một cấu

trúc dữ liệu được chọn cẩn thận sẽ cho phép thực hiện thuật toán hiệu quả hơn.

Việc chọn cấu trúc dữ liệu thường bắt đầu từ việc chọn một cấu trúc dữ liệu trừu

tượng. Một cấu trúc dữ liệu được thiết kế tốt cho phép thực hịên nhiều phép toán,

sử dụng càng ít tài nguyên, thời gian sử lý và không gian bộ nhớ tốt.

Chúng ta đều biết tìm kiếm (Searching) là một đòi hỏi rất thường xuyên trong

đời sống hàng ngày cũng như trong xử lý Tin học. Vấn đề tìm kiếm xét một cách

tổng quát, có thể hiểu là tìm một đối tượng thoả mãn một số đòi hỏi nào đó, trong

một tập rộng lớn các đối tượng. Khi không liên quan đến mục đích xử lý cụ thể nào

khác, bài toán tìm kiếm có thể được phát biểu độc lập và tổng quát như sau:

“Cho một bảng gồm n bản ghi R1, R2, ... , Rn . Mỗi bản ghi Ri (1 ≤ i ≤ n) tương

ứng với một khoá ki . Hãy tìm bản ghi có giá trị khoá tương ứng bằng X cho

trước”.

X được gọi là khoá tìm kiếm. Công việc tìm kiếm sẽ hoàn thành khi có một

trong hai tình huống sau đây sảy ra

1) Tìm được bản ghi có giá trị khoá tương ứng bằng X, lúc đó ta nói phép tìm

kiếm được thoả (successfull)

2) Không tìm thấy được bản ghi nào có giá trị khoá bằng X. Phép tìm kiếm

không thoả (unsuccessfull). Sau một phép tìm kiếm không thoả có khi xuất hiện

yêu cầu bổ xung thêm bản ghi mới có khoá bằng X vào bảng. Giải thuật thể hiện cả

yêu cầu này được gọi là giải thuật “tìm kiếm có bổ xung”.

Có nhiều phương pháp tìm kiếm cơ bản và phổ dụng, đối với dữ liệu ở bộ nhớ

trong nghĩa là tìm kiếm trong, đối với dữ liệu ở bộ nhớ ngoài là tìm kiếm ngoài.

Đối với tìm kiếm trong, tìm kiếm nhị phân là một phương pháp khá thông dụng,

chi phí ít, đạt kết quả tốt. Tuy nhiên khi sử dụng tìmkiếm nhị phân dãy khoá đã

phải được sắp xếp rồi, nghĩa là thời gian chi phí cho sắp xếp cũng phải kể đến. Nếu

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN 2

Page 3: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

dãy khoá luôn biến động thì lúc đó chi phí cho sắp xếp lại nổi lên rất rõ và chính

điều ấy bộ lộ nhược điểm của phương pháp này.

Để khắc phục nhược điểm vừa nêu trên đối với tìm kiếm nhị phân và đáp ứng

yêu cầu tìm kiếm đối với bảng biến động, một phương pháp mới được hình thành

dựa trên cơ sở bảng được tổ chức dưới dạng cây nhị phân mà ta gọi là cây nhị phân

tìm kiếm.

Trong đó cây đỏ đen là một trong những cấu trúc dữ liệu hay, cùng với cây

nhị phân tìm kiếm là những cấu trúc dữ liệu có điểm mạnh trong việc lưu trữ và

tìm kiếm dữ liệu. Song cây đỏ đen có những đặc tính riêng mà nhờ đó nó đã làm

nổi bật những điểm mạnh của mình.

Trên cơ sở đó và với sự định hướng của thầy giáo hướng dẫn Th.S Nguyễn

Hữu Dung em đã chọn đề tài “Cây đỏ đen – lý thuyết và mô phỏng ”

II. MỤC ĐÍCH CỦA ĐỀ TÀI

Đề tài nhằm nghiên cứu lý thuyết về cây đỏ đen, một dạng cây tìm kiếm nhị

phân tự cân bằng để thấy được những điểm mạng của kiểu cấu trúc dữ liệu này.

Trên cơ sở thực hiện mô phỏng các phép toán chèn, xoá, tìm kiếm trên cây đỏ đen,

đề tài nhằm khẳng định những tính chất, và việc sử dụng cấu trúc dữ liệu cây đỏ

đen vào việc lưu trữ dữ liệu và thực hịên tìm kiếm trong bài toán tìm kiếm là một

việc nên làm

III. NHIỆM VỤ NGHIÊN CỨU

Nghiên cứu và làm rõ những khái niệm, tính chất về cấu trúc dữ liệu

cây, cây nhị phân, cây nhị phân tìm kiếm. Trên cơ sở đó xây dựng cấu

trúc cây đỏ đen.

Nghiên cứu các phép toán chèn, xoá , tìm kiếm trên cấu trúc dữ liệu cây

đỏ đen; đánh giá chúng so với cây nhị phân tìm kiếm

Thực hiện mô phỏng các phép toán trên cây đỏ đen

IV. PHƯƠNG PHÁP NGHIÊN CỨU

Phương pháp nghiên cứu chủ yếu là tham khảo các tài liệu, bài viết, sách giáo

trình liên quan tới cấu trúc cây, cây nhị phân tìm kiếm, cây đỏ đen.

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN 3

Page 4: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

Tìm tài liệu trên mạng Internet

Nghiên cứu lý thuyết về lập trình hướng đối tượng của ngôn ngữ lập trình

Vissual foxpro, để xây dựng các bước mô phỏng các thuật toán trên cây đỏ đen.

V. BỐ CỤC BÀI BÁO CÁO

Báo cáo được chia thành 3 chương:

Chương 1: Tổng quan về cấu trúc cây

Chương này giới thiệu tổng quan về cấu trúc cây, khái niệm và các

tính chất của cây, cây nhị phân;

Chương 2: Cây nhị phân tìm kiếm

Chương này trình bày về cây nhị phân tìm kiếm bao gồm: định nghĩa,

các giải thuật tìm kiếm, các thao tác chèn và xoá trên cây nhị phân tìm kiếm, đánh

giá về thời gian, độ phức tạp của các thao tác này

Chương 3: Cây đỏ đen

Chương này trình bày khái niệm, tính chất cây đỏ đen, các phép toán

chèn, xoá, tìm kiếm trên cây đỏ đen, đánh giá về thời gian , độ phức tạp của các

phép toán này; những thuận lợi khi sử dụng cấu trúc cây đỏ đen.

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN 4

Page 5: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

PHẦN NỘI DUNG

CHƯƠNG 1: TỔNG QUAN VỀ CẤU TRÚC CÂY

1.1 ĐỊNH NGHĨA VÀ CÁC KHÁI NIỆM

Cây là một cấu trúc phi tuyến tính. Một cây (tree) là một tập hữu hạn các nút

trong đó có một nút đặc biệt gọi là nút gốc (root), giữa các nút có một mối quan hệ

phân cấp gọi là quan hệ “cha - con”.

Có thể định nghĩa cây một cách đệ quy như sau:

1. Một nút là một cây. Nút đó cũng là gốc của cây ấy.

2. Nếu T1, T2, ..., Tn là các cây, với n1, n2, ... nk lần lượt là các gốc, n là một

nút và n có quan hệ cha - con với n1, n2, ... nk thì lúc đó một cây mới T sẽ được tạo

lập, với n là gốc của nó. n được gọi là cha của n1, n2, ... nk ; ngược lại n1, n2, ... nk 

được gọi là con của n. Các cây T1, T2, ..., Tn được gọi là các cây con (substrees) của

n.

Ta quy ước : Một cây không có nút nào được gọi là cây rỗng (null tree).

Có nhiều đối tượng có cấu trúc cây.

Ví dụ :

Mục lục của một cuốn sách, hoặc một chương trong sách, có cấu trúc

cây.

Cấu trúc thư mục trên đĩa cũng có cấu trúc cây, thư mục gốc có thể coi

là gốc của cây đó với các cây con là các thư mục con và tệp nằm trên

thư mục gốc.

Gia phả của một họ tộc cũng có cấu trúc cây.

Một biểu thức số học gồm các phép toán cộng, trừ, nhân, chia cũng có

thể lưu trữ trong một cây mà các toán hạng được lưu trữ ở các nút lá,

các toán tử được lưu trữ ở các nút nhánh, mỗi nhánh là một biểu thức

con.

Chẳng hạn chương 1 trong PHẦN NỘI DUNG của bài báo cáo này :

CHƯƠNG 1: TỔNG QUAN VỀ CẤU TRÚC CÂY1.1 ĐỊNH NGHĨA VÀ CÁC KHÁI NIỆM

1.2 CÂY NHỊ PHÂN1.2.1 ĐỊNH NGHĨA VÀ TÍNH CHẤT

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN 5

Page 6: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

1.2.2 BIỂU DIỄN CÂY NHỊ PHÂN1.2.3 PHÉP DUYỆT CÂY NHỊ PHÂN

1.3 ÁP DỤNG 1.3.1 CÂY BIỂU DIỄN BIỂU THỨC1.3.2 CÂY BIỂU DIỄN CÁC TẬP1.3.3 CÂY QUYẾT ĐỊNH

Ta có thể biểu diễn bằng một cây có dạng như sau:

Hình 1.1

Biểu thức số học x + y * (z – t) + u/v, ta có thể biểu diễn dưới dạng cây như

hình 1.2

Hình 1.2

Các tập bao nhau như hình 1.3 có thể biểu diễn bởi cây như hình 1.4

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN

1

1.1 1.2

1.3.3

1.3

1.3.2

1.3.1

1.2.3

1.2.1

1.2.2

+

/+

vux *

y -

z t

6

Page 7: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

Hình 1.3

Hình 1.4

Đối với cây, chẳng hạn xét cây ở hình 1.4

o Nút A được gọi là gốc của cây

o B, C, D là gốc của các cây con gốc của A

o A là cha của B, C, D còn B, C, D là con của A.

Số các con của một nút gọi là cấp (degree) của nút đó. Ví dụ nút A có 3

con là B, C, D nên cấp của A là 3, cấp của H là 2.

Nút có cấp bằng 0 gọi là lá (leaf) hay nút tận cùng (termimal node). Ví

dụ các nút E, C, K, I , v.v. Nút không là lá được gọi là nút nhánh

(branch node).

Cấp cao nhất của nút trên cây gọi là cấp của cây đó. Cây ở hình 1.4 là

cây cấp 3.

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN

A D B

C

H G

I

E FJ K

A

B C D

E F G H I

J K

7

Page 8: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

Gốc của cây có số mức (level) là 1. Nếu nút cha có số mức là i thì nút con

có só mức là i + 1 . Ví dụ nút A có số mức là 1.

o Các nút B, C, D cùng có số mức là 2

o Các nút E, F, I, H, G có số mức là 3

o Các nút K, J có số mức là 4

Chiều cao (heigh) hay chiều xâu (depth) của một cây là số mức lớn nhất

của nút có trên cây đó.

o Cây ở hình 1.2 có chiều cao là 5

o Cây ở hình 1.4 có chiều cao là 4

Nếu n1, n2 , … , nk là dãy các nút mà ni là cha của ni+1 với 1 ≤ i < k, thì dãy

đó gọi là đường đi (path) từ n1 đến nk. Độ dài của đường đi (path length) từ nút nk

đến nq là số nút phải đi qua để đi từ nk đến nq (bằng chiều cao của nq - chiều cao

của nk). Ví dụ trên cây hình 1.4 độ dài đường đi từ A đến G là 2, từ A tới K là 3.

Nếu thứ tự các cây con của một nút được coi trọng thì cây đang xét là cây

thứ tự (ordered tree), ngược lại là cây không có thứ tự (unordered tree). Thường

thứ tự các cây con của một nút được đặt từ trái sang phải.

Hình 1.5 cho ta hai “cây có thứ tự” khác nhau :

Hình 1.5

Đối với cây, từ quan hệ cha con người ta có thể mở rộng thêm các quan hệ

khác phỏng theo các quan hệ như trong gia tộc.

Nếu một tập hữu hạn các cây phân biệt thì ta gọi đó là rừng (forest).

Khái niệm về rừng ở đây phải hiểu theo cách riêng vì: có một cây, nếu ta bỏ

nút gốc đi ta sẽ có 1 rừng! Như ở hình 1.4 nếu bỏ nút gốc A đi, ta sẽ có một rừng

gồm 3 cây.

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN

A

B C

A

C B

8

Page 9: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

Ví dụ: Cây ở hình 1.2 : degree = 2;

level = 5;

root: +

1.2 CÂY NHỊ PHÂN

Cây nhị phân là một dạng quan trọng của cấu trúc cây. Cây nhị phân có các

đặc điểm là: Mọi nút trên cây chỉ có tối đa là 2 con. Đối với cây con của một nút

người ta cũng phân biệt cây con trái (left subtree) và cây con phải (right subtree).

Như vậy cây nhị phân là cây có thứ tự.

Ví dụ : Cây ở hình 1.2 là cây nhị phân với toán tử ứng với gốc, toán hạng 1

ứng với cây con trái, toán hạng 2 ứng với cây con phải. Các cây nhị phân sau đây

là khác nhau, xong chúng đều là cây nhị phân không có thứ tự (hình 1.6).

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN

A

B

C D

E

A

B

C D

E

A

B

C D

E

A

B

C D

E

A

B

C D

E

9

Page 10: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

Hình 1.6

Một số dạng đặc biệt của cây nhị phân (hình 1.7)

a) b) c) d)

e) f)

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN

A

B

C

D

E

A

B

C

D

E

A

B

C

D

E

A

B

C

D

E

A

B C

D E F G

H

I J

A

B C

D E F G

10

Page 11: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

g)

Hình 1.7

Các cây a) b) c) d) được gọi là cây nhị phân suy biến (degenerate binary

tree) vì thực chất nó có dạng của một danh sách tuyến tính.

o Cây a) được gọi là cây lệnh trái

o Cây b) được gọi là cây lệnh phải

o Cây c) và cây d) được gọi là cây zic - zắc

Cây e) được gọi là cây nhị phân hoàn chỉnh (complete binary tree). Ta

nhận thấy : các nút ứng với các mức trừ mức cuối cùng đều đạt tối đa và ở

mức cuối cùng các nút đều dạt về phía trái.

Cây f) có các nút tối đa ở cả mọi mức nên còn gọi là cây nhị phân đầy đủ

(full binary tree). Cây nhị phân đầy đủ là một trường hợp đặc biệt của cây

nhị phân hoàn chỉnh.

Cây g) gọi là cây gần đầy, khác với cây e) ở chỗ các nút ở mức cuối

không dạt về phía trái.

Cây nhị phân có một số tính chất sau:

1) Trong các cây nhị phân cùng có số lượng nút như nhau thì cây nhị phân suy

biến có chiều cao lớn nhất, cây nhị phân hoàn chỉnh hoặc cây nhị phân gần đầy có

chiều cao nhỏ nhất, loại cây này cũng là cây có dạng “cân đối” nhất.

2) Số lượng tối đa các nút ở mức i trên một cây nhị phân là 2 i – 1 , tối thiểu là

1 (i 1).

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN

A

B C

D E F G

H

IJ

11

Page 12: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

3) Số lượng tối đa các nút trên một cây nhị phân có chiều cao là 2 h - 1, tối

thiểu là h (h ≥ 1).

4) Cây nhị phân hoàn chỉnh, không đầy đủ, có n nút thì chiều cao của nó là:

h = [log2(n + 1)] + 1

5) Cây nhị phân đầy đủ, có n nút, thì chiều cao của nó là: h = log2(n + 1).

Chứng minh

2) Chứng minh bằng quy nạp: ta biết:

Ở mức 1: i = 1 , cây nhị phân có tối đa 1 = 20 nút.

Ở mức 2: i = 2 , cây nhị phân có tối đa 2 = 21 nút.

Giả sử kết quả đúng với mức i – 1 , nghĩa là ở mức này cây nhị phân có tối

đa là 2i-2 nút. Mỗi nút ở mức i – 1 sẽ có tối đa hai con, do đó 2 i-2 nút ở mức i – 1 sẽ

cho:

2i-2 x 2 = 2i-1 nút tối đa ở mức i.

Tính chất 2) được chứng minh.

3) Ta biết rằng chiều cao của cây là số mức lớn nhất có trên cây.

Theo 2) ta suy ra số nút tối đa có trên cây nhị phân với chiều cao h là:

20 + 21 + 22 + … + 2h-1 = 2h -1

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN 12

Page 13: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

CHƯƠNG 2: CÂY NHỊ PHÂN TÌM KIẾM

ĐỊNH NGHĨA CÂY NHỊ PHÂN TÌM KIẾM

Cây nhị phân tìm kiếm ứng với n khoá k1, k2, … , kn là một cây nhị phân mà

mỗi nút của nó đều được gán một giá trị khoá nào đó trong các giá trị khóa đã cho

và đối với mọi nút trên cây tính chất sau đây luôn được thoả mãn:

– Mọi khóa thuộc cây con trái nút đó đều nhỏ hơn khoá ứng với nút đó.

– Mọi khóa thuộc cây con phải nút đó đều lớn hơn khoá ứng với nút đó.

Ở đây thứ tự chọn, ta quy ước là thứ tự tăng dần đối với số và thứ tự từ điển

đối với chữ.

Sau đây là ví dụ về cây nhị phân tìm kiếm đối với khoá là số và chữ.

Hình 2.1

GIẢI THUẬT TÌM KIẾM

Đối với một cây nhị phân tìm kiếm để tìm xem một khoá X nào đó có trên cây

đó không ta có thể thực hiện như sau:

So sánh X với khoá ở gốc và 1 trong 4 tình huống sau đây sẽ xuất hiện:

1) Không có gốc (cây rỗng) : X không có trên cây; phép tìm kiếm không thoả.

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN

34

17 66

25 50 71

68 94

if

for while

repeat

loop

13

Page 14: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

2) X trùng với khoá gốc: phép tìm kiếm được thoả

3) X nhỏ hơn khoá ở gốc: tìm kiếm thực hiện tiếp tục bằng cách xét cây con

trái của gốc với cách làm tương tự.

4) X lớn hơn khoá ở gốc: tìm kiếm được thực hiện tiếp tục bằng cách xét cây

con phải của gốc với cách làm tương tự.

Như với cây ở hình 2.1a, nếu X = 68 ta sẽ thực hiện;

– So sánh X với 34 : X > 34, ta chuyển sang cây con phải.

– So sánh X với 66 : X > 66, ta chuyển sang cây con phải.

– So sánh X với 71 : X < 71, ta chuyển sang cây con trái.

– So sánh X với 68 : X = 68, vậy tìm kiếm đã được thoả.

Nếu X = 30, quá trình tìm kiếm như sau:

– So sánh X với 34 : X < 34, ta chuyển sang cây con trái.

– So sánh X với 17 : X > 17, ta chuyển sang cây con phải.

– So sánh X với 25 : X < 25, ta chuyển sang cây con phải, nhưng cây

con phải rỗng, vậy phép tìm kiếm không thoả.

Nếu sau phép tìm kiếm không thoả, ta chèn luôn X vào cây nhị phân tìm kiếm

(như ví dụ vừa xét, ta chèn khóa 30 vào thành con phải của nút 25) ta thấy phép

chèn này thực hiện rất đơn giản và không làm ảnh hưởng gì tới vị trí của các khoá

hiện có trên cây, tính chất của cây nhị phân tìm kiếm vẫn được đảm bảo.Nếu giả sử quy cách mỗi nút của cây nhị phân tìm kiếm có dạng:

LPTRKEY

RPTRINFO

Ở đây trường hợp LPTR và RPTR chứa các con trỏ trỏ tới gốc cây con trái và

cây con phải của nút.

Trường KEY ghi nhận giá trị khoá tương ứng của nút, trường INFO ghi nhận

các thông tin khác, không có vai trò trong tìm kiếm.

Giải thuật tìm kiếm có thao tác chèn trên cây tìm kiếm nhị phân sẽ như sau:

Procedure BST (T, X, q);

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN 14

Page 15: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

{Thủ tục này thực hiện tìm kiếm trên cây nhị phân tìm kiếm, có gốc được trỏ

bởi T, nút có khóa bằng X. Nếu tìm kiếm thành công thì đưa ra con trỏ q trỏ tới nút

đó, nếu tìm kiếm không thành công thì thực hiện chèn nút mới có khoá là X vào T

và đưa ra con trỏ q trỏ tới nút mới đó kèm theo thông báo}.

1. {Khởi tạo con trỏ}

p := null; q := T;

2. {Tìm kiếm}

While q null do

case

X < KEY (q) : p := q ; q := LPTR (q);

X = KEY ()

end case ;

3. {Chèn}

call new (q);

KEY (q) := X;

LPTR (q) := RPTR (q) := null;

case

T = null : T := q; {cây rỗng, đã bổ xung}

X < KEY (p) : LPTR (p) := q;

else: RPTR (p) := q

end case

write (‘không tìm thấy, đã bổ xung’);

return

Với giải thuật trên có thể suy ra : ta có thể dựng được cây nhị phân tìm kiếm

ứng với một dãy khoá đưa vào bằng cách liên tục bổ xung các nút ứng với từng

khoá, bắt đầu từ một cây rỗng. Tất nhiên thoạt đầu phải dựng lên nút gốc cây ứng

với khoá đầu tiên (trường hợp tìm kiếm trên cây rỗng) sau đó đối với các khoá tiếp

theo, tìm trên cây không thấy thì chèn vào. Ví dụ, với dãy khóa như sau:

42 23 74 11 65 58 94 36 99 87

Cây nhị phân tìm kiếm dựng được sẽ có dạng như hình 2.2

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN 15

Page 16: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

Hình 2.2

PHÂN TÍCH ĐÁNH GIÁ

Rõ ràng, với giải thuật BST nêu trên, ta thấy dạng cây nhị phân tìm kiếm dựng

được hoàn toàn phụ thuộc vào dãy khoá đưa vào. Như vậy có nghĩa là, trong quá

trình xử lý động ta không thể biết trước được cây sẽ phát triển ra sao, hình dạng

của nó sẽ thế nào. Rất có thể đó là một cây nhị phân hoàn chỉnh hoặc cây nhị phân

gần đấy (mà ta sẽ gọi là cây cân đối) chiều cao của nó là log2(n + 1), nên chi phí

tìm kiếm có cấp độ lớn chỉ là O(log2n) : một trường hợp rất thuận lợi mà ta luôn

mong đợi. Nhưng cũng có thể đó là một cây nhị phân suy biến (chẳng hạn dãy

khoá đưa vào vốn đã có thứ tự sắp xếp rồi!), không khác gì một danh sách tuyến

tính mà tìm kiếm trên cây đó chính là tìm kiếm tuần tự với chi phí có cấp O(n).

Điều này cũng dễ đưa ta tới một khuynh hướng lo ngại khiến ta thiếu tin tưởng vào

phương pháp tìm kiếm này.

Thực ra, người ta cũng đã chứng minh được số lượng trung bình các phép so

sánh trong tìm kiếm trên cây nhị phân tìm kiếm chỉ là:

Ctb = 1,386 log2n

Như vậy cấp độ lớn của thời gian thực hiện trung bình giải thuật BST cũng chỉ

là O(log2n) còn nếu xét chi tiết ra thì chi phí tìm kiếm trung bình ở đây chỉ lớn hơn

khoảng 39% so với chi phí tìm kiếm trên cây cân bằng.

Tới đây cũng có thể xuất hiện thêm câu hỏi là: tại sao không tìm cách dựng

lên một cây nhị phân tìm kiếm luôn cân bằng để có thể đạt được chi phí tối thiểu?

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN

42

23 74

36 65 94

87 99

11

58

16

Page 17: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

Ta có thể tìm thấy câu trả lời qua việc xét ví dụ đơn giản sau. Giả sử ta có cây nhị

phân tìm kiếm cân bằng ở hình 2.3

Hình 2.3

Nếu xuất hiện khoá X = 7 thì sao ?

Ta thấy phép tìm kiếm với X như trên sẽ không được thoả và ta phải chèn

thêm nút có khóa bằng 7 vào cây trên (hình 2.4). Ta thấy cây sẽ không còn cân đối

nữa. Lẽ tất nhiên khi đó ta phải “tái cân bằng” lại để có được cây cân bằng như

hình 2.5

Hình 2.4 Hình 2.5

Nhìn vào hình vẽ, ta thấy hầu như không còn một nút nào mà mối nối được

giữ nguyên như cũ. Như vậy, việc tái cân bằng đã đòi hỏi phải sửa lại khá nhiều

mối nối, nghĩa là sẽ tốn khá nhiều thời gian! Do đó khi phép chèn thường xuyên

được thực hiện thì cách làm đó sẽ trở nên không thực tế nữa. Chính điều ấy sẽ dẫn

tới câu trả lời cho câu hỏi đặt ra.

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN

3

1 5

2 4 6

3

1 5

2 4 6

7

4

3 6

2 5 71

17

Page 18: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

THAO TÁC XOÁ TRÊN CÂY NHỊ PHÂN TÌM KIẾM

Khi có một nút ứng với một khoá nào đó (được chỉ định) bị xoá khỏi cây nhị

phân tìm kiếm thì vấn đề gì sẽ xảy ra?

Việc xử lý sẽ không còn đơn giản như khi chèn nữ vì để đảm bảo được phần

cây còn lại vẫn là một cây nhị phân tìm kiếm ta sẽ phải “sửa” lại cây, nghĩa là tìm

“nút thay thế nó” để nhận các con trỏ mà trước đây trỏ tới nó và chữa các con trỏ

cần thiết khác.

Nếu nút bị loại bỏ là nút lá, ta không cần tìm nút thay thế nữa. Mối nối cũ trỏ

tới nó (từ nút cha nó) sẽ được thay bởi mối nối không.

Nếu nút bị loại bỏ là nút “nửa lá”, nghĩa là nó chỉ có cây con trái hoặc cây con

phải thì nút thay thế nó chính là nút gốc cây con trái hoặc cây con phải đó. Mối nối

cũ trỏ tới nó nay sẽ trỏ tới nút thay thế này.

Trường hợp tổng quát: khi nút bị loại bỏ có cả cây con trái lẫn cây con phải,

thì nút thay thế nó hoặc là nút ứng với khoá nhỏ hơn ngay sát trước nó (nút cực

phải của cây con trái nó) hoặc là nút ứng với khoá lớn hơn ngay sát sau nó (nút cực

trái của cây con phải nó). Như vậy sẽ phải thay đổi một số mối nối, cùng lắm thì

cũng chỉ ở các nút:

– Nút cha của nút bị loại bỏ;

– Nút được chọn làm nút “thay thế”;

– Nút cha của nút được chọn làm nút thay thế.

Hình 2.6 minh hoạ các trường hợp trên.

Ở đây, trong trường hợp tổng quát nút thay thế được chọn là nút cực phải của

cây con trái.

chỉ nút bị loại bỏ

chỉ cây con

Trước Sau

1) Trường hợp nút lá

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN 18

Page 19: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

2) Trường hợp nút nửa lá

3) Trường hợp tổng quát

Hình 2.6

Sau đây là giải thuật thực hiện loại bỏ một nút trỏ bởi Q. Thoạt đầu Q chính là

nối trái hoặc nối phải của một nút R trên cây nhị phân tìm kiếm, mà ta giả sử đã

biết rồiTrần Thị Thu Bình _A/K54_SPTin_ĐHSPHN

A

B

A

B

A

B

C

A

BC

A

CB

D

E

F

A

CB

D

F

E

19

Page 20: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

Procedure BSTDEL (Q)

{Trong thủ tục này ta phải hiểu Q là đại diện cho LPTR(R) hoặc RPTR(R).

Giả sử nó chính là LPTR(R) thì câu lệnh Q := RPTR(P) tương đương với

LPTR(R) := RPTR(R) }

1. {Xử lý trường hợp lá và nửa lá}

P := Q;

If LPTR(P) = null then

begin

Q := RPTR(P);

call dispose(P);

end;

If RPTR(P) = null then

begin

Q := LPTR(P);

call dispose(P);

end;

2. {Xử lý trường hợp tổng quát}

T := LPTR(P);

If RPTR(T) = null then

begin

RPTR(T) := RPTR(P);

call dispose(P);

end;

S := RPTR(T); {tìm nút thay thế là nút cực phải của cây con trái}

While RPTR(S) ≠ null do

begin

T := S;

S := RPTR(T)

end;

RPTR(S) := RPTR(P);

RPTR(T) := LPTR(S);

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN 20

Page 21: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

LPTR(S) := LPTR(P);

Q := S;

call dispose(P);

3. return

Qua giải thuật trên ta thấy khi loại bỏ một nút ra khỏi cây nhị phân tìm kiếm,

việc sửa lại cây đòi hỏi tối đa phải sửa bốn mối nối trên ba nút. Như vậy chi phí về

sửa đổi này cũng không đáng kể. Nếu cho biết giá trị khoá của nút cần loại bỏ trên

cây nhị phân tìm kiếm thì trước hết phải tìm ra nút cần loại rồi mới thực hiện loại

bỏ và tương tự như khi tìm kiếm rồi bổ xung, phép tìm kiếm rồi loại bỏ cũng chi

phí trung bình về thời gian ở cấp O(log2n).

CHƯƠNG 3: CÂY ĐỎ ĐEN

3.1 ĐỊNH NGHĨA

Cây đỏ đen (red – black tree) là một dạng cây tìm kiếm nhị phân tự cân bằng,

một cấu trúc dữ liệu được sử dụng trong khoa học máy tính. Cấu trúc ban đầu của

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN 21

Page 22: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

nó được đưa ra vào năm 1972 bởi Rudolf Bayer trong quyển “Symmetric Binary

B-Trees: Data Structure and maintenance Algorithms”, nhà xuất bản Acta

Informatica, Tập1, trang 290-306. Sau đó Leonidas J.Guibas và Robert Sedgewick

đã thêm các đặc tính của cây đỏ đen và đặt tên cho nó ( Tham khảo: Guibas, L. and

Sedgewick R. “ A dichromatic Framwork for Balanced Trees”, in Proc. 19 th IEEE

Symp. Foundations of Computer Science, trang 8-21, năm 1978). Nó có cấu trúc

phức tạp nhưng cho kết quả tốt về thời gian trong trường hợp xấu nhất. Các phép

toán trên chúng như tìm kiếm (serch), chèn (insert), và xoá (delete) trong thời gian

O(logn), trong đó n là số các phần tử của cây.

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.1 : Ví dụ về một 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

đi từ gốc đến lá phải có cùng chiều cao đen.

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN

11

2 14

71 15

85

22

Page 23: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

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.2 CÁC TÍNH CHẤT

Mỗi nút của cây đỏ-đen có thuộc tinh "màu" nhận một trong hai giá trị "đỏ"

hoặc "đen". Ngoài ra:

1. Một nút hoặc là đỏ hoặc đen.

2. Gốc là đen.

3. Tất cả các lá là đen.

4. Cả hai con của mọi nút đỏ là đen. (và suy ra mọi nút đỏ có nút cha là

đen.)

5. Tất cả các đường đi từ một nút đã cho tới các lá chứa một số như nhau

các nút đen.

Tính chất 5 còn được gọi là tính chất "cân bằng đen". Số các nút đen trên một

đường đi từ gốc tới mỗi lá được gọi là độ dài đen của đường đi đó. Trong bài này

chỉ xét các đường đi từ gốc tới các lá nên ta sẽ gọi tắt các đường đi như vậy là

đường đi. Sức mạnh của cây đỏ đen nằm trong các tính chất trên. Từ các tính chất

này suy ra trong các đường đi từ gốc tới các lá đường đi dài nhất không vượt quá

hai lần đường đi ngắn nhất. Do đó cây đỏ đen là gần cân bằng. Vì các thuật toán

chèn, xóa, tìm kiếm trong trường hợp xấu nhất đều tỷ lệ với chiều cao của cây nên

cây đỏ đen rất hiệu quả trong các trường hợp xấu nhất, không giống như cây tìm

kiếm nhị phân thông thường.

Để thấy rõ sức mạnh này, ta chú ý rằng không có đường đi nào từ gốc tới một

lá chứa hai nút đỏ liền nhau (theo tính chất 4). Do đó trên mỗi đường số nút đỏ

không nhiều hơn số nút đen. Đường đi ngắn nhất là đường đi chỉ có nút đen, đường

đi dài nhất có thể là đường đi xen kẽ giữa các nút đỏ và đen. Theo tính chất 5, số

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN 23

Page 24: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

các nút đen trên hai đường đi đó bằng nhau, và do đó đường đi dài nhất không vượt

quá hai lần đường đi ngắn nhất.

Trong nhiều biểu diễn của dữ liệu cây, có thể có các nút chỉ có một con và có

các lá có chứa dữ liệu. Tuy nhiên có thể biểu diễn cây đỏ đen ta có một chút thay

đổi mà không làm thay đổi tính chất cơ bản của cây và độ phức tạp của các thuật

toán. Với mục đích này, ta đưa thêm các lá null vào làm con phải hoặc con trái

hoặc cả hai của những nút không có chúng, các lá này không chứa dữ liệu mà chỉ

làm nhiệm vụ thông báo rằng tại đây cây đã kết thúc, như hình vẽ ở trên. Việc

thêm các nút này làm cho tất cả các nút trong của cây đều chứa dữ liệu và có hai

con, hay khác đi cây đỏ đen cùng với các lá null là cây nhị phân đầy dủ. Khi đó số

các "lá null" nhiều hơn số các nút chứa dữ liệu của cây một lá.

Một số người định nghĩa cây đỏ đen bằng cách gán màu đỏ đen cho các cạnh

chứ không phải các nút. Tuy nhiên điều đó không tạo nên sự khác biệt. Khi ấy màu

của mỗi nút tương ứng với màu của cạnh nối nó với nút cha

3.3 THUẬN LỢI KHI SỬ DỤNG

Ta đã biết cây tìm kiếm nhị phân thông thường có những thuận lợi lớn về mặt

lưu trữ và truy xuất dữ liệu trong phép toán tìm kiếm thêm vào hay loại bỏ một

phần tử. Do đó, cây tìm kiếm nhị phân xem ra là một cấu trúc lưu trữ dữ liệu tốt.

Tuy nhiên trong một số trường hợp cây tìm kiếm nhị phân có một số hạn chế.

Nó hoạt động tốt nếu dữ liệu được chèn vào cây theo thứ tự ngẫu nhiên. Tuy nhiên,

nếu dữ liệu được chèn vào theo thứ tự đã đuợc sắp xếp sẽ không hiệu quả. Khi các

trị số cần chèn đã đuợc sắp xếp thì cây nhị phân trở nên không cân bằng. Khi cây

không cân bằng, nó mất đi khả năng tìm kiếm nhanh (hoặc chèn hoặc xóa) một

phần tử đã cho.

Chúng ta khảo sát một cách giải quyết vấn đề của cây không cân bằng: đó là

cây đỏ đen, là cây tìm kiếm nhị phân có thêm một vài đặc điểm .

Có nhiều cách tiếp cận khác để bảo đảm cho cây cân bằng: chẳng hạn cây 2-3-

4. Tuy vậy, trong phần lớn trường hợp, cây đỏ đen là cây cân bằng hiệu quả nhất, ít

ra thì khi dữ liệu được lưu trữ trong bộ nhớ chứ không phải trong những tập tin.

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN 24

Page 25: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

Trước khi khảo sát cây đỏ đen, hãy xem lại cây không cân bằng được tạo ra

như thế nào.

Hình 3.2. Các node được chèn theo thứ tự tăng dần

Những node này tự sắp xếp thành một đường không phân nhánh. Bởi vì mỗi

node lớn hơn node đã được chèn vào trước đó, mỗi node là con phải. Khi ấy, cây bị

mất cân bằng hoàn toàn. Nếu ta chèn những mục (item) theo thứ tự giảm dần, mỗi

node sẽ là con trái của node cha của chúng - cây sẽ bị mất cân bằng về phía bên

kia.

* Độ phức tạp:

Khi cây một nhánh, sẽ trở thành một danh sách liên kết, dữ liệu sẽ là một

chiều thay vì hai chiều. Trong trường hợp này, thời gian truy xuất giảm về O(N),

thay vì O(logN) đối với cây cân bằng.

Để bảo đảm thời gian truy xuất nhanh O(logN) của cây, chúng ta cần phải bảo

đảm cây luôn luôn cân bằng (ít ra cũng là cây gần cân bằng). Điều này có nghĩa là

mỗi node trên cây phải có xấp xỉ số node con bên phải bằng số node con bên trái.

Một cách tiếp cận giải quyết vấn đề cân bằng lại cây: đó là cây đỏ đen - là cây

tìm kiếm nhị phân vì thế nó có các tính chất của cây tìm kiếm nhị phân ví dụ : node

con trái nhỏ hơn node cha, node cha nhỏ hơn node con phải, bên cạnh đó cây đỏ

đen còn được bổ sung một số đặc điểm.

Trong cây đỏ đen, việc cân bằng được thực thi trong khi chèn, xóa. Khi thêm

một phần tử thì thủ tục chèn sẽ kiểm tra xem tính chất cân bằng của cây có bị vi

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN 25

Page 26: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

phạm hay không. Nếu có, sẽ xây dựng lại cấu trúc cây. Bằng cách này, cây luôn

luôn được giữ cân bằng.

3.4 CÁC PHÉP TOÁN TRÊN CÂY ĐỎ ĐEN

Có thể áp dụng ngay các phép chèn, xóa trong cây tìm kiếm nhị phân vào cây

đỏ đen mà không cần sửa chữa gì vì cây đỏ đen là trường hợp riêng của cây tìm

kiếm nhị phân. Tuy nhiên, khi đó có thể có một số tính chất trong định nghĩa của

cây đỏ đen sẽ bị vi phạm. Việc khôi phục các tính chất đỏ đen sẽ cần một số nhỏ

cỡ O(log n) hoặc trung bình chỉ O(1) các phép đổi màu (tốn rất ít thời gian) và

không quá ba phép quay cho phép xóa, hai cho phép chèn. Toàn bộ các giải thuật

chèn và xóa có độ phức tạp thời gian cỡ O(log n).

3.4.1 PHÉP CHÈN

Phép chèn bắt đầu bằng việc bổ sung một nút như trong cây nhị phân tìm

kiếm bình thường và gán cho nó màu đỏ. Ta xem xét để bảo toàn tính chất đỏ đen

từ các nút lân cận với nút mới bổ sung. Thuật ngữ nút chú bác sẽ dùng để chỉ nút

anh (hoặc em) với nút cha của nút đó như trong cây phả hệ. Chú ý rằng:

Tính chất 3 (Tất cả các lá -là các nút null là đen) giữ nguyên.

Tính chất 4 (Cả hai con của nút đỏ là đen) nếu bị thay đổi chỉ bởi việc

thêm một nút đỏ có thể sửa bằng cách gán màu đen cho một nút đỏ hoặc một phép

quay.

Tính chất 5 (Tất các các đường đi từ gốc tới các lá có cùng một số nút

đen) nếu bị thay đổi chỉ bởi việc thêm một nút đỏ có thể sửa bằng cách gán màu

đen cho một nút đỏ hoặc một phép quay.

Chú ý: Nhãn N sẽ dùng để chỉ nút đang chèn vào, P chỉ nút cha của N, U chỉ

chú bác của N, G chỉ ông của N (tức là G là cha của P và U). Khi đó, giữa các

trường hợp, vai trò và nhãn của các nút có thể thay đổi còn trong cùng một trường

hợp thì không.

Chèn nút có nhãn N vào cây, ban đầu gán màu cho nút N là màu đỏ

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN

N

26

Page 27: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

Các trường hợp xảy ra:

Trường hợp 1: Nút mới thêm N ở tại gốc. Trong trường hợp này, gán lại màu

đen cho N, để bảo toàn tính chất 2 (Gốc là đen). Vì mới chỉ bổ sung một nút, Tính

chất 5 được bảo đảm vì chỉ có 2 đường đi từ gốc tới lá và đều chỉ có một nút đen.

Hình 3.3

Trường hợp 2: Nút cha P của nút mới thêm là đen, khi đó Tính chất 4 (Cả hai

nút con của nút đỏ là đen) không bị vi phạm vì nút mới thêm có hai con là "null' là

đen. Tính chất 5 cũng không vi phạm vì nút mới thêm là đỏ không ảnh hưởng tới

số nút đen trên tất cả đường đi.

Hình 3.4

Trường hợp 3: Cả cha P và bác U đều là đỏ; Theo tính chất 4, cả 2 con của

nút đỏ đều là đen, nên ông G phải có màu đen. Ta thực hiện phép đổi màu, đổi màu

U và P thành đen, còn G thành đỏ (để bảo toàn tính chất 5). Khi đó nút mới N có

cha đen. Vì đường đi bất kỳ đi qua cha và bác của "N" phải đi qua ông của N nên

số các nút đen trên đường đi này không thay đổi. Tuy thế nút ông G có thể vi phạm

tính chất 2 (Gốc là đen) hoặc 4 (Cả hai con của nút đỏ là nút đen) (tính chất 4 bị vi

phạm khi cha của G là đỏ). Để sửa chữa trường hợp này gọi một thủ tục đệ quy

trên G từ trường hợp 1.

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN

N

P

N

P

N

27

Page 28: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

Hình 3.5

Trường hợp 4: Nút cha P là đỏ nhưng nút chú bác U là đen, nút mới N là

con phải của nút P, và P là con trái của nút G. Trong trường hợp này, thực hiện

quay trái chuyển đổi vai trò của nút mới N và nút cha P do đó định dạng lại nút P

bằng Trường hợp 5 (đổi vai trò N và P) vì tính chất 4 bị vi phạm (Cả hai con của

nút đỏ là đen) . Phép quay cũng làm thay đổi một vài đường đi (các đường đi qua

lá null bên trái nhất ) phải đi qua thêm nút mới N, nhưng vì N là đỏ nên không làm

chúng vi pham tính chất 5.

Hình 3.6

Trường hợp 5: Nút cha P là đỏ nhưng nút bác U là đen, nút mới N là con trái

của nút P, và P là con trái của nút ông G. Trong trường hợp này, một phép quay

phải trên nút ông G được thực hiện; kết quả của phep quay là trong cây mới nút P

trở thành cha của cả hai nít N và nút G. Đã biết G là đen, vì bây giờ nó là con của

P . Đổi màu của P và G thì cây thỏa mãn tính chất 4. Tính chất 5 không bị vi phạm

vì các đường đi qua G trước đây bây giờ đi qua P.

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN

P

N

G

U P

N

G

U

P

N

G

U N

P

G

U

28

Page 29: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

Hình 3.7

3.4.2 PHÉP XOÁ

Trong cây tìm kiếm nhị phân bình thường khi xóa một nút có cả hai con

(không là lá null), ta tìm phần tử lớn nhất trong cây con trái hoặc phần tử nhỏ nhất

trong cây con phải, chuyển giá trị của nó vào nút đang muốn xóa. Khi đó chúng ta

xóa đi nút đã được copy giá trị, nút này có ít hơn hai con (không là lá null) . Vì

việc copy giá trị không làm mất tính chất đỏ đen nên không cần phải sửa chữa gì

cho thao tác này. Việc này chỉ đặt ra khi xóa các nút có nhiều nhất một con (không

là lá null).

Chúng ta sẽ thảo luận về việc xóa một nút có nhiều nhất một con (không là lá

null).

Nếu ta xóa một nút đỏ, ta có thể chắc chắn rằng con của nó là nút đen. Tất cả

các đường đi đi qua nút bị xóa chỉ đơn giản bớt đi một nút đỏ do đó tính chất 5

không thay đổi. Ngoài ra, cả nút cha và nút con của nút bị xóa đều là nút đen, do

đó tính chất 3 và 4 vẫn giữa nguyên.. Một trường hợp đơn giản khác là khi xóa một

nút đen chỉ có một con là nút đỏ. Khi xóa nút đó các tính chất 4 và 5 bị phá vỡ,

nhưng nếu gán lại màu cho nút con là đen thì chúng lại được khôi phục.

Trường hợp phức tạp xảy ra khi cả nút bị xóa và nút con của nó đều là đen.

Chúng ta sẽ bắt đầu bằng việc thay nút bị xóa bằng nút con của nó. Chúng ta sẽ gọi

nút con này (trong vị trí mới của nó là N, và anh em với nó (con khác của nút cha

mới) là S. Tiếp theo ta vẫn dùng P chỉ cha mới của N, SL chỉ con trái của S, và SR

chỉ con phải của S (chúng tồn tại vì S không thể là lá).

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN

P

N

G

U N

U

P

G

29

Page 30: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

Giữa các trường hợp khác nhau, vai trò và nhãn của các nút có thể thay đổi,

nhưng trong một trường hợp mọi nhãn giữ vai trò không thay đổi. Trong hình vẽ

các màu đỏ đen được thể hiện khi màu của nút đã rõ ràng, màu trắng biểu thị một

màu chưa rõ (hoặc đỏ hoặc đen).

Chú ý: Tất nhiên, chúng ta cần hoàn chỉnh các lá null sau mọi phép thay đổi.

Nếu nút bị xóa không có con N khác "lá null", dễ dàng thấy rằng các tính chất

được thỏa mãn. Còn nếu N là một "lá null", có thể sửa chữa lược đồ để trong tất

cảc các trường hợp các tính chất được thỏa mãn.

Nếu cả N và gốc ban đầu của nó là đen thì sau khi xóa các đường qua "N"

giảm bớt một nút đen. Do đó vi phạm Tính chất 5, cây cần phải cân bằng lại.

Ta có các trường hợp sau:

Trường hợp 1: N là gốc mới. Trong trường hợp này chúng ta dừng lại. Ta đã

giải phóng một nút đen khỏi mọi đường đi và gốc mới lại là đen. Không tính chất

nào bị vi phạm.

Chú ý: Trong các trường hợp 2, 5, và 6, ta quy ước N là con trái của cha P.

Nếu nó là con phải, left và right sẽ tráo đổi cho nhau .

Trường hợp 2: S là đỏ. Trong trường hợp này tráo đổi màu của P và S, và

sau đó quay trái tại P, nó sẽ làm cho S trở thành nút ông của N. Chú ý rằng P có

màu đen và có một con màu đỏ. Tất cả các đường đi có số các nút đen giống nhau,

bây giờ N có một anh em màu đen và cha màu đỏ, chúng ta có thể tiếp tục với các

trường hợp 4, 5, hoặc 6. (anh em mới của nó là đen ví chỉ có một con của nút đỏ

S.) Trong các trường hợp sau ta sẽ gọi anh em mới của N là S.

Hình 3.8

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN

N

SR

P

S

SL

P

N

S

SR

SL

30

Page 31: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

Trường hợp 3 : P, S, và các con của S là đen. Trong trường hợp này, chúng

ta gán lại cho S màu đỏ. Kết quả là mọi đường đi qua S, (tất nhiên chúng không

qua N, có ít hơn một nút đen. Vì việc xóa đi cha trước đây của N làm tất cả các

đương đi qua N bớt đi một nút đen, nên chúng bằng nhau. Tuy nhiên tất cả các

đường đi qua P bây giờ có ít hơn một nút đen so với các đường không qua P, do đó

Tính chất 5 (Tất cả các đường đi từ gốc tới các nút lá có cùng số nút đen) sẽ bị vi

phạm. Để sửa chữa nó chúng ta lại tái cân bằng tại P, bắt đầu từ trường hợp 1.

Hình 3.9

Trường hợp 4: S và các con của S là đen nhưng P là đỏ. Trong trường hợp

này, chúng ta đổi ngược màu của S và P. Điều này không ảnh hưởng tới số nút đen

trên các đường đi không qua N, nhưng thêm một nút đen trên các đường đi qua N,

thay cho nút đen đã bị xóa trên các đường này.

Hình 3.10

Trường hợp 5: S là đen, con trái của S là đỏ, con phải của S là đen, còn N là

con trái của cha nó. Trong trường hợp này chúng ta quay phải tại S, khi đó con trái

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN

N

SR

P

S

SL

N

SR

P

S

SL

N

SR

P

S

SL

N

SR

P

S

SL

31

Page 32: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

của S trở thành cha của S và N là anh em mới của nó. Sau đó ta tráo đổi màu của S

và cha mới của nó. Tất cả các đường đi sẽ có số nút đen như nhau, nhưng bây giờ

N có một người anh em đen mà con phải của nó lại là đỏ, chúng ta chuyển sang

Trường hợp 6. Hoặc N hoặc cha của nó bị tác động bởi việc dịch chuyển này.

Hình 3.11

(trong trường hợp 6, ta đặt lại nút anh em mới của N là S.)

Trường hợp 6: S là đen, con phải của S là đỏ và N là con trái của nút cha P.

Trong trường hợp này chúng ta quay trái tại P, khi đó S trở thành cha của P và con

phải của S. Chúng ta hoán đổi màu của P và S, và gán cho con phải của S màu đen.

Cây con giữ nguyên màu của gốc do đó Tính chất 4 (Cả hai con của nút đỏ là đen)

và Tính chất 5 không bị vi phạm trong cây con này. Tuy nhiên, N bây giờ có thêm

một nút đen tiền nhiệm: hoặc P mới bị tô đen, nó đã là đen và S là nút ông của nó

trở thành đen. Như cậy các đương đi qua N có thêm một nút đen.

Trong lúc đó, với một đường đi không đi qua N, có hai khả năng:

Đi qua nút anh em của N. Khi đó cả trước và sau khi quay nó phải đi qua S

và P, khi thay đổi màu sắc hai nút này đã tráo đổi màu cho nhau. Như vậy

đường đi này không bị thay đổi số nút đen.

Đi qua nút bác của N, là con phải của S. Khi đó trước khi quay nó đi qua S,

cha của S, và con phải của S, nhưng sau khi quay nó chỉ đi qua nút S và con

phải của S, khi này S đã nhận màu cũ của cha P còn con phải của S's đã đổi

màu từ đỏ thành đen. Kết quả là số các nút đen trên đường đi này không thay

đổi.

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN

N

SR

P

S

SL

N

S

P

SL

32

Page 33: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

Như vậy, số các nút đen trên các đường đi là không thay đổi. Do đó các tính

chất 4 và 5 đã được khôi phục. Nút trắng trong hình vẽ có thể là đỏ hoặc đen,

nhưng phải ghi lại trước và sau khi thay đổi.

Hình 3.12

3.4.3 TÌM KIẾM

Khi đã xây dựng được cấu trúc cây đỏ đen thì thao tác tìm kiếm trên cấu trúc

dữ liệu này cũng sẽ được thực hiện như trong cây nhị phân tìm kiếm.

Khi tìm kiếm một khoá X nào đó có trên cây đó hay không ta có thể thực hiện

như sau:

So sánh X với khoá ở gốc và 1 trong 4 tình huống sau đây sẽ xuất hiện:

1) Không có gốc (cây rỗng) : X không có trên cây ; phép tìm kiếm không thoả

2) X trùng với khoá gốc: phép tìm kiếm được thoả

3) X nhỏ hơn khoá ở gốc: tìm kiếm thực hiện tiếp tục bằng cách xét cây con

trái của gốc với cách làm tương tự.

4) X lớn hơn khoá ở gốc: tìm kiếm được thực hiện tiếp tục bằng cách xét cây

con phải của gốc với cách làm tương tự.

Ví dụ: Với cấu trúc cây đỏ đen đã xây dựng được từ hình 3.1, ta cần tìm xem

giá trị khoá 5 có trong cây hay không.

Quá trình tìm kiếm sẽ như sau:

So sánh 5 với giá trị nút gốc, 5 < 11, chuyển sang cây con trái

Thực hiện so sánh 5 > 2, chuyển sang cây con phải

Thực hiện so sánh 5 < 7 , chuyển sang cây con trái

Cuối cùng, 5 = 5, vậy tìm kiếm đã được thoả.

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN 33

Page 34: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

Vg,VV

Như vậy, thời gian tìm kiếm khi sử dụng cấu trúc cây đỏ đen là O(log n)

PHẦN KẾT LUẬN

Giống như cây tìm kiếm nhị phân thông thường, cây đỏ đen có thể cho phép

việc tìm kiếm, chèn và xóa trong thời gian O(log2N). Thời gian tìm kiếm là gần

như bằng nhau đối với hai loại cây, vì những đặc điểm của cây đỏ đen không sử

dụng trong quá trình tìm kiếm. Điều bất lợi là việc lưu trữ cần cho mỗi node tăng

chút ít để điều tiết màu đỏ-đen (một biến boolean).

Đặc thù hơn, theo Sedgewick, trong thực tế tìm kiếm trên cây đỏ đen mất

khoảng log2N phép so sánh, và có thể chứng minh rằng nó không cần hơn

2*log2N phép so sánh.

Thời gian chèn và xóa tăng dần bởi một hằng số vì việc phải thực thi phép lật

màu và quay trên đường đi xuống và tại những điểm chèn. Trung bình một phép

chèn cần khoảng chừng một phép quay. Do đó, chèn hày còn chiếm O(log2N) thời

gian, nhưng lại chậm hơn phép chèn trong cây nhị phân thường.

Bởi vì trong hầu hết các ứng dụng, có nhiều thao tác tìm kiếm hơn là chèn và

xóa, có lẽ không có nhiều bất lợi về thời gian khi dùng cây đỏ đen thay vì cây nhị

phân thuờng. Dĩ nhiên, điều thuận lợi là trong cây đỏ đen, dữ liệu đã sắp xếp

không làm giảm hiệu suất O(N).

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN

11

2 14

71 15

85

34

Page 35: Cây đỏ đen

Cây đỏ den – lý thuyết và mô phỏng

TÀI LIỆU THAM KHẢO

[1]. Đỗ Xuân Lôi – Cấu trúc dữ liệu và giải thuật – NXB ĐHQG Hà Nội

[2]. R. Sedgevick – Algorithms, Addison- Wesley, 1990.Bản dịch tiếng Việt: Cẩm nang thuật toán (tập 1,2)

Địa chỉ các trang web tham khảo http://vi.wikipedia.org/wiki

http://www.eli.sdsu.edu/

http://sage.mc.yu.edu

http://www.cs.auckland.ac.nz/software/AlgAnim

-----o0o-----

Trần Thị Thu Bình _A/K54_SPTin_ĐHSPHN 35