Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
13
Dung lượng
697,82 KB
Nội dung
1. G tìm k hạn nhiê n khôn nên nha n bằng cây 2 hiệu tron g tạo r GIỚI THIỆ Cây tìm kiếm nhanh Tuy nhiê chế. Nó h n. Tuy nhi ng hiệu quả không cân nh (hoặc ch Chúng t g: đó là cây Có nhiều 2-3-4. Tuy quả nhất, g những tậ Trước k ra như thế n H ỆU m kiếm nhị h. ên trong m oạt động t iên, nếu dữ ả. Khi các n bằng. Kh hèn hoặc x ta khảo sá y đỏ đen, là u cách tiếp y vậy, tron ít ra thì kh ập tin. hi khảo sá nào. Hình 1. Cá BÀI 6: C phân là m một số trườ tốt nếu dữ ữ liệu được trị số cần i cây khô n xóa) một ph át một các à cây tìm k p cận khác ng phần lớn hi dữliệu đ át cây đỏ đ ác node đư CÂY ĐỎ một cấu trú ờng hợp câ liệu được c chèn vào chèn đã đu ng cân bằn hần tử đã c ch giải quy kiếm nhị ph để bảo đả n trường h được lưu tr en, hãy xe ợc chèn th ĐEN úc lưu trữ d ây tìm kiếm chèn vào o theo thứ t uợc sắp xế g, nó mất cho. yết vấn đề hân có thêm ảm cho cây hợp, cây đỏ rữ trong bộ em lại cây k heo thứ tự t dữliệu tốt m nhị phân cây theo t tự đã đuợc ếp thì cây n đi khả năn ề của cây m một vài y cân bằng ỏ đen là câ ộ nhớ chứ không cân tăng dần t với tốc đ n có một s thứ tự ngẫ c sắp xếp s nhị phân tr ng tìm kiếm không câ đặc điểm : chẳng h ạ ây cân bằn không phả n bằng đượ 1 độ ố ẫu sẽ rở m ân . ạn ng ải ợc vì m của n Độ p một về O đảm ngh ĩ con b 2. Đ Cây (hìn h Khi quy Những n mỗi node lớ nút trước đ phức tạp Khi cây chiều tha y O(N), thay v Để bảo đ cây luôn ĩa là mỗi no bên trái. ĐỊNH NGH đỏ đen là h 2) (1) Mọi (2) Nod e (3) Nếu (4) Mọi chèn (hay tắc đỏ đe n node này tự ớn hơn nod đó. Khi ấy, p: một nhán h y vì hai chi vì O(log 2 N đảm thời g luôn cân b ode trên câ HĨA CÂY Đ một cây n node phải e gốc và cá một node đường dẫ n xóa) một n. Nếu được ự sắp xếp de đã được , cây bị mấ h, sẽ trở th iều. Trong N) đối với c gian truy x bằng (ít ra ây phải có ĐỎ ĐEN nhị phân tì là đỏ hoặc ác node lá là đỏ, nhữ n n từ gốc đế node mới, c tuân thủ, thành một c chèn vào ất cân bằng hành một d g trường hợ cây cân bằn xuất nhanh a cũng là c xấp xỉ số n ìm kiếm (B c đen. (NIL) phả ng node co ến một lá p cần phải t cây sẽ đư t đường kh trước đó, g hoàn toàn danh sách ợp này, thờ ng. của cây, c cây gần cân node con b BST) tuân i luôn luôn on của nó p phải có cùn tuân thủ cá ợc cân bằn hông phân mỗi node n. liên kết, d ời gian truy chúng ta cầ n bằng). Đ bên phải bằ n thủ các q n đen. phải đen. ng số lượng ác quy tắc ng. nhánh. Bở là con phả dữliệu sẽ l y xuất giảm ần phải bả Điều này c ằng số nod quy tắc sau g node đen trên -gọi l 2 ởi ải là m ảo ó de u: n. là 3 Hình 2. Một ví dụ về 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 dẫn từ gốc đến lá phải có cùng chiều cao đen. Khai báo cấu trúc: typedef int Data; /* Kiểu dữliệu khoá */ typedef enum { BLACK, RED } nodeColor; typedef struct NodeTag { nodeColor color; /* Màu node (BLACK, RED) */ Data info; /* Khoá sử dụng tìm kiếm */ struct NodeTag *left; /* Con trái */ struct NodeTag *right; /* Con phải */ struct NodeTag *parent; /* Cha */ } NodeType; typedef NodeType *iterator; Bổ đề: Một cây đỏ đen n-node có chiều cao h <= 2 log 2 (n+1) 3. PHÉP QUAY Thực ra quay không có nghĩa là các node bị quay mà để chỉ sự thay đổi quan hệ giữa chúng. Một node được chọn làm "đỉnh" của phép quay. Nếu chúng ta đang thực hiện một phép quay qua phải, node "đỉnh" này sẽ di chuyển xuống dưới và về bên phải, vào vị trí của node con bên phải của nó. Node con bên trái sẽ đi lên để chiếm lấy vị trí của nó. trái. qua y 4. T định node đỏ, n cây đ Phải đảm Nếu không y trái, node THÊM NOD Chúng t h nhãn nhữn e mới được nghĩa là có − X là m − P là no − G là n Trong q đỏ đen, chú − Các ph − Các ph − Các ph Hìn m bảo tron g chẳng có e ở đỉnh ph DE MỚI a sẽ xem x ng node liê c chèn, hoặ ó cùng màu một node ch ode cha củ ode ông bà quá trình th úng ta sẽ th hép lật màu hép quay k hép quay tr h 3. Q ng phép q ó gì để qua hải có node xét việc mô ên quan. X ặc node co u đỏ). ho trước. ủa X. à của X (no hêm vào n hực hiện c u trên đườn khi node đã rên đường Quay trái và quay phải, ay vào điểm e con phải. ô tả qui trì X là node v on khi nod ode cha củ node mới c ác thao tác ng đi xuốn ã được chè đi xuống. à quay phả node ở đỉ m đỉnh. Tư ình chèn. G vi phạm quy e cha và n ủa P). có thể vi p c sau đây: ng. èn. ải ỉnh phải có ương tự, nế Gọi X, P, v y tắc (X có node con xu phạm các q ó node co ếu làm phé và G để ch ó thể là mộ ung đột đỏ quy tắc củ 4 n p hỉ ột ỏ- ủa 4.1 phâ n đi qu phép phép con nod e gọi n node hình Các phép Phép thê n thông thư ua phải hay Tuy nhiê p lật màu v Để bảo p lật màu k Nếu phé đỏ, chúng e cha là no Một ph é node ở đỉn e cha). Chú h 4a. H ì p lật màu êm vào tro ường: đi th y trái tùy v ên, trong c và quay. đảm khôn khi cần theo ép thêm và ta đổi cá c de gốc, nó ép lật màu nh tam giác úng ta gọi ình 4a. trướ u trên đườ ong cây đỏ heo một đư vào giá trị c cây đỏ đen g vi phạm o quy tắc n o làm xuất c node con vẫn vẫn g ảnh hưởng c, node có hai node Hìn h ớc khi lật m ờng đi xu ỏ đen bắt ường dẫn t của khóa n n, đến được m các quy t như sau: t hiện tình n thành đen giữ màu là g đến các q ó màu đen con trái v à h 4. Lật mà màu, Hình uống đầu như t r từ node gố node và khó c điểm chè tắc màu, cầ trạng một n và node đen). quy tắc đỏ trước phép à phải của àu 4b sau kh i rên cây tìm ốc đến vị tr óa tìm kiếm èn là phức ần phải tiế node đen cha thành ỏ-đen ra sao p lật là P ( P là X1 v i lật màu. m kiếm nh rí cần chèn m. tạp bởi c á ến hành cá có hai nod đỏ (trừ kh o? chúng t (P thay ch và X2. Xem 5 hị n, ác ác de hi ta ho m 6 Chúng ta nhận thấy sau khi lật màu chiếu cao đ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 được đổi 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. 4.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 5. bên nod e P và P, tù tươn trong hình xét n X là mộ node cha G e con trái c à node P là Nếu X l ùy vào việ ng tự nếu X g hình 5. Thao tá c h của node như sau:(hì Hình 5. t node ch á G. Điều nà của P và P node con p là node chá ệc node P X là một n c phục hồi X và nhữ ình 6) Các biến d áu ngoại nế ày có nghĩa là node co phải của G áu ngoại, n ở bên trái node cháu i quy tắc đ ững bà con dạng của n ếu nó nằm a là, X là n on trái của G G. Ngược lạ nó có thể h i hay bên nội. Bốn đỏ-đen đượ của nó. C node được cùng bên node cháu G, hoặc nó ại, X là mộ hoặc bên tr phải node t rường hợ ợc xác định Có 3 khả n chèn node cha P ngoại nếu ó là node c ột node chá rái hoặc bê G. Có ha ợp này đượ h bởi các m ăng xảy ra P và P cùn u hoặc nó l on phải củ áu nội. ên phải củ ai khả năn ợc trình bà màu và cấ a được xem 7 ng là ủa ủa ng ày ấu m Chú n i) Kh đen, số n o chèn ii) K giản i) ii ) iii ng ta sẽ xé hả năng 1: P đen l à không có ode đen (q n đã hoàn t Khả năng 2 Nếu no d và một và Hình Khả năng ) Khả năng i) Khả năn ét các khả n P đen à trường hợ xung khắc quy tắc 4). ất. : P đỏ và X de P đỏ và ài thay đổi h 6. Ba khả 1: P đen g 2: P đỏ v ng 3: P đỏ v năng trên m ợp đơn giả c đỏ-đỏ (qu Do vậy, kh X là cháu n à X là nod về màu. B ả năng sau à X là chá u và X là chá một cách cụ ản. Node th uy tắc 3), v hông bị vi ngoại của G de cháu ng Bắt đầu với khi chèn n u ngoại củ áu nội của ụ thể như s hêm vào lu và không c phạm quy G goại, ta cần i giá trị 50 nút a G G sau: uôn đỏ. Nế có việc cộn y tắc về mà n một phép tại node g ếu node ch ng thêm và àu. Thao tá p quay đơ gốc, và chè 8 ha ào ác ơn n 9 các node 25, 75 và 12. Ta cần phải làm một phép lật màu trước khi chèn node 12. Bây giờ, chèn node mới X là 6. (hình 7a. )xuất hiện lỗi: cha và con đều đỏ, vì vậy cần phải có các thao tác như sau: (hình 7) Trong trường hợp này, ta có thể áp dụng ba bước để phục hồi tính đỏ- đen và làm cho cân bằng cây. Sau đây là các bước ấy: -Đổi màu node G - node ông bà của node X (trong thí dụ này là node 25). -Đổi màu node P - node cha của node X (node 12) -Quay với node G (25) ở vị trí đỉnh, theo huớng làm nâng node X lên (6). Đây là một phép quay phải. Khi ta hoàn tất ba buớ c trên sẽ bảo toàn cây đỏ đen. Xem hình 7b. Trong thí dụ này, node X là node cháu ngoại của một node con trái. Có một trường hợp đối xứng khi node X là node cháu ngoài nhưng của một node con phải. Thử làm điều này bằng cách tạo nên cây 50, 25, 75, 87, 93 (với phép lật màu khi cần). Chỉnh sửa cây bằng cách đổi màu node 75 và 87, và quay trái với node 75 là node đỉnh. Một lần nữa cây lại được cân bằng. iii) K quay 25, 7 và co Khả năng 3 Nếu nod y và một v 75, 12 và 1 Lưu ý l à on đều đỏ) Hình 7. 3: P đỏ và X de P đỏ và vài phép đổ 8. (cần ph à node 18 l ). Node P đỏ X là cháu n X là node ổi màu. Câ ải lật màu là node chá ỏ và X là n nội của G cháu nội, ây đỏ đen trước khi c áu nội. No node cháu n chúng ta c được tạo t chèn node ode này và ngoại cần thực hi thành từ cá 12). Xem node cha đ 1 ện hai phé ác node 50 hình 8a. đều đỏ (ch 0 ép 0, ha [...]... nữa với node ông bà của X (25) ở đỉnh, về hướng nâng X lên (quay phải) 5 LOẠI BỎ NODE Trong cây BST chúng ta thấy rằng phép loại bỏ phức tạp hơn so với phép thêm vào Trong cây đỏ đen phép loại bỏ càng phức tạp hơn rất nhiều so với phép thêm vào vì yêu cầu đảm bảo quy tắc đỏ đen Chúng ta có thể tham khảo trong phần cài đặt • • Nếu xóa một nút đỏ thì chiều cao đen của cây không đổi Nếu xóa một nút đen... 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) Một trở ngại trong cây đỏ đen là việc cài đặt các phép toán phức tạp hơn so với cây BST Chúng ta có thể tham khảo các phép toán thêm vào và loại bỏ trong . nếu dữ ữ liệu được trị số cần i cây khô n xóa) một ph át một các à cây tìm k p cận khác ng phần lớn hi dữ liệu đ át cây đỏ đ ác node đư CÂY ĐỎ một cấu. 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 dẫn từ gốc đến lá phải có cùng chiều cao đen. Khai báo cấu trúc: