Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây đỏ đen trình bày định nghĩa cây đỏ đen, cấu trúc dữ liệu cho nút cây đỏ đen, các phép biến đổi cây đỏ đen cân bằng, các tình huống xảy ra khi duyệt ngược,... Mời các bạn cùng tham khảo.
CuuDuongThanCong.com CẤU TRÚC DỮ LIỆU CÂY ĐỎ ĐEN Bùi Tiến Lên 01/01/2017 https://fb.com/tailieudientucntt Cây đỏ đen Định nghĩa Cây đỏ đen (red black tree) Rudolf Bayer phát minh nhị phân tìm kiếm có đặc điểm sau Mọi nút phải nút đỏ nút đen Nút gốc nút đen Nếu nút nút đỏ, phải nút đen Tất đường từ nút gốc đến nút-0 (khơng có con) nút-1 (có con) phải có số lượng nút đen (điều kiện cân bằng) Nhận xét Cây đỏ đen tổng quát AVL CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Cây đỏ đen (cont.) CuuDuongThanCong.com Spring 2017 13 17 11 15 25 22 27 Hình 1: Cây đỏ đen https://fb.com/tailieudientucntt Data structure & Algorithm Cấu trúc liệu cho nút đỏ đen Cấu trúc liệu để lưu trữ cho nút đỏ đen 10 template struct RBNode { T data; int key; NodeColor color; RBNode *pLeft; RBNode * pRight ; RBNode * pParent ; }; CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Tìm kiếm duyệt Vì đỏ đen nhị phân tìm kiếm, tìm kiếm duyệt đỏ đen tương tự nhị phân tìm kiếm CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Các phép biến đổi đỏ đen cân Có ba phép biển đổi dùng để điều chỉnh cho đỏ đen cân Thay đổi màu (change color ) Thực xoay trái (left rotation) Thực xoay phải (right rotation) CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Các phép biến đổi đỏ đen cân (cont.) Thực xoay trái hai nút P N ; đó, N nút phải P CuuDuongThanCong.com Spring 2017 P T1 N N T2 T3 P T3 (a) trước xoay T1 T2 (b) sau xoay Hình 2: Thao tác xoay trái https://fb.com/tailieudientucntt Data structure & Algorithm Các phép biến đổi đỏ đen cân (cont.) Thực xoay phải hai nút P N ; đó, N nút trái P CuuDuongThanCong.com Spring 2017 P T3 N T1 N T1 T2 P T2 (a) trước xoay T3 (b) sau xoay Hình 3: Thao tác xoay phải https://fb.com/tailieudientucntt Data structure & Algorithm Thêm nút vào đỏ đen Sử dụng thuật toán thêm nhị phân tìm kiếm để thêm nút Nút thêm luôn màu đỏ Duyệt từ nút vừa thêm trở gốc để hiệu chỉnh cân lại CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Các tình xảy duyệt ngược Trường hợp 1: Nút xét N nút gốc có màu đỏ N T1 N T2 (a) trước hiệu chỉnh T1 T2 (b) sau hiệu chỉnh Hình 4: TH1 → Đổi màu nút N thành màu đen Dừng hiệu chỉnh CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 10 Các tình xảy duyệt ngược (cont.) Trường hợp 2: Nút xét N nút đỏ nút cha P nút đen CuuDuongThanCong.com Spring 2017 P T3 N T1 T2 Hình 5: TH2 → Dừng hiệu chỉnh https://fb.com/tailieudientucntt Data structure & Algorithm 11 Các tình xảy duyệt ngược (cont.) Trường hợp 3: Nút xét N nút đỏ nút cha P nút đỏ gốc P T3 N T1 P T2 T1 (a) trước hiệu chỉnh T3 N T2 (b) sau hiệu chỉnh Hình 6: TH3 → Đổi màu nút P thành đen Dừng hiệu chỉnh CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 12 Các tình xảy duyệt ngược (cont.) Trường hợp 4: Nút xét N nút đỏ nút cha P nút U nút đỏ G G U P T3 N T1 T4 T2 U P T5 T3 N T1 (a) trước xử lý T4 T5 T2 (b) sau xử lý Hình 7: TH4 → Đổi màu P U thành đen, đổi màu G thành đỏ Tiếp tục xét nút G CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 13 Các tình xảy duyệt ngược (cont.) Trường hợp 5: Nút xét N nút đỏ nút cha P , G T4 P T3 N T1 P T2 N T1 (a) trước xử lý G T2 T3 T4 (b) sau xử lý Hình 8: TH5 (T4 rỗng gốc nút đen) → Đổi màu P thành đen, G thành đỏ, xoay P G Dừng hiệu chỉnh CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 14 Các tình xảy duyệt ngược (cont.) Trường hợp 6: Nút xét N nút đỏ nút cha P , G T4 P T1 N N T2 P T3 T1 (a) trước xử lý G T2 T3 T4 (b) sau xử lý Hình 9: TH6 (T4 rỗng gốc nút đen) → Đổi màu N thành đen, G thành đỏ, xoay N P , xoay N G Dừng hiệu chỉnh CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 15 Các tình xảy duyệt ngược (cont.) Một số trường hợp lại đối xứng trường hợp xét Sinh viên liệt kê trường hợp CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 16 Các tình xảy duyệt ngược (cont.) Bài tập Sinh viên cho biết thay đổi sau xử lý Số nút đen Số nút đỏ Số lượng nút đen đường từ gốc đến nút Chiều cao CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 17 Minh họa thêm phần tử CuuDuongThanCong.com Spring 2017 11 11 7 14 15 14 15 8 (a) trước thêm (b) sau thêm Hình 10: Thêm nút https://fb.com/tailieudientucntt Data structure & Algorithm 18 Minh họa thêm phần tử (cont.) CuuDuongThanCong.com Spring 2017 11 11 14 15 14 15 (a) trước xử lý (b) sau xử lý Hình 11: Trường hợp https://fb.com/tailieudientucntt Data structure & Algorithm 19 Minh họa thêm phần tử (cont.) CuuDuongThanCong.com Spring 2017 11 7 14 15 11 (a) trước xử lý 14 15 (b) sau xử lý Hình 12: Trường hợp https://fb.com/tailieudientucntt Data structure & Algorithm 20 Xóa nút Sử dụng thuật tốn xóa phần tử nhị phân tìm kiếm để xóa phần tử đỏ đen Nếu nút bị xóa có màu đỏ khơng cần phải làm thêm Nếu nút bị xóa có màu đen cần phải điều chỉnh cân Mọi nút phải đỏ đen Nút gốc đen Nút cha nút không đỏ Mọi đường dẫn từ gốc đến nút-0 nút-1 có số lượng nút đen CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 21 Bài luyện tập Ví dụ Hãy xây dựng đỏ đen từ dãy {5,1, 4, 3, 2, 8, 9, 7, 16, 11, 12, 15} Xóa nút 8, 16 Thêm nút 6, 17 CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 22 Định lý chiều cao đỏ đen Định nghĩa Một số thuật ngữ cho đỏ đen Chiều cao (node height) nút x số nút đường dài từ nút x đến nút h(x) = max{CountNode(path(x, l))} l nút (1) Chiều cao đen (black node height) nút x số nút đen đường từ nút x đến nút CuuDuongThanCong.com Spring 2017 hb (x) = CountBlackNode(path(x, l)) l nút https://fb.com/tailieudientucntt Data structure & Algorithm (2) 23 Định lý chiều cao đỏ đen (cont.) Định lý 1 Chiều cao nhỏ hai lần chiều cao đen h ≤ 2hb Cây đỏ đen có n nút CuuDuongThanCong.com Spring 2017 h ≤ log2 (n + 1) https://fb.com/tailieudientucntt Data structure & Algorithm 24 Đánh giá đỏ đen Phân tích chi phí thực theo n (số lượng nút cây) tìm phần tử thêm phần tử xóa phần tử CuuDuongThanCong.com Spring 2017 xấu ? ? ? trung bình ? ? ? https://fb.com/tailieudientucntt Data structure & Algorithm tốt ? ? ? 25 ... Cây đỏ đen (cont.) CuuDuongThanCong.com Spring 2017 13 17 11 15 25 22 27 Hình 1: Cây đỏ đen https://fb.com/tailieudientucntt Data structure & Algorithm Cấu trúc liệu cho nút đỏ đen Cấu trúc liệu. . .Cây đỏ đen Định nghĩa Cây đỏ đen (red black tree) Rudolf Bayer phát minh nhị phân tìm kiếm có đặc điểm sau Mọi nút phải nút đỏ nút đen Nút gốc nút đen Nếu nút nút đỏ, phải nút đen Tất... tử đỏ đen Nếu nút bị xóa có màu đỏ khơng cần phải làm thêm Nếu nút bị xóa có màu đen cần phải điều chỉnh cân Mọi nút phải đỏ đen Nút gốc đen Nút cha nút không đỏ Mọi đường dẫn từ gốc đến nút-0