Professional Documents
Culture Documents
Rrgrhwaifef
Rrgrhwaifef
Xác định dựa vào ưu tiên và trạng thái, dữ liệu sẽ được chèn vào nút đỏ hay đen.
Nếu đã đầy ở nút hiện tại, dữ liệu sẽ được chuyển lên nút cha.
Cây sẽ duy trì sự cân bằng bằng cách luân chuyển dữ liệu xuống các nút con.
Những output này cho phép thực hiện các thao tác cơ bản trên cây đỏ đen như tìm kiếm, chèn,
xóa và truy xuất dữ liệu hiệu quả. Cây đỏ đen cũng duy trì sự cân bằng tốt sau các thao tác nhờ
các rotate và recolor.
Đặc biệt, output như tìm kiếm, chèn, xóa có độ phức tạp thời gian logarit cho phép cây đỏ đen
hoạt động hiệu quả cho các bài toán yêu cầu thao tác trên dữ liệu lớn.
2. Ví dụ :
<aside> 💡 Cây trong hình 0 là cây đỏ đen, trong đó các đỉnh tô đen là đỉnh đen, các đỉnh không
tô là đỉnh đỏ.
</aside>
<aside> 💡 Các đỉnh không đầy đủ là B, D, E, F, G, đường đi từ gốc tới các đỉnh này đều có số
đỉnh đen là 2.
</aside>
Hình 0. Một cây đỏ đen
3. Ứng dụng :
Cơ sở dữ liệu: Cây đỏ đen được sử dụng trong các hệ quản trị cơ sở dữ liệu quan hệ
(RDBMS) để lưu trữ dữ liệu. Ví dụ: SQL Server, MySQL, Oracle,… sử dụng cấu trúc dữ
liệu này.
Hệ điều hành: Cây đỏ đen được dùng trong các hệ điều hành để quản lý bộ nhớ. Ví dụ:
Linux sử dụng cấu trúc này để theo dõi các phân vùng bộ nhớ ảo.
Mã hóa dữ liệu: Cây đỏ đen thường được sử dụng trong các thuật toán mã hóa dữ liệu. Ví
dụ: thuật toán Huffman coding sử dụng cấu trúc cây đỏ đen.
Ứng dụng Web: Cây đỏ đen được sử dụng trong các ứng dụng web để lưu trữ dữ liệu có
cấu trúc phân cấp. Ví dụ: lưu danh mục sản phẩm trong website bán hàng.
AI: Cây đỏ đen được sử dụng trong một số thuật toán trí tuệ nhân tạo. Ví dụ: thuật toán
học máy Decision Tree sử dụng cấu trúc cây đỏ đen.
Cài đặt
// Huffman tree node
struct MinHeapNode {
if (root->data != '$')
cout << root->data << ": " << str << "\\n";
// The main function that builds a Huffman Tree and print codes by traversing
the built Huffman Tree
void HuffmanCodes(char data[], int freq[], int size)
{
struct MinHeapNode *left, *right, *top;
right = minHeap.top();
minHeap.pop();
top->left = left;
top->right = right;
minHeap.push(top);
}
Trong cây nhị phân một đỉnh được xem là đỉnh không đầy đủ, nếu nó có ít hơn 2 đỉnh con (tức
là nó là đỉnh lá hoặc chỉ có một đỉnh con trái hoặc con phải)
Định nghĩa 1:
<aside> 💡 Cây đỏ đen là cây tìm kiếm nhị phân (BST), các đỉnh của cây được sơn đỏ hoặc
đen và thỏa mãn các điều kiện sau:
</aside>
1. Luật đỏ: Nếu một đỉnh được sơn đỏ thì các đỉnh con (nếu có) của nó được sơn đen.
2. Luật đường: Mọi đường đi từ gốc tới đỉnh không đầy đủ có cùng số đỉnh đen.
Từ định nghĩa trên, suy ra một số tính chất sau đây của cây đỏ đen:
Mọi đường đi từ một đỉnh bất kỳ tới đỉnh không đầy đủ có cùng số đỉnh đen ⇒ cây con
của cây đỏ đen là cây đỏ đen.
Nếu một đỉnh không đầy đủ là lá thì nó có thể được sơn đỏ hoặc đen. Nhưng nếu một
đỉnh không đầy đủ có một con thì nó phải được sơn đen và con của nó phải được sơn đỏ.
Nếu một đỉnh được sơn đỏ thì các đỉnh con (nếu có) và đỉnh cha (nếu có) của nó phải
được sơn đen.
Định nghĩa 2:
<aside> 💡 Cây đỏ đen n đỉnh có độ cao lớn nhất là 2log(n+1).
</aside>
Số đỉnh đen trên đường đi từ đỉnh v, không kể đỉnh v, đến đỉnh không đầy đủ được gọi là độ cao
đen của đỉnh v và được ký hiệu là bh(v).
Chứng minh:
Trước hết ta chứng minh bằng quy nạp rằng, cây con gốc v chứa ít nhất $2^{bh(v)} - 1$
đỉnh.
Thật vậy, nếu v là đỉnh không đầy đủ, từ nhận xét sau định nghĩa cây đỏ đen ta có bh(v) =
0, và do đó $2^{bh(v)} – 1 = 2^0 - 1 = 0$.
Khẳng định đương nhiên được thoả mãn. Bây giờ giả sử v có đầy đủ cả hai con, u là đỉnh
con của v và khẳng định đã đúng cho cây con gốc u. Rõ ràng là, nếu u là đỉnh đỏ thì bh(u)
= bh(v), còn nếu u là đen thì bh(u) = bh(v) – 1.
Theo giả thiết quy nạp, cây con gốc v chứa ít nhất $2(2^{bh(u)} - 1) + 1$ đỉnh.
Thay bh(u) = bh(v) – 1, ta có cây con gốc v chứa ít nhất $2(2^{bh(v)-1} - 1) + 1 =
2^{bh(v)} - 1$ đỉnh. Mặt khác, từ luật đỏ ta suy ra rằng, có ít nhất một nửa số đỉnh trên
đường đi từ gốc tới đỉnh không đầy đủ là đen.
Do đó, nếu cây đỏ - đen có độ cao h thì độ cao đen của gốc ít nhất là h / 2.
Vậy nếu cây đỏ - đen có n đỉnh thì: n ≥ $2^{h/2}$ – 1 hay h ≤ 2log(n+1).
</aside>
Đây là một trong các tình huống vi phạm luật đỏ: đỉnh p là con trái của g.
Sau đây chúng ta sẽ xét từng tình huống mà luật đỏ bị vi phạm (đỉnh p đỏ và đỉnh con nó là
v cũng đỏ) và các phép biến đổi cây nhằm khôi phục lại luật đỏ đồng thời vẫn bảo tồn luật
đường.
Xét trường hợp đỉnh p là con trái của g. Khi p và v là hai đỉnh cha – con cùng
được sơn đỏ và p là con trái của g, chúng ta có ba mẫu biến đổi bằng các phép
quay và sơn lại nhằm làm cho cây con gốc g trở thành cây đỏ - đen.
Mẫu 1. Đỉnh g có con phải là đỉnh u được sơn đỏ. Trường hợp này ta chỉ cần sơn lại: sơn
p, u đen và sơn g đỏ ( xem hình 1 ).