Ngoài điểm Macneils ...
Cây đỏ đen có thể hữu ích trực tiếp hơn vì có những hoạt động hiệu quả hữu ích không được hỗ trợ rộng rãi trong việc triển khai thư viện tiêu chuẩn như C ++ std::map
(ít nhất là AFAIK). Cây đỏ đen có thể hỗ trợ "tách" (cắt một cây thành hai, một cây chứa các khóa nhỏ hơn một khóa được chỉ định và một khóa chứa khóa lớn hơn) và "nối" (ngược lại, kết hợp một cây các phím lớn với một cây nhỏ cả hai khóa đều có thể được thực hiện trong thời gian O (log n), nhưng nếu chúng được hỗ trợ trong các thư viện container tiêu chuẩn, thì nó dường như là một điều được giấu kín.
Tuy nhiên, cấu trúc dữ liệu "tăng cường" là phổ biến. Một ví dụ đơn giản là thêm thông tin kích thước của cây con vào các nút trong hầu hết mọi cấu trúc dữ liệu cây để hỗ trợ đăng ký O (log n). Ví dụ phức tạp hơn bao gồm cây khoảng.
Khi bạn có ý tưởng tăng cấu trúc dữ liệu, có rất nhiều biến thể có thể hữu ích cho các ứng dụng cụ thể - và rất ít có sẵn được đóng gói sẵn dưới dạng thư viện. Các cấu trúc dữ liệu thư viện chuẩn hiện tại (ví dụ như std::map
) không thể được tăng cường sao chép mã nguồn và sửa đổi trực tiếp - bạn không thể tăng chúng bằng các tham số mẫu.
Tất nhiên để phát triển cấu trúc dữ liệu tăng cường, bạn cần hiểu cấu trúc dữ liệu không tăng cường cơ bản.
Cây AVL có thể nhanh hơn cây đỏ đen nếu bạn thực hiện nhiều tìm kiếm hơn chèn / xóa (và với điều kiện bạn không cần các thao tác tách / nối đó), vì vậy tùy thuộc vào ứng dụng, chúng có thể là cơ sở rất tốt cho gia tăng.