Tải bản đầy đủ (.docx) (47 trang)

cấu trúc dữ liệu và giải thuật đề tài cây đỏ đen red black tree

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.66 MB, 47 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>HỌC VIỆN NGÂN HÀNG</b>

<b>KHOA HỆ THỐNG THÔNG TIN QUẢN LÝ</b>

<b>Học phần: Cấu Trúc Dữ Liệu Và Giải Thuật</b>

<i><b>ĐỀ TÀI:</b></i>

<b>CÂY ĐỎ ĐEN (RED BLACK TREE)Giảng viên hướng dẫn:Nguyễn Thị Giang Huyền</b>

<b>Sinh viên thực hiện: 24A4043246 - Trần Thị Sao Mai24A4043247 - Lê Mỹ Duyên</b>

<b>24A4043251 - Phạm Thị KhuyênLớp: J03HTA</b>

<b>Hà Nội, ngày 30 tháng 06 năm 2023</b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>DANH SÁCH THÀNH VIÊN NHÓM 3</b>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>LỜI CẢM ƠN</b>

Khơng có thành cơng nào mà khơng có sự hỗ trợ, dìu dắt dù ít hay nhiều, dù trực tiếp hay gián tiếp của mọi người xung quanh bởi đơn giản một bàn tay không thể vỗ thành tiếng. Với lịng biết ơn sâu sắc của mình, chúng em xin được gửi lời cảm ơn tới toàn bộ quý thầy cô đã đồng hành cùng chúng em cũng như các thành viên, thầy cô đã truyền đạt vốn tri thức q giá của mình bằng lịng nhiệt thành và tâm huyết nhất trong thời gian học tập vừa qua. Đặc biệt chúng em cũng xin cảm ơn Khoa hệ thống thông tin quản lý định hướng Nhật Bản đã cho chúng em có cơ hội được tiếp cận với môn học thật sự cần thiết và hữu ích, đó là mơn “Cấu trúc dữ liệu và giải thuật”. Chúng em xin được cảm ơn Cô Nguyễn Thị Giang Huyền đã luôn nhiệt huyết, tận tâm hướng dẫn, giải đáp những khúc mắc cho chúng em cũng như các bạn trong lớp, nếu khơng có những hướng dẫn chi tiết tận tình của cơ thì có lẽ chúng em cũng khơng thể hồn thành bài báo cáo này.

Trong q trình làm bài tập lớn khơng thể tránh được những thiếu sót, chúng em rất mong mình có thể nhận được những ý kiến đóng góp của cơ cũng như của các bạn trong lớp để ngày một hoàn thiện bản thân mình hơn.

Sau cùng chúng em xin kính chúc các thầy cơ trong khoa nói chung và Cơ Nguyễn Thị Giang Huyền nói riêng ln mạnh khỏe, hạnh phúc để có thể tiếp tục giảng dạy và công tác ở Học Viện, và truyền bá những kiến thức bổ ích cho chúng em cũng như là các thế hệ sau này.

Chúng em xin được cảm ơn.

Nhóm sinh viên thực hiện Nhóm 3

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<b>LỜI CAM ĐOAN</b>

Chúng em xin được cam đoan rằng, bài tiểu luận trên là cơng sức và chất xám của Nhóm 3 bỏ ra trong thời gian vừa qua. Việc một số mục có sự tham khảo về kiến thức nghiệp vụ chung là trung thực, chính xác. Chúng em xin được chịu trách nhiệm về lời cam đoan này cũng như đảm bảo tính liêm chính trong học thuật.

Nhóm sinh viên thực hiệnNhóm 3

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<b>4. M tột số đi m thú v (tham kh o)ểm thú vị (tham khảo)ịnh nghĩa và tính chấtảo) ... 4</b>

<i><b>PH N 2: CÁC THAO TÁC TRÊN CÂY Đ ĐENẦN I: GIỚI THIỆUỎ ĐEN...5</b></i>

<b>1. Phép tìm ki mếm ... 5</b>

<b>2. Phép quay... 5</b>

<b>3. Thao tác thêm node... 6</b>

<b>a, Các bước tiến hànhc ti n hànhếm... 6</b>

<b>b, Các trường hợp xảy ra nếu thêm nodeng h p x y ra n u thêm nodeợp xảy ra nếu thêm nodeảo)ếm... 6</b>

<b>4. Thao tác xóa node trên cây đ đenỏ đen... 13</b>

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<b>DANH MỤC HÌNH ẢNH</b>

Hình 2 . Một ví dụ về cây đỏ đen...1

Hình 3 . Trường hợp 3 node đen liền nhau...1

Hình 4 . Chiều cao đen...1

Hình 26 . Hai con của X (kể cả node NIL) đều là node đen...1

Hình 30 . S màu đen và con trái của S màu đỏ, con phải S màu đen...1

Hình 32 . S màu đỏ...1

Hình 33 . S màu đỏ...1

<small>1</small>

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<b>PHẦN I: GIỚI THIỆU1. Đặt vấn đề</b>

Cây tìm kiếm nhị phân là một cấu trúc lưu trữ dữ liệu tốt với tốc độ tìm kiếm nhanh. Tuy nhiên trong một số trường hợp cây tìm kiếm nhị phân có một số hạn chế.

Những node này tự sắp xếp thành một đường không phân nhánh.

Độ phức tạp: Khi cây một nhánh, sẽ trở thành một danh sách liên kết, dữ liệu sẽ là một chiều thay vì hai chiều. Trong trường hợp này, thời gian truy xuất giảm về O(N), thay vì O(log2N) đối với cây cân bằng.

Để đảm bảo thời gian truy xuất nhanh của cây, chúng ta cần phải bảo đảm cây ln ln cân bằng (ít ra cũng là cây gần cân bằng).

Từ đó cây nhị phân tự cân bằng ra đời và có 2 cây tự cân bằng ra đời là cây AVL và cây đỏ đen.

Cây AVL đã là BST tự cân bằng được phát minh vào năm 1962. Vậy thì tại sao năm 1972 lại phải tạo ra thêm cây đỏ đen (RBTree) làm gì nữa? Đúng là sự cân bằng của cây AVL thuộc dạng hoàn hảo khi chênh lệch về chiều cao của 2 cây con trái phải luôn luôn nhỏ hơn hoặc bằng 1. Tuy nhiên, khơng phải khi nào hồn hảo cũng tốt. Khi ta thêm rất nhiều Node vào cây thì sẽ khiến cây phải quay (cân bằng) liên tục. Cây có càng nhiều phần tử thì việc cân bằng lại cây sẽ càng mất công hơn. Cây đỏ đen sẽ khắc phục yếu điểm này.

<b>2. Định nghĩa và tính chất</b>

Cây đỏ đen là một cây nhị phân tìm kiếm (BST) tuân thủ các quy tắc sau: Mọi node phải là đỏ hoặc đen.

Node gốc và các nốt lá (NIL) phải ln ln đen.

Nếu một node là đỏ thì những node con của nó phải đen

 Cha node đỏ là đen; khơng thể có hai node đỏ cùng một lúc, nhưng 2 node đen cùng một lúc thì có

Mọi đường dẫn từ gốc đến một lá phải có cùng số lượng node đen - Chiều cao

quá hai lần đường đi ngắn nhất. Do đó cây đỏ đen là gần cân bằng.

<i><small>Hình 1. Các node được chèn theo thứ tự giảm dầnHình 1. Các node được chèn theo thứ tự giảm dần</small></i>

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

Khi chèn hay xóa một node mới, cần phải tuân thủ các quy tắc trên - quy tắc đỏ đen. Nếu được tuân thủ, cây sẽ được cân bằng.

<i><small>Hình 1. Một ví dụ về cây đỏ đen</small></i>

Trường hợp có 3 node đen liên tiếp:

<i><small>Hình 2. Trường hợp 3 node đen liền nhau</small></i>

Ở đây mình có một cây đỏ đen (nhìn khá cân bằng), có thể thấy từ node root đến node NULL đầu tiên có 3 node đen là 12, 10, null. Nhưng từ node root đến node NULL thứ ba thì chỉ có 2 node đen là 12 và null. Như vậy thì đã vi phạm quy tắc số 4. (Theo quy tắc số 4: Mọi đường dẫn từ một node đến bất kì node NULL (thuộc con của nó) thì đều có cùng số lượng node đen).

<small>3</small>

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

Vì vậy, khơng thể có 3 node đen liên tiếp. Vì thế số lượng node đen từ root đến tất cả các node NULL luôn luôn bằng nhau. Sự khác biệt giữa các đường đi là các node đỏ, tuy nhiên vẫn không đáng kể để ảnh hưởng đến sự cân bằng của cây.

<b>4. Một số điểm thú vị (tham khảo)</b>

<i><small>Hình 3. Chiều cao đen</small></i>

Chiều cao đen: là số lượng node đen từ root → NULL. Vì thế nếu cây đỏ đen có chiều cao là h thì có chiều cao đen >= h / 2.

Chiều cao cây đỏ đen có n node là h thì: h <= 2 * log2(n + 1).

Độ sâu đen của một node là số lượng node đen từ node đó → NULL. (Khá tương tự chiều cao đen).

Mỗi cây đỏ đen đều là một trường hợp đặc biệt của cây tìm kiếm nhị phân BST.

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<b>PHẦN 2: CÁC THAO TÁC TRÊN CÂY ĐỎ ĐEN1. Phép tìm kiếm</b>

Thực hiện tương tự như phép tìm kiếm trong cây nhị phân theo 2 cách: Đệ quyhoặc Không đệ quy.

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

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ó.

Phải đảm bảo trong phép quay phải, node ở đỉnh phải có node con trái. Nếu khơng chẳng có gì để quay vào điểm đỉnh. Tương tự, nếu làm phép quay trái, node ở đỉnh phải có node con phải.

<b>3. Thao tác thêm node a, Các bước tiến hành</b>

Việc thực hiện chèn một node N vào cây đỏ đen sẽ được thực hiện theo các bước sau đây:

B1: Gán màu của Node cần chèn là màu đỏ.

B2: Thực hiện chèn một node vào cây đỏ đen giống như thao tác chèn trên cây nhị phân tìm kiếm (nếu cây rỗng thêm N thì N là gốc, cây khác rỗng → kiểm tra xem lớn hay nhỏ hơn gốc: nhỏ → trái, lớn → phải).

B3: Điều chỉnh lại nếu thêm mới vi phạm các qui định của cây đỏ đen.

<b>Một số qui ước:</b>

<i><small>Hình 5. Sơ đồ phả hệ</small></i>

N: Node vừa được thêm vào cây. P: Node cha của N.

<i><small>Hình 4. Phép quay</small></i>

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

U: Node chú bác của N (node cùng cha với P). G: Node cha của nút P (node ông của P).

<b>b, Các trường hợp xảy ra nếu thêm node</b>

TH1: N được chèn vào vị trí node gốc của cây. N → N là gốc. Nếu N khơng là gốc thì: N có P. Khi đó dẫn đến TH2.

TH2: P là node đen, nếu P khơng đen thì dẫn đến TH3. TH3: Cả P và U đều đỏ.

TH4: P là node đỏ, U là node đen.

<i><small>Hình 6. Các trường hợp thêm node</small></i>

<b>TH1: N được chèn vào vị trí node gốc của cây</b>

Nút chèn là nút đỏ → vi phạm yêu cầu: nút gốc phải là nút đen → đổi màu nút N thành màu đen.

<i><small>Hình 7. Trường hợp N được chèn là node gốc</small></i>

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

<b>TH2: P là node đen</b>

<i><small>Hình 8. P là node đen</small></i>

→ Không vi phạm định nghĩa cây đỏ đen. → Không vi phạm tính chất của cây đỏ đen. → Không cần điều chỉnh.

<b>TH3: Cả P và U đều đỏ</b>

<i><small>Hình 9. Cả P và U đều đỏ</small></i>

→ Vi phạm yêu cầu: cha của nút đỏ phải là nút đen.

→ Chuyển P và U thành node đen (cả 2 con node đỏ phải là đen)

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

(đường đi của G và U chỉ có 1 đen → tăng 2 nút đen → dư 1 đen).

→ Chuyển G thành node đỏ

(có thể dẫn đến dây chuyền vi phạm → xét tiếp).

VD: Tạo cây đỏ đen từ dãy số sau: 50, 75, 25, 80, 100, 110, 105

<b>TH4: P là node đỏ, U là node đen </b>

P là con trái của G, N là con trái của P (Left - Left). P là con phải của G, N là con phải của P (Right - Right). P là con trái của G, N là con phải của P (Left - Right). P là con phải của G, N là con trái của P (Right - Left).

<i><small>Hình 10. Cả P và U đều đỏ</small></i>

<i><small>Hình 11. Minh họa thêm node</small></i>

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

<i><b>TH4.1. P là con trái của G, N là con trái của P (Left – Left ): P đỏ, U đen, P trái G, N trái P</b></i>

<i><small>Hình 12. Trường hợp Left–Left</small></i>

→ Vi phạm yêu cầu: cha nút đỏ phải là nút đen.→ Quay phải node G.

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

→ Đổi màu node G và P: P thành đen, G thành đỏ (đảm bảo chiều cao đen).

<i><b>TH4.2. P là con phải của G, N là con phải của P(Right - Right): P đỏ, U đen, P phảiG, N phải P</b></i>

<i><small>Hình 14. Trường hợp Right–Right</small></i>

→ Vi phạm yêu cầu: cha nút đỏ phải là nút đen. → Quay trái node G.

→ Đổi màu node G và P: P thành đen, G thành đỏ (đảm bảo chiều cao đen).

<i><small>Hình 13. Trường hợp Left–Left</small></i>

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

<i><small>Hình 15. Trường hợp Right–Right</small></i>

<i><b>TH4.3. P là con trái của G, N là con phải của P(Left - Right): P đỏ, U đen, P trái G,N phải P</b></i>

→ Vi phạm yêu cầu: cha nút đỏ phải là nút đen. → Quay trái node P.

<i><small>Hình 16. Trường hợp Left–Right</small></i>

→ Thực hiện như L - L. → Quay phải node G.

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

→ Đổi màu node G và N: N thành đen, G thành đỏ (đảm bảo chiều cao đen).

<i><b>TH4.4. P là con phải của G, N là con trái của P (Right - Left): P đỏ, U đen, P phảiG, N trái P </b></i>

<i><small>Hình 18. Trường hợp Right–Left</small></i>

→ Vi phạm yêu cầu: cha nút đỏ phải là nút đen.→ Quay phải node P.

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

<i><small>Hình 19. Trường hợp Right–Left</small></i>

→ Đổi màu node G và N: N thành đen, G thành đỏ (đảm bảo chiều cao đen).

<i><small>Hình 20. Trường hợp Right–Left</small></i>

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

VD: Tạo cây đỏ đen từ dãy số sau: 50, 75, 25, 80, 100, 110, 105 (tiếp tục với 100)

<b>4. Thao tác xóa node trên cây đỏ đena, Các bước tiến hành</b>

B1: Tìm kiếm node cần xóa, nếu khơng tìm thấy thì dừng. B2: Nếu tìm thấy, ta tiến hành xóa.

Node cần xóa là nút lá.

Node cần xóa là nút 1 con: Nối con trỏ trỏ vào nút cần xóa tới thẳng con của nút cần xóa.

Node cần xóa là nút 2 con (tìm node thay thế, thường là nút lớn nhất của con bên trái).

B3: Điều chỉnh lại nếu vi phạm các quy định của cây đỏ đen.

<b>b, Các TH có thể xảy ra nếu xóa node X của cây đỏ đenTH1: Node cần xóa X là node đỏ hoặc node gốc</b>

Việc xóa node X sẽ khơng ảnh hưởng tới đặc điểm và tính chất của cây đỏ đen nên khơng cần điều chỉnh.

<i><small>Hình 21. Minh họa thêm node</small></i>

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

Nếu xóa node bên phải thì duyệt đến khi node con bên trai là lá thì lấy lá thế chỗ cho node xóa.

<b>TH2: Node cần xóa X là node đen: </b>

<i><b>TH2.1. Node con của X là nút đỏ (có 1 con):</b></i>

Sau khi xóa X thì nối P với con của X (Y)

Điều chỉnh màu của node con của X thành màu đen

<i><b>TH2.2. Hai con của X (kể cả node NIL) đều là node đen:</b></i>

<i> Gọi S là node anh em của X: Có 4 trường hợp xảy ra:</i>

<i><small>Hình 22. Xóa node gốcHình 23. Xóa node đỏ</small></i>

<i><small>Hình 24. Node con của X là nút đỏ (có 1 con)</small></i>

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

S màu đen và con phải của S màu đỏ

<i><small>Hình 25. Hai con của X (kể cả node NIL) đều là node đen</small></i>

Tất cả các đường đi qua nút X sẽ bị ít hơn 1 nút đen → Y được gọi là nút 2 đen (đen kép)

<i><b>TH2 .2.1. S màu đen và 2 con của S màu đen: </b></i>

Để đảm bảo định nghĩa, tính chất của cây đỏ đen

<small>17</small>

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

Đổi nút S sang màu đỏ, Đổi nút P sang màu đen

<i><b>TH2 .2.2. S màu đen và con phải của S màu đỏ (con trái màu gì cũng được):</b></i>

<b>Quay trái tại P </b>

Sau đó tiến hành đảo màu của P và S: P màu gì S màu đó, Z đổi màu đen

<i><small>Hình 26. S đen và 2 con của S màu đen</small></i>

<i><small>Hình 27. S màu đen và con phải của S màu đỏ</small></i>

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

VD: Xóa node đỏ 80

<i><b>TH2 .2.3. S màu đen và con trái của S màu đỏ, con phải của S màu đen:</b></i>

Ta tiến hành quay phải tại S Đổi màu Z và S

<i><small>Hình 28. Minh họa xóa node</small></i>

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

<i><small>Hình 29. S màu đen và con trái của S màu đỏ, con phải S màu đen</small></i>

Sau khi đổi màu, trở lại trường hợp trước đó: S màu đen và con phải của S màu đỏ

Quay trái tại P và tiến hành đảo màu

<i><b>TH2 .2.4. S màu đỏ:</b></i>

Tiến hành quay trái tại P

<i><small>Hình 30. S màu đen và con trái của S màu đỏ, con phải S màu đen</small></i>

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

<i><small>Hình 31. S màu đỏ</small></i>

Đổi màu P sang đỏ, S sang đen:

<i><small>Hình 32. S màu đỏ</small></i>

Y vẫn là nút đen kép, tùy từng cấu trúc của cây xem xem nó rơi vào trường hợp nào trong các TH rồi tiến hành tương tự.

VD: Xóa node gốc

<small>21</small>

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

Khi xóa 50, tiến hành đổi chỗ 25 và 50

<i><small>Hình 33. Minh họa xóa node</small></i>

<i><small>Hình 34. Minh họa xóa node</small></i>

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">

<b>PHẦN 3: THUẬT TOÁN CÀI ĐẶT</b>

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">

Node* insertHelp(Node* root, int key) { // f đúng khi có xung đột RED RED

bool f = false; if (root == NULL) {

return new Node{ key, NULL, NULL, NULL, 1 }; // RED Node }

else if (key < root->data) {

root->left = insertHelp(root->left, key);

// *** Khi này (ll, lr, rr, rl = false) nên chưa xử lí liền // *** Sau khi thoát 1 vòng đệ quy thì: root = X->parent->parent

// *** Tức là Node ông, lúc này ta quay Node ông // Case 1 : Left left - Trái trái

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

if (ll) {

root = rotateRight(root);// Quay phải tại nút gốc root->color = 0; // Chuyển nút gốc thành Black

root->right->color = 1; // Đổi màu con phải nút gốc thành Red ll = false;

}

// Case 2 : Right right - Phải phải else if (rr) {

root = rotateLeft(root); // Quay phải tại nút gốc

root->color = 0; // Đổi màu nút gốc thành Black

root->left->color = 1; // Đổi màu bên trái nút gốc thành Red

root = rotateRight(root); // Quay phải nút gốc

root->color = 0; // Đổi màu nút gốc thành Black root->right->color = 1; // Đổi màu bên phải nút gốc

</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">

Node* current = root;

// Tìm kiếm Node có giá trị lớn nhất while (current->right != NULL)

</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="36">

cout << root->data << " (" << getColor(root) << ") " << "\n";

</div><span class="text_page_counter">Trang 37</span><div class="page_container" data-page="37">

Node* insertHelp(Node* root, int key) { // f đúng khi có xung đột RED RED

else if (key < root->data) {

root->left = insertHelp(root->left, key);

</div><span class="text_page_counter">Trang 38</span><div class="page_container" data-page="38">

// Case 1 : Left left - Trái trái

</div><span class="text_page_counter">Trang 39</span><div class="page_container" data-page="39">

Node* sib = sibling(root); Node* par = root->parent;

<small>33</small>

</div><span class="text_page_counter">Trang 41</span><div class="page_container" data-page="41">

Node* par = vDelete->parent; Node* sib = sibling(vDelete);

</div><span class="text_page_counter">Trang 42</span><div class="page_container" data-page="42">

if (vDelete->left == NULL || vDelete->right == NULL) {

Node* search(int val) { Node* temp = Root; while (temp != NULL) {

void Delete(int val) {

Node* vDelete = search(val);

</div><span class="text_page_counter">Trang 44</span><div class="page_container" data-page="44">

Kết quả:

<b>PHẦN 4: ỨNG DỤNG</b>

<i><small>Hình 36. Kết quả xóa node</small></i>

</div><span class="text_page_counter">Trang 45</span><div class="page_container" data-page="45">

<b>Một ứng dụng của cây đỏ đen – Red Black Tree:</b>

Hầu hết các chức năng của thư viện cây BST tự cân bằng trong C++ (hoặc TreeSet và TreeMap trong Java) đều sử dụng cấu trúc cây đỏ đen.

Lập lịch tiến trình CPU cho hệ điều hành Linux.

Áp dụng vào trong thuật toán phân cụm K-mean nhằm giảm độ phức tạp về thời gian.

Ngoài ra MySQL cũng sử dụng cây đỏ đen cho các chỉ mục trên bảng

<b>PHẦN 5: TỔNG KẾT</b>

<small>39</small>

</div><span class="text_page_counter">Trang 46</span><div class="page_container" data-page="46">

<b>Ưu điểm:</b>

Red Black Trees có độ phức tạp về thời gian được đảm bảo là O(log n) cho các thao tác cơ bản như chèn, xóa và tìm kiếm.

Cây Đỏ Đen tự cân bằng.

Cây Đỏ Đen có thể được sử dụng trong nhiều ứng dụng do hiệu suất hiệu quả và tính linh hoạt của chúng.

Cơ chế được sử dụng để duy trì sự cân bằng trong Cây Đỏ Đen tương đối đơn

</div><span class="text_page_counter">Trang 47</span><div class="page_container" data-page="47">

<b>TÀI LIỆU THAM KHẢO</b>

</div>

×