Tải bản đầy đủ (.ppt) (20 trang)

Tiểu luận Phân tích và thiết kế thuật toán CÂY ĐỎ ĐEN Red-Black Trees

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 (548.91 KB, 20 trang )


Nội dung:
CÂY ĐỎ ĐEN (Red-Black Trees)
CÁC THÀNH VIÊN NHÓM 3:

Đinh Như Du (Trưởng nhóm)

Trương Thị Mỹ Lê

Nguyễn Thị Liên

Lê Văn Trường
TIỂU LUẬN MÔN HỌC
THIẾT KẾ & PHÂN TÍCH THUẬT TOÁN
Giảng viên hướng dẫn: TS. Hoàng Quang
NỘI DUNG BÁO CÁO:
Đặt vấn đề:
Các thao tác trên cây nhị phân tìm kiếm có độ phức
tạp là O(h). Trong trong hợp xấu nhất, khi cây không
cân bằng (lệch trái hoặc lệch phải) thì độ phức tạp là
O(n).

Ví dụ: Các nút được chèn theo thứ tự tăng dần.

⇒ Một số biện pháp giữ cây cân bằng như: AVL Trees,
B – Trees, Red - Black Trees.
13.1. Các tính chất của cây đỏ đen
1.Mọi nút là đỏ hoặc đen.
2. Nút gốc là đen.
3. Mọi nút lá (NIL) là đen.
4. Nếu một nút là đỏ, thì cả hai con của nó là đen.


5. Với một nút, mọi đường đi từ nút đó đến nút lá
hậu duệ bất kỳ có cùng số lượng nút đen.
a. Định nghĩa: Một cây nhị phân tìm kiếm (BST) là cây
đỏ đen nếu nó thỏa mãn các tính chất đỏ đen:
 
Ví dụ:
3
26
3 2
17 41
2 2 2
14 21 30
1
47
1 1
2
10 16 19
1
23 28
1 1
38 NIL NIL
1
1
1 7 1 12 1 15 NIL NIL 20 NIL NIL NIL NIL 35 39 1
1
NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
3
NIL NIL
Các nút lá NIL
có chiều cao đen=0

b. Chiều cao đen 
 !"#!$%!#&'!#(!"#)!!"*
+!,-
Sử dụng cờ hiệu nil[T] để biểu thị cho nút lá NIL
và nút cha của gốc.
3
26
3 2
17 41
2 2 2
14 21 30
1
47
1 1
2
10 16 19
1
23 28
1 1
38
1
1
1
7
1
12
1
15 20 35 39
1
1

3
cờ hiệu nil(T).

Tính chất:
h/2 ≤ bh(T), T: nút gốc

Cây con có gốc tại một nút x bất kỳ sẽ
chứa ít nhất 2
bh(x)
-1 nút trong.
Bổ đề: Một cây đỏ đen với n nút trong có
chiều h ≤ 2lg(n+1)
Nhận xét
- Hầu hết các thao tác như tìm kiếm, tìm nút có
giá trị nhỏ nhất, nút có giá trị lớn nhất, tìm nút
kế sau, và nút kế trước, phép chèn, xóa 1 nút
thực hiện trên cây đỏ đen với thời gian thực
hiện là O(h). (h: là chiều cao của cây)
- h ≤ 2lg(n+1)
⇒ Vậy độ phức tạp các thuật toán nêu trên trên
một cây đỏ đen với n nút là O(lg(n)).
c. Khai báo:
TRBNode = record
key: byte;
left, right, parent: TRBNodeP;
color: String[5]; {Red, Black}
end;
Parent: Nút cha (cha của x thì ký hiệu p[x]).
Root: Nút gốc.
Color: Chứa giá trị màu của nút.

d. Một số thao tác cơ bản trên cây đỏ đen:
i) Thao tác tìm kiếm nút có giá trị khóa k:
Function SEARCH (
T:
TRBNodeP
, k:bye):
TRBNodeP;
Begin
if (
T=
nil[T]
) or (k = T^.key)
then
SEARCH:=
T
else
if
k < T^.key then

SEARCH:= SEARCH(T^.
left, k)

else SEARCH:= SEARCH(T^.
right, k)
End;
Giải
Giải
thuật:
thuật:
Ví dụ, tìm khóa k=13 trong cây, có đường tìm kiếm:

15 6 7 13→ → →
k=25Search=nil[T]
ii) Thao tác tìm kiếm nút có giá trị nhỏ nhất (Min), lớn nhất (Max):

!
./0123!456,
78/019
!789
!69
Nút nhỏ nhất có giá trị =2
Nút nhỏ nhất có giá trị =20

!
./0$23!456,
78/0$9
789
!69
iii) Nút kế trước (Predecessor) của x:
Predecessor
le[x] ≠ nil[T]
[x])
y ← p[x]
:y ≠ nil[T]) and (x = le[y])
5 x ← y
y ← p[y]
6y


 
 

Nút kế trước của 13 là 9
Nút kế trước của 2 là nil[T]
!!
"#
$%
&'()*+
!!,&'
!
$%
#,&'-
#()*+,#&'
$%
,##,#&'-

 !!,#


iv) Nút kế sau (SUCCESSOR) của x:
SUCCESSORx)
right[x] ≠ nil[T]
right[x])
y ← p[x]
:y ≠ nil[T]) and (x = right[y]) 
5 x ← y
y ← p[y]
.y


 
 

Nút kế sau của 13 là 15
Nút kế sau của 20 là nil
/!! 
"#
$%
&'%()*+
/!!,&'%
!
$%
#,&'-
#()*+,#&'%
$%
,##,#&'-

/!!,#



Khi thực hiện các phép toán trên cây đỏ đen
như Chèn/xóa 1 nút sẽ làm cho cây đỏ đen bị vi
phạm một số tính chất.

Để phục hồi các tính chất này, chúng ta có
thể thực hiện các thao tác:
- Thay đổi màu.
- Cơ cấu lại các liên kết của cây thông qua
phép quay.
Phải giữ được các tính chất của cây đỏ đen!
13.2. Phép quay
 

Các phép quay (ROTATIONS):
Right_Rotato(T, Y)
O(1) time.
Y X
Left_Rotato(T, X)
X
Y
γ α
α β
β γ
Tính chất quan trọng:
phép quay cho phép duy trì các tính chất
của cây nhị phân tìm kiếm.
 
13.2.1. Phép quay trái (Left_rotate)
O(1) time.
Y X
Left_Rotato(T, X)
X
Y
γ α
α β
β γ
Phép quay trái trên một nút x, y<>nil thực hiện việc:

x thành con trái của y.

con trái của y thành con phải của x.

y trở thành nút gốc của cây con mới.

Thiết kế giải thuật phép quay trái
;$,6<$=1>?,,@9A23!
B!

,!$*CA!,!DEC0

A$F!!" CGA,!H0

!,!$*CA0
I!69
Procedure Left_Rotato (var T, x: TRBNodeP);
var y: TRBNodeP;
begin
y := x^.right;
J,!$*CA!,!DEC0K
x^.right := y^.left;
if (y^.left <> nil) then
y^.left^.parent := x;
y^.parent := x^.parent;
if (x = root) then
root := y;
else
if (x = x^.parent^.left) then
x^.parent^.left := y;
else
x^.parent^.right := y;
y^.left := x;
x^.parent := y;
end;
00

9
18
19
14

#


Giải
Giải
thuật:
thuật:
=1>?,,(T, X)


Thủ tục Left_Rotato(x)
Thủ tục Left_Rotato(x)
11
9
18
1914

#
13.2.2. Phép quay phải (Right_rotate)
;$,6<$?>?,@9JA23!K
B!

!,!DECA0

A$F!!" CGA,!H0

0

,!DECA!,!$*C

I!69
Procedure Right_Rotate(var T,x: TRBNodeP);
var y: TRBNodeP;
begin
y := x^.left;
x^.left := y^.right;
if (y^.right <> nil) then
y^.right^.parent := x;
y^.parent := x^.parent;
if (x = root) then
root := y;
else
if (x = x^.parent^.right) then

x^.parent^.right := y;
else
x^.parent^.left := y;
y^.right := x;
x^.parent := y;
end;
?>?,@X)
11
9
18
19
14

#

00
9
18
19
14
#



Giải
Giải
thuật:
thuật:


Thủ tục Right_Rotato(T,
Thủ tục Right_Rotato(T,
x)
x)
1-2
1-2
Tính chất:
h<= 2 * bh(T), T: nút gốc
Theo tính chất 4 của các cây đỏ đen ít nhất phân nửa các
nút trên đường đi đơn giản bất kỳ từ gốc đến một lá, không
kể gốc phải là đen. Do vậy, chiều cao đen của gốc phải ít
nhất là h/2;


Cây con có gốc tại một nút x bất kỳ sẽ chứa ít nhất
2
bh(x)
-1 nút trong.
* Thời gian tìm kiếm
: O(log n)
34567#484"9:%;5<=%>0
Chứng minh: L!M0
bh(T) ≥ h/2 mà n= 2

-1vậy n≥ 2
h/2
-1
⇒ h ≤ 2lg(n+1).
Trước tiên ta chứng tỏ cây con có gốc tại một nút x bất kỳ sẽ
chứa ít nhất 2
bh(x)
-1 nút trong.
Ta có:

Nếu chiều cao của x là 0, x phải là một lá (NIL): 2
bh(x)
-1= 2
0
-1=0

Mỗi con của x có ít nhất 2
bh(x)-1
-1 nút trong


Ta cần chứng minh chiều cao của cây là 2
bh(x)
-1
Do đó, Cây con có gốc tại x chứa ít nhất:
(2
bh(x)-1
- 1) +( 2
bh(x)-1
- 1 ) +1 = 2
bh(x)
- 1 nút trong. (đpcm)

×