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)

49 634 0

Đ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 49
Dung lượng 2,53 MB

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

Nội dung

Các tính chất của cây đỏ đen Một cây đỏ đen là một cây nhị phân tìm kiếm cộng thêm một bit lưu trữcho mỗi nút gồm: màu của nó, có thể là đỏ hoặc đen.. Nhờ ràng buộc cách thức tô màu các

Trang 1

TRƯỜNG ĐẠI HỌC KHOA HỌC KHOA CÔNG NGHỆ THÔNG TIN

-o0o -TIỂU LUẬN THIẾT KẾ VÀ PHÂN TÍCH THUẬT TOÁN

Đề tài:

Giảng viên hướng dẫn: TS HOÀNG QUANG Nhóm 3 – KHMT 2009:

Trang 2

L I N Ó I Đ U ỜI NÓI ĐẦU ẦU

Trong môn Cấu trúc dữ liệu và giải thuật chúng ta đã biết một cây nhị phân

tìm kiếm có chiều cao h có thể thực thi bất kỳ trong số các thao tác trên cây có

độ phức tạp O(h) thời gian Như vậy, các thao tác trên cây sẽ thực hiện nhanh

nếu cây cân bằng; nhưng nếu nó có chiều cao lớn (ví dụ cây lệch trái, lệch

phải,…) khả năng thực hiện của các phép toán có thể không tốt hơn so với một

danh sách liên kết Nhóm 3-Lớp KHMT-Khóa 2009-2011 đã may mắn được

thầy TS Hoàng Quang giao cho đề tài: ”Cây đỏ đen” là một trong số nhiều

dạng cây tìm kiếm "cân bằng" để đảm bảo các thao trên cây giảm độ phức tạp

xuống là O(lgn) Muốn làm điều đó khi thực hiện các thao tác trên cây, phải

giữ được tính chất của cây đỏ đen.

Nhóm 3 xin chân thành cảm ơn các bạn học viên trong lớp đã góp ý cho đề

tài, đặc biệt là thầy TS Hoàng Quang đã tận tình hướng dẫn, góp ý để nhóm 3

có thể hoàn thành tốt đề tài khá mới mẻ này

Chương 12 đã chứng tỏ một cây nhị phân tìm kiếm có chiều cao h có thểthực thi bất kỳ trong số các phép toán tập hợp động căn bản như: SEARCH (tìm

Trang 3

kiếm), PREDECESSOR (tìm nút kế trước), SUCCESOR (tìm nút kế sau),MINIMUM (tìm nút có khóa nhỏ nhất), MAXIMUM (tìm nút có khóa lớnnhất), INSERT (chèn nút) và DELETE (xóa nút) - trong O(h) thời gian Nhưvậy, các phép toán tập hợp chạy nhanh nếu cây tìm kiếm có chiều cao nhỏ;nhưng nếu nó có chiều cao lớn (ví dụ cây lệch trái, lệch phải,…) khả năng thựchiện của các phép toán có thể không tốt hơn so với một danh sách liên kết Cáccây đỏ đen là một trong số nhiều lược đồ cây tìm kiếm "cân bằng" để đảm bảocác phép toán tập hợp động căn bản chiếm O(lg n) thời gian trong trường hợpxấu nhất.

13.1 Các tính chất của cây đỏ đen

Một cây đỏ đen là một cây nhị phân tìm kiếm cộng thêm một bit lưu trữcho mỗi nút gồm: màu của nó, có thể là đỏ hoặc đen Nhờ ràng buộc cách thức

tô màu các nút trên một đường đi bất kỳ từ gốc đến một lá, các cây đỏ đen đảmbảo không có đường đi nào dài hơn gấp đôi so với bất kỳ đường đi nào khác,sao cho cây xấp xỉ cân bằng

Mỗi nút của cây giờ đây chứa các trường: color (màu sắc), key (khóa),left (con trái), right (con phải), và p (cha) Nếu một con hoặc cha của một nútkhông tồn tại, trường biến trỏ tương ứng của nút chứa giá trị NIL Ta sẽ xemcác NIL này như là các biến trỏ đến các nút ngoài (các lá) của cây nhị phân tìmkiếm và cây thường, các nút mang khóa bình thường xem như là các nút trongcủa cây

Một cây nhị phân tìm kiếm là một cây đỏ đen nếu nó thỏa mãn các tínhchất đỏ đen dưới đây:

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 Đối với mỗi nút, tất cả các đường đi từ nút đó tới các lá hậu duệ chứacùng số lượng các nút đen

Hình 13.1(a) đưa ra một ví dụ của một cây đỏ đen Một cây đỏ đen có các nút

đen tô sẫm và các nút đỏ tô bóng Mọi nút trong một cây đỏ đen là đỏ hoặc đen, mọi lá (nil) là đen, các con của một nút đỏ đều đen, và mọi đường đi đơn giản

từ một nút đến một lá hậu duệ chứa cùng số lượng nút đen.

Trang 4

Hình 13.1 (a) Mỗi nút lá xem như một nil là đen Mỗi nút không nil được đánh dấu với chiều cao đen của nó; nút NIL có chiều cao đen bằng 0.

Hình 13.1 (b) Giống với cây đỏ đen nhưng mỗi nút NIL được thay bằng cờ hiệu đơn giản nil[T], mà nó luôn luôn đen và chiều cao đen được bỏ qua Cha của nút gốc cũng là cờ hiệu.

Để tiện lợi trong việc giải quyết với các mệnh đề điều kiện ranh giớitrong mã giải của cây đỏ đen, chúng tôi sử dụng một cờ hiệu đơn giản để miêu

1 7

2 0

10

1 5 3

3 0

3 5

3 9

2 6

4 1 1

1 1 9

2 3

1 6

2

4 7 2

8

3 8

NIL NIL NIL NIL

NIL NIL NIL

NIL NIL

Trang 5

tả NIL Cho một cây đỏ đen T, cờ hiệu nil[T] là một đối tượng với các trườnggiống như một nút bình thường trong cây Trường color của nó là đen, và cáctrường khác - p, left, right và key có thể được gán giá trị bất kỳ Như trong hình13.1 (b) chỉ ra, tất cả các con trỏ NIL được thay thế bằng cờ hiệu nil[T]

Ta dùng cờ hiệu để có thể xem một con NIL của một nút x như là một nútbình thường có cha là nút x Mặc dù ta có thể thêm vào một nút cờ hiệu riêngđối với mỗi NIL trong cây, để cha của mỗi NIL được định nghĩa hợp lý, cáchnày sẽ gây lãng phí không gian (bộ nhớ) Thay vì ta dùng một cờ hiệu nil[T] đểbiểu thị cho tất cả các NIL của tất cả các lá và cha của gốc Các giá trị của cáctrường p, left, right, và key của cờ hiệu là không quan trọng, mặc dù ta có thểthiết lập chúng trong suốt quá trình của một thủ tục cho sự thuận lợi của chúngta

Thông thường ta giữ sự quan tâm của chúng ta đối với các nút trong củamột cây đỏ đen, vì chúng chứa các giá trị khóa Trong phần còn lại của chươngnày, ta bỏ qua các lá khi ta vẽ một cây đỏ đen, như trong hình 13.1(c)

Hình 13.1 (c ) Giống với cây đỏ đen nhưng toàn bộ các lá và cha của gốc được bỏ qua Chúng tôi sẽ dùng cách vẽ này trong phần còn lại của chương này.

Ta gọi số lượng các nút đen trên bất kỳ đường đi nào từ một nút x (nhưngkhông bao gồm x) đến một lá là chiều cao đen của nút (black height) ký hiệu làbh(x) Theo tính chất 5, khái niệm của chiều cao đen được định nghĩa hợp lý, vìtất cả các đường đi xuống từ một nút đều có cùng số lượng các nút đen Ta địnhnghĩa chiều cao đen của một cây đỏ đen là chiều cao đen của nút gốc

Bổ đề sau chỉ ra tại sao các cây đỏ đen tạo các cây tìm kiếm tốt

Trang 6

Chứng minh:

Trước tiên ta chỉ ra rằng cây con có gốc tại một nút x bất kỳ sẽ chứa ítnhất 2bh(x) - 1 nút trong Ta chứng minh sự khẳng định định này bằng phương

pháp quy nạp trên chiều cao của x

+ Nếu chiều cao của x là 0, x phải là một lá (nil[T]) và như vậy cây con

có gốc tại x chứa ít nhất 2bh(x) - 1= 20 - 1=0 nút trong

+ Với bước quy nạp, ta xét một nút x có chiều cao dương và là một núttrong có 2 con, mỗi con có một chiều cao đen là bh(x) hoặc bh(x)-1, tùy thuộcvào màu của nó là đỏ hoặc đen, theo thứ tự nêu trên Bởi chiều cao của một concủa x nhỏ hơn chiều cao của chính x, nên ta có thể áp dụng giả thiết quy nạp đểkết luận rằng mỗi con có ít nhất 2bh(x)-1 - 1 nút trong

Như vậy 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, điều phải chứng minh

Để hoàn chỉnh chứng minh của bổ đề cho h là chiều cao của cây Theotí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ảnbấ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ủagốc phải ít nhất là h/2; như vậy n >= 2h/2 - 1

Việc dời 1 sang bên phía trái và lấy loga trên cả 2 phía sẽ cho ralg(n+1)>=h/2 hoặc h <= 2lg(n+1)

Một kết quả trực tiếp của bổ đề này đó là các phép toán tập hợp độngSEARCH, PREDECESSOR, SUCCESOR, MINIMUM, MAXIMUM có thểđược thực thi trong O(lg(n)) thời gian trên các cây đỏ đen, bởi chúng có thểđược thực hiện để chạy trong O(h) thời gian trên một cây tìm kiếm có chiều cao

h (như đã nêu trong chương 12) và bất kỳ cây đỏ đen nào có n nút đều là mộtcây tìm kiếm với chiều cao O(lg(n)) (tất nhiên những vấn đề liên quan đến NILtrong các thuật toán trong chương 12 phải được thay bằng nil[T])

Mặc dù các thuật toán TREE-INSERT và TREE-DELETE ở chương 12chạy trong O(lg(n)) thời gian khi cho một cây đỏ đen là giá trị vào Nhưngchúng không trực tiếp hỗ trợ các phép toán tập hợp động INSERT và DELETE,bởi chúng không đảm bảo cây nhị phân đã sửa đổi sẽ là một cây đỏ đen Tuynhiên như các phần 13.3 và 13.4 sẽ cho thấy 2 phép toán này có thể được hỗ trợtrong O(lg(n)) thời gian

Trang 7

Ta có khai báo cấu trúc cây đỏ đen như sau:

TRBNode = record

key: byte;

left, right, p: TRBNodeP;

color: String[5]; {Red, Black}

Trang 8

Một số thao tác cơ bản trên cây đỏ đen:

Tương tự như cây nhị phân tìm kiếm, phép toán phổ biến trên cây đỏ đen

là tìm kiếm theo khóa được lưu trữ trong cây Ngoài phép toán SEARCH, cây

đỏ đen có thể được chứng minh rằng với các phép toán như tìm nút có giá trịnhỏ nhất, lớn nhất, nút kế trước nút x và nút kế sau nút x đều được thực hiệntrong O(h) thời gian, với h là chiều cao của cây

i) Thao tác tìm kiếm nút có giá trị khóa k:

Function SEARCH (T: TRBNodeP, k: bye): TRBNodeP;

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;

Trang 9

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

Giải thuật: Predecessor (x)

Function Predecessor ( x: TRBNodeP): TRBNodeP;

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

Giải thuật: SUCCESSOR(x)

Trang 10

Function Successor (x: TRBNodeP): TRBNodeP;

13.1-1: Trong mẫu hình 13.1 (a), vẽ cây nhị phân tìm kiếm hoàn chỉnh có chiều

cao 3 trên các khóa {1,2, ,15} Bổ sung các lá NIL và tô màu các nút theo 3cách khác nhau sao cho các chiều cao đen của các cây đỏ đen kết quả là 2, 3 và 4

1

2

1 1

1

1 1

1 1

Trang 11

Trường hợp chiều cao đen của cây là 3.

Trường hợp chiều cao đen của cây là 4

13.1-2: Vẽ cây đỏ đen mà kết quả của nó là sau khi thủ tục TREE-INSERT

được gọi trên cây trong hình 13.1 đối với khóa 36 Nếu nút được chèn vào làmàu đỏ, cây kết quả có phải là một cây đỏ đen không? kết quả là gì nếu nútchèn vào có màu đen?

NIL NIL NIL NIL

NIL NIL NIL

NIL NIL

Trang 12

Gợi ý: Với cây đỏ đen ở trên, nút với khóa 36 sẽ được chèn vào ở vị trí con phải

của nút có khóa 35

+ Nếu nút được chèn vào là màu đỏ, cây sẽ bị vi phạm tính chất 4 Do đó

nó không còn là cây đỏ đen

+ Nếu nút được chèn vào là màu đen, cây sẽ bị vi phạm tính chất 5 Do

đó nó không còn là cây đỏ đen

Qua đây chúng ta có nhận xét: nếu cho một cây đỏ đen là giá trị vào củathủ tục TREE-INSERT thì kết quả có thể không còn là cây đỏ đen

13.1-3: Chúng ta hãy đưa ra định nghĩa một cây đỏ đen yếu như một cây nhị

phân tìm kiếm mà nó thỏa mãn các tính chất chất đỏ đen 1, 3, 4 và 5 Nói cáchkhác, gốc có thể là đỏ hoặc đen Xét một cây đỏ đen yếu T, gốc của T là đỏ.Nếu chúng ta tô màu đen cho gốc T nhưng không làm thay đổi T, kết quả cây

có phải là cây đỏ đen không?

Gợi ý: Kết quả cây vẫn là cây đỏ đen.

13.1-4: Giả sử chúng ta quan tâm đến mọi nút đỏ trong một cây đỏ đen thành

nút cha đen của nó, với mục đích là các con của nút đỏ trở thành các con củacha đen (bỏ qua điều xảy ra với các khóa) Cấp của một nút đen có thể là gì saukhi tất cả các con đỏ của nó được chú ý Có thể nói điều gì với độ sâu của cácnút lá của cây kết quả?

Gợi ý:

Sau khi tất cả các con đỏ của nó được chú ý, mức độ của mỗi nút màuđen nút là:

+ 2, nếu cả hai nút con là màu đen,

+ 3, nếu một con là màu đen và một là màu đỏ, hoặc

+ 4, nếu cả hai con là màu đỏ

Tất cả các lá của cây kết quả có độ sâu như nhau

13.1.5: Chứng tỏ rằng đường đi đơn giản dài nhất từ một nút x trong một cây đỏ

đen đến một lá hậu duệ có chiều dài tối đa gấp đôi so với đường đi đơn giảnngắn nhất từ nút x đến một lá hậu duệ

Gợi ý:

Trong đường đi dài nhất, ít nhất mọi nút khác là màu đen Trong đường

đi ngắn nhất, nhiều nhất mọi nút là màu đen Từ đó hai đường đi chứa cùng sốlượng các nút đen, chiều dài của đường đi dài nhất gấp tối đa hai lần chiều dàicủa đường đi ngắn nhất

Chúng ta có thể nói chính xác hơn điều này như sau:

Vì mọi đường đi chứa cùng số lượng bh(x) nút đen, ngay cả đường đi ngắn nhất

từ nút x tới các lá hậu duệ có độ dài tối thiểu là bh(x) Theo định nghĩa, đường

đi dài nhất từ nút x tới lá hậu duệ có chiều dài là height(x) Vì đường đi dài nhất

Trang 13

chứa bh(x) nút đen và có ít nhất một nửa số nút trên đường đi dài nhất là nútđen (theo tính chất 4), tức là bh(x) >= height(x)/2 Bởi vậy, độ dài đường đi dàinhất = height(x) <=2*bh(x) <= 2 lần độ dài đường đi ngắn nhất.

Ta thay đổi cấu trúc biến trỏ thông qua phép quay, mà nó là phép quaycục bộ trong một cây tìm kiếm để bảo vệ các tính chất của cây nhị phân tìmkiếm Hình 13.2 chỉ ra hai loại phép quay; phép quay trái và phép quay phải.Khi chúng ta thực hiện phép quay trái trên một nút x, ta thừa nhận rằng conphải y của nó không phải là nil[T]; x có thể là một nút bất kỳ trong cây mà conphải của nó không phải là nil[T] Phép quay trái quay quanh đường nối từ x tới

y Nó làm y trở thành nút gốc của cây con mới, với x thành con trái của y, contrái của y thành con phải của x Mã giải cho LEFT-RORATE thừa nhận rằngright[x] nil[T] và cha của gốc là nil[T]

Hình 13.2: Các phép toán quay trên một cây nhị phân tìm kiếm Phép toán

LEFT-RORATE(T, x) biến đổi cấu hình của hai nút bên trái thành cấu hình bên phải bằng cách thay đổi một số biến trỏ bất biến Cấu hình bên phải có thể được biến đổi thành cấu hình bên trái bằng phép toán nghịch đảo RIGHT- RORATE(T, y) Các mẫu tự , , và biểu thị cho các cây con tùy ý Một phép quay bảo toàn các tính chất của cây nhị phân tìm kiếm: các khóa trong

đứng trước key(x), key(x) đứng trước các khóa trong, các khóa trong đứng trước key(y), key(y) lại đứng trước các khóa trong.

Trang 14

LEFT-ROTATE(T, x)

1 y ← right[x] (*Đặt y là cây con phải của x*)

2 right[x] ← left[y] (*Quay nút con trái của y thành nút con phải của x*)

RIGHT-Hình 13.3 Một ví dụ về cách thức mà thủ tục LEFT-RORATE(T, x) sửa một cây nhị phân tìm kiếm Cây xuất hiện ở giá trị vào và cây đã sửa đổi đem lại danh sách giá trị khóa giống nhau.

4

7

1 1 3

9 2

1 8 1 9

1 4 6

1

2 0

4

7

1 8 3

1 1 2

9

1 9 1

4 6

1

2 2 2 0 LEFT-ROTATE(T,x)

Trang 15

Bài tập:

13.2-1: Viết mã giải cho RIGHT-RORATE.

RIGHT-ROTATE(T, x)

1 y ← left[x] (*Đặt y là cây con trái của x*)

2 left[x] ← right[y] (*Quay nút con phải của y thành nút con trái của x*)

Gợi ý: Chúng ta chuyển chiều sâu của các nút a, b, c trong cây sang khái niệm

chiều cao đen của chúng (giả sử chiều cao đen của các nút a, b, c trước khi thựchiện phép quay trái là k) Khi thực hiện một phép quay trái trên nút x, chiều caođen của chúng sẽ không bị thay đổi (được bảo toàn)

Vấn đề này sẽ được thể hiện rõ hơn trong các bài tập của nội dung phép chèn

13.2-4: Chỉ ra rằng có thể dùng O(n) phép quay để biến đổi bất kỳ cây tìm kiếm

nhị phân n- nút tùy ý thành một cây tìm kiếm nhị phân n-nút tùy ý bất kỳ khác

Gợi ý: Trước tiên chứng tỏ rằng tối đa n-1 phép quay phải là đủ để biến đổi một

cây bất kỳ thành một chuỗi xích tiến phải

Trang 16

13.2-5: Ta nói rằng một cây tìm kiếm nhị phân T1 có thể được biến đổi phảithành cây tìm kiếm nhị phân T2 nếu nó có thể thu được T2 từ T1 thông qua mộtchuỗi lời gọi RIGHT-RORATE Đưa một ví dụ hai cây T1 và T2 sao cho T1

không thể được biến đổi phải thành T2 Khi đó chỉ ra rằng nếu một cây T1 có thểđược biến đổi phải thành T2, nó có thể biến đổi phải dùng O(n2) lời gọi RIGHT-RORATE

13.3 Phép chèn

Có thể thực hiện phép chèn một nút vào một cây đỏ đen n-núttrong O(lg n) thời gian Ta dùng một thủ tục mà nó là một sự sửa đổi khôngđáng kể của thủ tục TREE-INSERT (đoạn 12.3) để chèn nút z vào cây T nhưthể nó là một cây nhị phân tìm kiếm bình thường, sau đó ta tô đỏ z Để bảo toàncác tính chất đỏ-đen, ta gọi thủ tục RB-INSERT-FIXUP để tô màu lại các nút

và thực hiện các phép quay Gọi thủ tục RB-INSERT(T,z) chèn nút z vào cây

đỏ đen T, giá trị trường khóa của z được thừa nhận là đã được điền vào

Trước khi trình bày cụ thể về phép chèn một nút z vào cây đỏ đen, chúngtôi đưa ra một ví dụ sau:

quay để sửa các vi phạm đối với cây đỏ đen này như sau:

1 Đổi màu p[z], y đỏ thành đen,

p[p[z]] thành đỏ; di chuyển z lên vị

trí p[p[z]]

 tính chất 4 còn bị vi phạm

Trang 18

Trong RB-INSERT chúng ta đặt left[z] và right[z] bằng nil[T] trong dòng 14-15

để duy trì đúng cấu trúc cây Thứ 3, chúng ta tô đỏ cho z ở dòng 16, Thứ 4 vìmàu của z là đỏ nên có thể gây nên sự vi phạm một trong những tính chất củacây đỏ đen Chúng ta gọi thủ tục RB-INSERT-FIXUP(T,z) trong dòng 17 củathủ tục RB-INSERT để khôi phục các tính chất của cây đỏ đen

Để hiểu cách thủ tục RB-INSERT-FIXUP làm việc như thế nào, chúng ta

sẽ xem xét mã của nó theo 3 bước chính Trước hết, ta sẽ xác định sự vi phạmcác tính chất cây đỏ đen trong thủ tục RB-INSERT khi nút z được chèn và được

tô đỏ Thứ hai ta xem xét mục tiêu chung của vòng lặp While trong các dòng từ1-15 Cuối cùng chúng ta khảo sát mỗi trong số 3 trường hợp mà vòng lặpWhile dừng và xem cách chúng hoàn thành mục tiêu như thế nào, hình 13.4 nêucách hoạt động của RB-INSERT trên một cây đen đỏ mẫu

Thứ nhất: Tính chất đỏ đen nào có thể bị vi phạm khi gọi đến RB-INSERT-FIXUP?

Tính chất 1, 3 hiển nhiên đúng, vì hai con của nút đỏ mới chèn vào đềuđược gán là nil[T] Tính chất 5 nói rằng số lượng các nút đen là giống nhau trênmọi đường đi từ một nút đã cho và nó cũng được thỏa mãn, bởi vì nút z thay thếcho một nil[T] (đen) và nút z là đỏ với hai con nil[T] Như vậy tính chất đángxem xét nhất có thể bị vi phạm là tính chất 2 đó là nút gốc phải là đen và tínhchất 4 là một nút đỏ không thể có 1 con đỏ Cả 2 tính chất này có thể bị vi phạm

là do z được tô màu đỏ Tính chất 2 bị vi phạm nếu z là gốc, và tính chất 4 bị viphạm nếu cha của z là đỏ Hình 13.4 (a) chỉ ra 1 sự vi phạm tính chất 4 sau khinút z được thêm vào

Trang 19

Vi phạm tính chất 2:

Vi phạm tính chất 4:

Thứ 2: mục tiêu chung của vòng lặp While trong các dòng từ 1-15?

Vòng lặp While ở dòng 1-15 đảm bảo cho 3 phần sau không thay đổi: Tại lúcbắt đầu của mỗi lần lặp của vòng lặp:

a) Nút z là đỏ

b) Nếu p[z] là gốc thì p[z] là đen

c) Nếu có một vi phạm tính chất cây đen đỏ, đó chỉ có thể là tính chất 2hoặc là tính chất 4 Tính chất 2 vi phạm khi z là gốc và đỏ, tính chất 4 viphạm khi z và p[z] là đỏ

Nói cách khác, mục tiêu chung của vòng lặp While là dời vi phạm đối vớitính chất 4 lên phía trên cây trong khi đó duy trì tính chất 5 dưới dạng mộtbất biến

Để giải quyết những vi phạm tính chất của cây đỏ đen, ta tập trung nhiềuhơn đến việc chỉ ra rằng thủ tục RB-INSERT FIXUP phục hồi các tính chất củacây đỏ đen Chúng ta sẽ tập trung vào nút z và những nút kề nó trong cây Vìnút z là đỏ Chúng ta chứng tỏ rằng nút p[p[z]] tồn tại khi chúng ta xem xét nó ởdòng 2,3,7,8,13,14

(a)

Trang 20

1 1

8

1 4

y z

2

1 5 5

4

1 1

8

1 4

4

1 1

8

1 4

5 4

1 1

4 1

7 Trường hợp 3

z

Trang 21

Hình 13.4: Hoạt động của RB-INSERT-FIXUP (a) Một nút z sau khi chèn Vì z

và cha của nó p[z] cả hai đều là đỏ, một sự vi phạm đối với tính chất 4 xảy ra.

Do bác y của x là đỏ, ta có thể áp dụng trường hợp một trong mã Các nút được tô màu lại và biến trỏ z được dời lên cây, kết quả là cây được chỉ ra ở (b) Một lần nữa, z và cha của nó cả hai đều có màu đỏ, nhưng bác y của z là đen.

Do z là con phải của p[z] nên trường hợp 2 có thể được áp dụng Một phép quay trái được thực hiện và cây kết quả được nêu trong (c) Giờ đây z là con trái của cha nó, và trường hợp 3 có thể được áp dụng Một phép quay phải cho

ra cây trong (d), đúng là một cây đỏ đen.

Cuối cùng: khảo sát mỗi trong số 3 trường hợp mà vòng lặp While dừng và

xem cách chúng hoàn thành mục tiêu như thế nào?

Nhớ rằng chúng ta cần chỉ ra rằng một vòng lặp bất biến là đúng trướckhi lần lặp đầu tiên mà mỗi lần lặp duy trì vòng lặp bất biến và vòng lặp bấtbiến đó đưa ra cho chúng ta một tính chất quan trọng khi kết thúc vòng lặp

Đầu tiên chúng ta xem xét đầu và cuối vòng lặp sau đó chúng ta sẽ xemxét một cách chi tiết cách thân vòng lặp làm việc, chúng ta sẽ thấy rằng vònglặp duy trì tính bất biến trong mỗi lần lặp Bằng cách này chúng ta cũng sẽchứng tỏ rằng có hai kết quả trong mỗi vòng lặp: z di chuyển lên cây, hoặc làmột số phép quay được thực hiện và vòng lặp kết thúc

Đầu vòng lặp: Ưu tiên đối với vòng lặp đầu tiên, chúng ta bắt đầu với một cây

đen đỏ không có vi phạm, và chúng ta đã thêm vào một nút z đỏ Chúng tachứng tỏ rằng các tính bất biến được duy trì vào lúc RB-INSERT FIXUP được gọi.a) Khi RB-INSERT FIXUP được gọi, z là nút đỏ mà đã được thêm vào.b) Nếu p[z] là gốc thì p[z] là đen và không thay đổi trước khi gọi thủ tụcRB-INSERT - FIXUP

c) Chúng ta cũng thấy rằng tính chất 1,3, 5 được duy trì khi FIXUP được gọi

RB-INSERT-Nếu có vi phạm tính chất 2 khi đó nút gốc đỏ cần được thêm vào mới bởi nút z,

mà z là nút trong duy nhất trong cây Bởi vì cha và hai con của z đều là nil[T](đen), cũng không vi phạm tính chất 4 Như vậy trường hợp này chỉ vi phạmtính chất 2

Nếu có vi phạm tính chất 4 thì khi đó bởi vì con của z là nil[T] (đen) và câykhông bị vi phạm tính chất nào cả trước khi z được thêm vào, sự vi phạm này làcần thiết bởi vì cả z và p[z] là đỏ Hơn nữa không vi phạm tính chất đỏ đen nào khác

Cuối vòng lặp: Khi vòng lặp kết thúc nó thực hiện như vậy bởi vì p[z] là đen.

(Nếu z là gốc thì p[z] là nil[T] (đen)) Vì thế tính chất 4 không vi phạm ở cuốivòng lặp Chỉ tính chất 2 có thể vi phạm Dòng 16 phục hồi tính chất này để khithủ tục RB-INSERT-FIXUP kết thúc thì tất cả các tính chất đỏ đen được thõa mãn

Trang 22

Duy trì vòng lặp: Thật ra có 6 trường hợp để xem xét trong vòng lặp While

nhưng 3 trong số chúng tương ứng với 3 cái còn lại phục thuộc vào việc liệucha của z là con trái hay con phải của ông của z được xác định ở dòng 2 Chúng

ta đã đưa ra mã giải chỉ cho tình huống p[z] là con trái Nút p[p[z]] tồn tại vìqua vòng lặp bất biến nếu p[z] là gốc thi khi đó p[z] là đen Một lần lặp đượcthực hiện khi p[z] là đỏ, chúng ta biết rằng p[z] không thể là gốc Vì thế p[p[z]] tồn tại.Trường hợp 1 được phân biệt với trường hợp 2, 3 bằng cách tô màu y (nút chúbác) Dòng 3 thực hiện y trỏ đến chú bác của z (right[p[p[z]]]) và việc kiểm trađược thực hiện ở dòng 4 Nếu y là đỏ thì trường hợp 1 được thực hiện Ngượclại, thực hiện trường hợp 2 và 3 Trong tất cả 3 trường hợp p[p[z]] là đen vì chacủa nó p[z] là đỏ và tính chất 4 bị vi phạm vì z và p[z] là đỏ

Trường hợp 1: Chú bác của z là đỏ Hình 13.5 chỉ ra tình huống cho trường

hợp 1 (dòng 5-8) Trường hợp 1 được thực hiện khi cả p[z] và y là đỏ Khip[p[z]] là đen thì chúng ta có thể tô màu cả p[z] và y là đen Bằng cách sửa màuthành đen của z và p[z] khi cả hai đều đang đỏ và màu của p[p[z]] từ đen thành

đỏ vì vậy thỏa mãn tính chất 5 Khi đó chúng ta lặp lại vòng lặp While vớip[p[z]] như là một nút z mới Con trỏ z di chuyển lên hai mức trong cây

Bây giờ chúng ta chứng tỏ rằng trường hợp 1 duy trì vòng lặp bất biến khi bắtđầu lần lặp kế tiếp Chúng ta sử dụng z để biểu thị nút z trong lần lặp hiện thời

và z'=p[p[z]] để biểu thị nút z tại bước kiểm tra ở dòng 1 trên lần lặp tiếp theo a) Bởi vì lần lặp này tô màu p[p[z]] đỏ, nút z' đỏ vào lúc bắt đầu lần lặp kế tiếp b) Nút p[z'] là p[p[p[z]]] trong lần lặp này và màu của nút này không thayđổi Nếu nút này là gốc thì nó là đen đối với lần lặp này và nó vẫn đen tạilúc bắt đầu của lần lặp kế tiếp

c) Chúng ta cũng đã chứng tỏ rằng trường hợp 1 thõa mãn tính chất 1,3,5 Nếu nút z' là gốc khi bắt đầu lần lặp kế tiếp thì khi đó trường hợp 1 làm thỏamãn tính chất 4 Khi z' là đỏ và là gốc thì tính chất 2 là tính chất duy nhất bị viphạm và vi phạm này liên quan đến z'

new z

Trang 23

Hình 13.5 Trường hợp 1 của thủ tục RB-INSERT Tính chất 4 bị vi phạm vì z và cha của z đều là đỏ Cùng một hành động được thực hiện ở (a) z là con phải, hoặc ở (b) z là con trái Mỗi cây con  ,  ,  ,  đều có một gốc là đen và mỗi cây con đều có cùng chiều cao đen Mã của trường hợp 1 sẽ thay đổi các màu của vài nút, bảo toàn được tính chất 5: tất cả các lộ trình đi xuống từ một nút đến một lá đều có cùng số lượng nút đen Vòng lặp While tiếp tục với ông nội p[p[z]] của nút z làm z mới Mọi vi phạm đối với tính chất 4 giờ đây chỉ có thể xảy ra giữa z mới là đỏ và cha của nó nếu nó cùng màu đỏ.

Nếu nút z' không phải là nút gốc vào lúc bắt đầu của vòng lặp kế tiếp khi đótrường hợp 1 không tạo nên sự vi phạm tính chất 2 Trường hợp 1 khi đó là đúng và

nó chỉ vi phạm tính chất 4 và nó thoát khỏi lúc bắt đầu vòng lặp này Khi đó nó làmz' đỏ và con trái của p[z'] Nếu p[z'] là đen thì tính chất 4 không bị vi phạm Nếup[z'] là đỏ, màu z' đỏ tạo nên một sự vi phạm tính chất 4 giữa z' và p[z']

Trường hợp 2: Chú bác y của z là đen và z là con phải.

Trường hợp 3: Chú bác y của z là đen và z là con trái.

Trong trường hợp 2 và 3 màu của chú bác y của z là đen Hai trường hợpđược phân biệt bởi z hoặc là con trái hoặc là con phải của p[z] Dòng 10-11 tạonên trường hợp 2, mà nó được chỉ ra trong hình 13.6 cùng với trường hợp 3.Trong trường hợp 2 nút z là con phải của cha của nó Chúng ta dùng ngay phépquay trái để chuyển sang trường hợp 3 (dòng 12-14), lúc đó z là con trái Bởi vì

cả z và p[z] là đỏ, phép quay không ảnh hưởng đến chiều cao đen của nút cũngnhư tính chất 5

Chúng ta xem xét trường hợp 3 trực tiếp hay thông qua trường hợp 2, nútchú bác y của z là đen, thì khi đó mặt khác chúng ta cũng phải thực hiện trườnghợp 1.Thêm vào đó nút p[p[z]] tồn tại, khi đó chúng ta đã chứng tỏ rằng nút đãtồn tại lúc này ở dòng 2 và 3 được thực hiện, và sau khi di chuyển z lên mộtmức ở dòng 10 và xuống một mức ở dòng 11, sự đồng nhất của p[p[z]] vẫnkhông thay đổi Trong trường hợp 3 chúng ta thực hiện một vài phép đổi màu

và một phép quay phải mà nó vẫn bảo toàn tính chất 5 và khi ấy chúng ta không

B

A

D C

D C

Trang 24

còn có hai nút đỏ trong một hàng Thân của vòng lặp While không thực hiệnthêm lần nữa vì p[z] bây giờ là đen.

Hình 13.6: Các trường hợp 2 và 3 của thủ tục RB-INSERT Như trong trường hợp 1, tính chất 4 bị vi phạm trong trường hợp 2 hoặc trường hợp 3 bởi z và cha p[z] của nó là đỏ Mỗi cây con  ,  ,  ,  đều có một gốc là đen và mỗi cây con đều có cùng chiều cao đen Trường hợp 2 được biến đổi thành trường hợp 3 bằng một phép quay trái để bảo toàn tính chất 5: tất cả các lộ trình đi xuống từ một nút đến một lá đều có cùng sô lượng nút đen Trường hợp 3 tạo nên vài thay đổi màu và một phép quay phải, cũng bảo toàn tính chất 5 Sau đó, vòng lặp While kết thúc, bởi tính chất 4 được thỏa: không còn hai nút đỏ trong một hàng.

Bây giờ chúng ta chỉ ra rằng thân của vòng lặp While duy trì một vòng lặpbất biến trong trường hợp 2 và 3.(Vì chúng ta đã chứng tỏ rằng p[z] sẽ là đenvào lúc kiểm tra tiếp theo ở dòng 1 và thân vòng lặp không được thực hiện lại)

a Trong trường hợp 2 con trỏ z trở thành p[z], nó là đỏ Không có sự thayđổi nào nữa đối với z và màu của nó xảy ra trong trường hợp 2 và 3

b Trường hợp 3 làm cho p[z] trở thành đen sao cho nếu nó là nút gốc vàolúc bắt đầu vòng lặp kế tiếp nó là đen

c Như trong trường hợp 1, tính chất 1,3 và 5 được bảo toàn trong trường hợp 2 và 3.Khi nút z không phải là nút gốc trong trường hợp 2 và 3, ta biết rằng không

có sự vi phạm tính chất 2 Trong trường hợp 2 và 3 không giới thiệu một sự viphạm tính chất 2 Khi đó chỉ một nút được tạo thành đỏ trở thành con của mộtnút đen bằng cách thực hiện phép quay trong trường hợp 3

Trường hợp 2 và 3 xác đinh chỉ một sự vi phạm tính chất 4 và không giớithiệu một sự vi phạm khác

Mỗi lần lặp của vòng lặp duy trì tính bất biến, ta đã chỉ ra rằng thủ tục INSERT-FIXUP phục hồi đúng các tính chất của cây đỏ đen

RB-Phân tích: RB-INSERT chạy trong thời gian gì? Khi chiều cao của một cây đỏ

đen trên n nút là O(lg n), dòng 1-16 của RB-INSERT mất O(lg n) thời gian.Trong RB-INSERT-FIXUP, vòng lặp While lặp lại nếu trường hợp 1 được thựchiện và khi đó con trỏ z di chuyển lên hai mức của cây Tổng số lượng thời giancủa vòng lặp While có thể được thực hiện do đó là O(lg n) Vì thế, RB-INSERT

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

HÌNH ẢNH LIÊN QUAN

Hình 13.1 (a) Mỗi nút lá xem như một nil là đen. Mỗi nút không nil được đánh dấu với chiều cao đen của nó; nút NIL có chiều cao đen bằng 0. - Tiểu luận Phân tích và thiết kế thuật toán CÂY ĐỎ ĐEN (Red-Black Trees)
Hình 13.1 (a) Mỗi nút lá xem như một nil là đen. Mỗi nút không nil được đánh dấu với chiều cao đen của nó; nút NIL có chiều cao đen bằng 0 (Trang 4)
Hình 13.1 (c ) Giống với cây đỏ đen nhưng toàn bộ các lá và cha của gốc được bỏ qua. Chúng tôi sẽ dùng cách vẽ này trong phần còn lại của chương này. - Tiểu luận Phân tích và thiết kế thuật toán CÂY ĐỎ ĐEN (Red-Black Trees)
Hình 13.1 (c ) Giống với cây đỏ đen nhưng toàn bộ các lá và cha của gốc được bỏ qua. Chúng tôi sẽ dùng cách vẽ này trong phần còn lại của chương này (Trang 5)
Hình 13.2:  Các phép toán quay trên một cây nhị phân tìm kiếm. Phép toán LEFT-RORATE(T, x) biến đổi cấu hình của hai nút bên trái thành cấu hình bên phải bằng cách thay đổi một số biến trỏ bất biến - Tiểu luận Phân tích và thiết kế thuật toán CÂY ĐỎ ĐEN (Red-Black Trees)
Hình 13.2 Các phép toán quay trên một cây nhị phân tìm kiếm. Phép toán LEFT-RORATE(T, x) biến đổi cấu hình của hai nút bên trái thành cấu hình bên phải bằng cách thay đổi một số biến trỏ bất biến (Trang 13)
Hình 13.3 chỉ cách hoạt động của LEFT-RORATE. Mã của RIGHT- RIGHT-RORATE cũng tương tự - Tiểu luận Phân tích và thiết kế thuật toán CÂY ĐỎ ĐEN (Red-Black Trees)
Hình 13.3 chỉ cách hoạt động của LEFT-RORATE. Mã của RIGHT- RIGHT-RORATE cũng tương tự (Trang 14)
Hình 13.5 Trường hợp 1 của thủ tục RB-INSERT. Tính chất 4 bị vi phạm vì z và cha của z đều là đỏ - Tiểu luận Phân tích và thiết kế thuật toán CÂY ĐỎ ĐEN (Red-Black Trees)
Hình 13.5 Trường hợp 1 của thủ tục RB-INSERT. Tính chất 4 bị vi phạm vì z và cha của z đều là đỏ (Trang 23)
Hình 13.6: Các trường hợp 2 và 3 của thủ tục RB-INSERT. Như trong trường hợp 1, tính chất 4 bị vi phạm trong trường hợp 2 hoặc trường hợp 3 bởi z và cha p[z] của nó là đỏ - Tiểu luận Phân tích và thiết kế thuật toán CÂY ĐỎ ĐEN (Red-Black Trees)
Hình 13.6 Các trường hợp 2 và 3 của thủ tục RB-INSERT. Như trong trường hợp 1, tính chất 4 bị vi phạm trong trường hợp 2 hoặc trường hợp 3 bởi z và cha p[z] của nó là đỏ (Trang 24)
Hình 13.8 (a) Một cây tìm kiếm nhị phân có các khóa 2,3,4,7,8,10. - Tiểu luận Phân tích và thiết kế thuật toán CÂY ĐỎ ĐEN (Red-Black Trees)
Hình 13.8 (a) Một cây tìm kiếm nhị phân có các khóa 2,3,4,7,8,10 (Trang 42)
Hình 13.10 Hoạt động của TREAP-INSERT. - Tiểu luận Phân tích và thiết kế thuật toán CÂY ĐỎ ĐEN (Red-Black Trees)
Hình 13.10 Hoạt động của TREAP-INSERT (Trang 46)
Hình 13.9 Một treap. Mỗi nút x được gán nhãn là key[x]:priority[x]. - Tiểu luận Phân tích và thiết kế thuật toán CÂY ĐỎ ĐEN (Red-Black Trees)
Hình 13.9 Một treap. Mỗi nút x được gán nhãn là key[x]:priority[x] (Trang 46)

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