Câu trả lời này kết hợp một số ý kiến của tôi cho câu hỏi và mở rộng chúng.
Hoạt động phụ trên cây đỏ đen có thể được thực hiện trong trường hợp xấu nhất (log n), trong đó n là số phần tử trong cây gốc. Vì cây kết quả sẽ chia sẻ một số nút với cây ban đầu, cách tiếp cận này chỉ phù hợp nếu cây không thay đổi (hoặc cây có thể thay đổi nhưng cây ban đầu không còn cần thiết nữa).
Đầu tiên lưu ý rằng hoạt động phụ có thể được thực hiện bằng hai hoạt động phân chia. Ở đây, phép toán tách lấy một cây T đen đỏ và một khóa x và tạo ra hai cây L và R sao cho L bao gồm tất cả các phần tử của T nhỏ hơn x và R các phần tử của T lớn hơn x. Do đó, mục tiêu của chúng tôi bây giờ là triển khai thao tác phân tách trên các cây đỏ đen trong trường hợp xấu nhất (log n).
Làm thế nào để chúng ta thực hiện thao tác tách trên cây đỏ đen trong thời gian O (log n)? Chà, hóa ra là có một phương pháp nổi tiếng. (Tôi không biết điều đó, nhưng tôi không phải là chuyên gia về cấu trúc dữ liệu.) Hãy xem xét hoạt động nối , lấy hai cây L và R sao cho mọi giá trị trong L nhỏ hơn mọi giá trị trong R và tạo ra một cây bao gồm tất cả các giá trị trong L và R. Hoạt động nối có thể được thực hiện trong trường hợp xấu nhất O (| r L r R | +1), trong đó r L và r Rlần lượt là các cấp bậc của L và R (nghĩa là số lượng nút đen trên đường dẫn từ gốc đến từng lá). Hoạt động phân tách có thể được thực hiện bằng cách sử dụng thao tác nối O (log n) lần và tổng thời gian trong trường hợp xấu nhất vẫn là O (log n) bằng cách xem xét tổng số kính thiên văn.
Phần 4.1 và 4.2 của một cuốn sách [Tar83] của Tarjan mô tả cách thực hiện phép nối và phép chia trên các cây đỏ đen trong trường hợp xấu nhất O (log n). Những triển khai này phá hủy cây gốc, nhưng thật dễ dàng để chuyển đổi chúng thành các triển khai chức năng bất biến bằng cách sao chép các nút thay vì sửa đổi chúng.
Là một lưu ý phụ, các mô-đun Set và Map của Objective Caml cung cấp hoạt động phân tách cũng như các hoạt động tiêu chuẩn khác trên các cây tìm kiếm nhị phân cân bằng (không thay đổi). Mặc dù họ không sử dụng cây đỏ-đen (họ sử dụng cây tìm kiếm nhị phân cân bằng với ràng buộc là chiều cao bên trái và chiều cao bên phải khác nhau nhiều nhất là 2), nhưng nhìn vào việc triển khai của chúng cũng có thể hữu ích. Đây là việc thực hiện mô-đun Set .
Người giới thiệu
[Tar83] Robert Endre Tarjan. Cấu trúc dữ liệu và thuật toán mạng . Tập 44 của Chuỗi hội nghị khu vực CBMS-NSF về Toán ứng dụng , SIAM, 1983.