Tải bản đầy đủ (.pdf) (31 trang)

Tài liệu Báo cáo - Cấu trúc dữ liệu - Cây đỏ đen doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (557.47 KB, 31 trang )

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN CẤU TRÚC DỮ LIỆU 2










Lời nói đầu:
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.
Trong phạm vi bài báo cáo này, chúng em xin trình bài về : khái quát cây đỏ đen,
các thuật toán c
ơ bản, code cài đặt các thuật tóan cơ bản và có những nhận xét về cấu
trúc cây đỏ đen này.
Chúng em chân thành cam ơn cô Phạm Phạm Tuyết Trinh đã tạo điều kiện cho
chúng em tìm hiểu đề tài lý thú này. Dù hết sức cố gắng song vẫn không tránh được
những sai xót nhất định chúng em mong được sư mong nhận được những đóng góp
chân tình để bài làm trở nên hòan chỉnh hơn.
Nhóm thực hiện
Cây Đỏ Đen
2


























Mục lục:
Lời nói đầu: ..................................................................................................................... 1

Mục lục: ........................................................................................................................... 2

I-


Giới thiệu: ................................................................................................................ 3

II-

Định nghĩa: .......................................................................................................... 5

III-

Các thuật toán cơ bản của Black and Red Tree ............................................... 6

1-

Thêm một Node mới ........................................................................................... 6

2-

Xóa một node: .................................................................................................... 14

IV-

Thuật toán cài đặt: ............................................................................................ 14

V-

Nhận xét : ........................................................................................................... 31







Cây Đỏ Đen
3
























I- Giới thiệu:

Cây đỏ đen được ra giới thiệu 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).

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ây Đỏ Đen
4
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ướ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.1. 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.
Cây

Tr
o
tử
kh
ô
cân
Cây
Kh
đen

y Đỏ Đen
ong cây đỏ
thì thủ tụ
c
ông. Nếu c
n bằng.
II- Đị

y đỏ đen là
hi chèn (hay
n. Nếu được
M
đen, việc c
c chèn sẽ k
ó, sẽ xây d
ịnh ngh
một cây nh
Mọi node
Node gốc
Nếu một
n
Mọi đườn
y xóa) một n
c tuân thủ, c
Số lượng n
cao đen (b
l
là mọi đườn
Bổ đề:
Một cây đỏ

ân bằng đư
kiểm tra xem
dựng lại cấu
hĩa:

hị phân tìm
phải là đỏ
và các no
d
node là đỏ,
ng dẫn từ gố
node mới, c
cây sẽ được
H
ode đen trê
lack height)
ng dẫn từ g
ỏ đen n-nod
5
ược thực thi
m tính chấ
u trúc cây.
kiếm( BS
T
hoặc đen.
de lá phải lu
những nod
ốc đến một
cần phải tuâ
c cân bằng.

Hình 3.2. Mộ
n một đườn
). Ta có thể
gốc đến lá p
de
trong khi c
ất cân bằng
Bằng cách
T) tuân thủ c
uôn luôn đen
de con của n
lá phải có c
ân thủ các q

ột ví dụ về c
ng dẫn từ gố
phát biểu q
hải có cùng
chèn, xóa. K
g của cây c
này, cây lu
các quy tắc
n.
nó phải đen
cùng số lượ
quy tắc trên
ây đỏ đen
ốc đến lá đư
quy tắc 4 th
g chiều cao

Khi thêm m
có bị vi ph
uôn luôn đư
sau: (hình
.
ợng node đe
-gọi là quy

ược gọi là c
eo một cách
đen.


một phần
hạm hay
ược giữ
3.2)
en.
y tắc đỏ
chiều
h khác
Cây Đỏ Đen
6
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 )
Chứng Minh:

III- Các thuật toán cơ bản của Black and Red Tree

1- Thêm một 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ây

·
C
· C


1.
1

Ph
é
đi t
trị
Tu
y
qua
Để
cầ
n


no
d
Mộ
tam
nod
Hìn
y Đỏ Đen
Các phép qu
Các phép qu
1 Các p
ép thêm vào
theo một đư
của khóa no
y nhiên, tro
ay.
bảo đảm
k
n. Theo quy
hai node co
de cha là no
ột phép lật m
m giác, node
de con trái v
nh 3.4. Lật
uay khi node
uay trên đườ
phép lật m
o trong cây
ường dẫn từ

ode và khóa
ong cây đỏ đ
không vi phạ
y tắc như sa
on đỏ, chún
ode gốc, nó
màu ảnh hư
e có màu đỏ
và phải của
màu
e đã được c
ờng đi xuốn
àu trên đư
đỏ đen bắt
ừ node gốc đ
a tìm kiếm.
đen, đến đư
ạm các quy
au: nếu phép
ng ta đổi các
vẫn vẫn gi
ưởng đến cá
ỏ trước phép
a P là X1 và
7
chèn.
ng.
ường đi xu
t đầu như trê
đến vị trí cầ


ược điểm ch
y tắc màu, c
p thêm vào
c node con t
ữ màu là đe
ác quy tắc đ
p lật là P (P
à X2. Xem h
uống
ên cây tìm k
ần chèn, đi
hèn là phức
ần phải tiế
n
làm xuất hi
thành đen v
en).
đỏ-đen ra sa
P thay cho n
hình 3.4a.
kiếm nhị ph
qua phải ha
tạp bởi các
n hành các p
iện tình trạn
và node cha
ao? chúng ta
node cha). C


hân thông th
ay trái tùy v
c phép lật m
phép lật mà
ng một nod
a thành đỏ (
a gọi node ở
Chúng ta gọ


hường:
vào giá
màu và
àu khi
de đen
trừ khi
ở đỉnh
ọi hai
Cây Đỏ Đen
8
Hình 3.4a. trước khi lật màu, Hình 3.4b sau khi lật màu.
Chúng ta nhận thấy sau khi lật màu chiếu con đen của cây không đổi. Như vậy phép lật
màu không vi phạm quy tắc 4.
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ị truớc khi đi xuống theo cây để chèn node mới. Chúng
ta có thể giải quyết trường hợp này bằng một phép quay.

Đố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.
1.2 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.
Cây


n
X l
Điề
nod
Ng
Nế
no
d
chá
Tha

y Đỏ Đen
nh 3.5. Các
là một node
ều này có n
de con trái c

gược lại, X l
u X là node
de P ở bên t
áu nội. Bốn
ao tác phục
những bà c
biến dạng
e cháu ngoạ
nghĩa là, X l
của G, hoặc
là một node
e cháu ngoạ
trái hay bên
n trường hợp
c hồi quy tắc
con của nó.
của node đư
ại nếu nó nằ
là node cháu
c nó là node
e cháu nội.
ại, nó có thể
n phải node
p này được
c đỏ-đen đư
Có 3 khả n
9
ược chèn
ằm cùng bên
u ngoại nếu

e con phải c
ể hoặc bên t
G. Có hai k
trình bày tr
ược xác địn
năng xảy ra
n node cha
u hoặc nó là
của P và no
trái hoặc bê
khả năng tư
rong hình 3
nh bởi các m
được xem x

P và P cùn
g
à node con t
de P là nod
ên phải của
ương tự nếu
.5.
màu và cấu h
xét như sau
g bên node
trái của P v
de con phải
P,
tùy vào
u X là một n

hình của no
u:(hình 3.6)


cha G.
và P là
của G.
việc
node
ode X
Cây


n
i) K
ii) K
iii)
C
h
i) K
P đ
xun
Do
ii) K
Nế
th
a
cần
y Đỏ Đen
nh 3.6. Ba k

Khả năng 1
Khả năng 2
Khả năng
húng ta lần l
Khả năng 1
đen là trườn
ng khắc đỏ-
o vậy, không
Khả năng 2
u node P đỏ
ay đổi về mà
n phải làm m
khả năng sa
: P đen
2: P đỏ và X
3: P đỏ và X
lượt xét các
: P đen
ng hợp đơn
-đỏ (quy tắc
g bị vi phạm
2: P đỏ và X
ỏ và X là no
àu. Bắt đầu
một phép lậ
au khi chèn
X là cháu ng
X là cháu n
c khả năng c
giản. Node

c 3), và khô
m quy tắc v
X là cháu ng
ode cháu ng
u với giá trị
ật màu trước
10


t
goại của G
nội của G
cụ thể như s
thêm vào l
ông có việc
ề màu. Th
a
goại của G
goại, ta cần
50 tại nod
e
c khi chèn n
sau:
luôn đỏ. Nế
cộng thêm
ao tác chèn
một phép
q
e gốc, và ch
node 12.

ếu node cha
vào số nod
đã hoàn tất
quay đơn gi
hèn các node
a đen, không
de đen (quy
.
iản và một v
e 25, 75 và


g có
tắc 4).
vài
12. Ta
Cây


y
phả
Tro
cân
Đ
Đ
Q
phé
Kh
Tro
đối

này
bằn
cây
y Đỏ Đen
y giờ, chèn
ải có các th
ong trường
n bằng cây.
Đổi màu nod
Đổi màu nod
Quay với no
ép quay phả
hi ta hoàn tấ
ong thí dụ n
i xứng khi n
y bằng cách
ng cách đổi
y lại được c
node mới X
ao tác như
hợp này, t
a
Sau đây là
de G - node
de P - node
de G (25)

ải.
ất ba buớc tr
này, node X

node X là n
h tạo nên câ
màu node
cân bằng.
X là 6. (hìn
sau: (hình 3
a có thể áp d
các bước ấ
e ông bà của
cha của no
ở vị trí đỉnh
rên sẽ bảo t
X là node ch
node cháu ng
ây 50, 25, 75
75 và 87, v
11
nh 3.7a. )xuấ
3.7)
dụng ba bướ
ấy:
a node X (tr
de X (node
, theo huớn
toàn cây đỏ
háu ngoại củ
goài nhưng
5, 87, 93 (v
và quay trái
ất hiện lỗi:

ớc để phục
rong thí dụ
e 12)
ng làm nâng
đen. Xem
ủa một node
g của một no
với phép lật
với node 7
cha và con
hồi tính đ

này là node
g node X lên
hình 3.7b.
e con trái. C
ode con phả
màu khi cầ
5 là node đ
đều đỏ, vì
v
ỏ-đen và làm
e 25).
n (6). Đây l
Có một trườ
ải. Thử làm
ần). Chỉnh s
ỉnh. Một lầ



vậy cần
m cho
là một
ờng hợp
m điều
sửa cây
ần nữa
Cây


n
iii)
Nế
phé
lật

u
y Đỏ Đen
nh 3.7. Nod
Khả năng
u node P đ

ép đổi màu.
màu trước
u ý là node

de P đỏ và X
3: P đỏ và X
ỏ và X là no
. Cây đỏ đe

khi chèn no
18 là node
X là node ch
X là cháu n
ode cháu nộ
en được tạo
ode 12). Xe
cháu nội. N
12
háu ngoại
nội của G
ội, chúng ta
thành từ cá
em hình 3.8
Node này v
a cần thực h
ác node 50,
a.
à node cha
hiện hai phé
25, 75, 12
đều đỏ (ch
a
ép quay và m
và 18. (cần
a và con đề


một vài
n phải

ều đỏ).

×