1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

20 864 4

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 856,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đặ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à Oh.. Các tính chất của cây đỏ đen 1.Mọi nút là đỏ hoặc đen.. Với một nút, mọi đường đi từ nút đó đến nút lá hậu du

Trang 1

Nhóm 3-KHMT-K2009

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

Trang 2

NỘI DUNG BÁO CÁO:

Trang 3

Đặ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

Trang 4

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:

Trang 5

10/29/2009 Nhóm 3-KHMT-K2009

2 14 21 2 2 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 (black height – bh(x))

là số nút đen trên đường đi từ nút x đến nút lá (không bao gồm x)

Trang 6

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

2 14 21 2 2 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)

Trang 7

• 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ẽ

Bổ đề: Một cây đỏ đen với n nút trong có

chiều h ≤ 2lg(n+1)

Trang 8

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))

Trang 9

c Khai báo:

TRBNode = record

key: byte;

left, right, parent: TRBNodeP;

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.

Trang 10

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 thuật:

Ví dụ, tìm khóa k=13 trong cây, có đường tìm kiếm:

15 6 7 13 → 6 → 7 → 13 → 6 → 7 → 13 → 6 → 7 → 13 k=25Search=nil[T]

Trang 11

ii) Thao tác tìm kiếm nút có giá trị nhỏ nhất (Min), lớn nhất (Max):

Function Min(T: TRBNodeP): TRBNodeP;

begin while (T^.left <> nil[T]) do

T := T^.left;

Min:=T;

end;

Nút nhỏ nhất có giá trị =2

Nút nhỏ nhất có giá trị =20

Function Max(T: TRBNodeP): TRBNodeP;

begin while (T^.right <> nil[T]) do

T := T^.right;

Max:=T;

end;

Trang 12

iii) Nút kế trước (Predecessor) của x:

Predecessor(x)

1 if left[x] ≠ nil[T]

2 then return Max(left[x])

3 y ← p[x]

4 while (y ≠ nil[T]) and (x = left[y]) do

5 x ← y

y ← p[y]

6 return y

Giải thuật:

Nút kế trước của 13 là 9 Nút kế trước của 2 là nil[T]

Function Predecessor ( x: TRBNodeP): TRBNodeP;

var y: TRBNodeP;

begin

if (x^.left<> nil[T]) then

Predecessor :=Max(x^.left) else

begin

y := x^.parent;

while (y<>nil[T]) and (x = y^.left) do begin

x := y; y := y^.parent;

end;

Predecessor :=y;

end;

end;

Trang 13

iv) Nút kế sau (SUCCESSOR) của x:

SUCCESSOR(x)

1 if right[x] ≠ nil[T]

2 then return Min(right[x])

3 y ← p[x]

4 while (y ≠ nil[T]) and (x = right[y]) do

5 x ← y

y ← p[y]

6 return y

Giải thuật:

Nút kế sau của 13 là 15 Nút kế sau của 20 là nil

Function Successor (x: TRBNodeP): TRBNodeP; var y: TRBNodeP;

begin

if (x^.right<> nil[T]) then Successor :=Min(x^.right) else

begin

y := x^.parent;

while (y<>nil[T]) and (x = y^.right) do begin

x := y; y := y^.parent;

end;

Successor :=y;

end;

end;

Trang 14

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

Trang 15

10/29/2009 Nhóm 3-KHMT-K2009

Các phép quay (ROTATIONS):

Right_Rotato(T, Y) O(1) time

Left_Rotato(T, X)

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

Trang 16

10/29/2009 Nhóm 3-KHMT-K2009

O(1) time

Left_Rotato(T, X )

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.

Trang 17

Thiết kế giải thuật phép quay trái

Procedure Left_Rotato(T, x); (y<>nil)

Begin

 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

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

End;

Procedure Left_Rotato (var T, x: TRBNodeP);

var y: TRBNodeP;

begin

y := x^.right;

{con trái của y thành con phải của x } 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;

11

9

18

19

14

x y

Giải thuật:

Left_Rotato (T, X)

Thủ tục Left_Rotato(x)

11

9 18

19 14

x

y

Trang 18

13.2.2 Phép quay phải (Right_rotate)

Procedure Right_Rotate(T, x); {y<>nil}

Begin

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

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

.

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

End;

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;

Right_Rotate(T, X) 11

9 18

19 14

y

x 11

9

18

19

14

y

x

Giải thuật: Thủ tục Right_Rotato(T,

x)

Phép chèn

Trang 19

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

2bh(x) -1 nút trong.

* Thời gian tìm kiếm : O(log n)

Bổ đề: Một cây đỏ đen với n nút trong có chiều cao h ≤ 2lg(n+1)

Trang 20

Chứng minh: „ h ≤ 2lg(n+1).

bh(T) ≥ h/2 mà n= 2 bh(T) -1 vậy n≥ 2h/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 2bh(x)-1 nút trong.

Ta có:

 Ta cần chứng minh chiều cao của cây là 2bh(x)-1

Do đó, Cây con có gốc tại x chứa ít nhất:

(2bh(x)-1 - 1) +( 2bh(x)-1 - 1 ) +1 = 2bh(x) - 1 nút trong (đpcm)

Ngày đăng: 11/04/2015, 22:05

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w