JavaScript is required

Cho biết cây B-Tree bậc 3 là một cây thỏa mãn các tính chất sau:

  • Tất cả node lá nằm trên cùng một mức
  • Tất cả các node, trừ node gốc và node lá, có *tối thiểu* 2 node con.
  • Tất cả các node có *tối đa* 3 con
  • Tất cả các node, trừ node gốc, có từ 1 cho đến 2 khóa (keys)
  • Một node không phải lá và có n khóa thì phải có n+1 node con.

Hãy thực hiện các yêu cầu sau:

3.1 Cho dãy số: 12, 17, 20, 23, 15, 11, 24, 13, 19, 22, 18, 21, 16. Hỏi khi lần lượt thêm các số trong dãy theo thứ tự từ trái qua phải vào một cây B-Tree bậc 3 rỗng thì:

a. Các khóa nào khi thêm vào cây sẽ làm phát sinh thao tác tách (split) node? 

b. Vẽ cây B-Tree trước và sau khi thêm các khóa ở câu a.

3.2 Cho cây B-Tree bậc 3 như hình sau:

Hãy lần lượt tiến hành xóa các khóa sau khỏi cây: 13, 24, 19 và vẽ cây B-Tree trước và sau khi xóa mỗi khóa trên.

Lưu ý khi xoá:

- Khi khóa cần xóa (gọi là x) không nằm ở node lá, chọn khóa thế mạng là khóa có giá trị lớn nhất mà nhỏ hơn x.

- Thao tác nhường khoá (underflow) sẽ được thực hiện khi hai node liền kề có tổng số khóa >= 2. Khi có một node không còn đáp ứng đủ số lượng khóa tối thiểu, ưu tiên thực hiện underflow thay cho catenation (hợp) vì thao tác này không làm thay đổi số khóa của node cha.

- Khi có 02 lựa chọn node liền kể để thực hiện catenation, ưu tiên chọn catenation giữa node bị thiếu khóa với node liền trước.

Trả lời:

Đáp án đúng:


Câu hỏi này yêu cầu thực hiện các thao tác thêm và xóa trên cây B-Tree bậc 3. **Phần 3.1: Thêm các khóa vào cây B-Tree bậc 3 rỗng.** Một cây B-Tree bậc 3 có tối đa 3 con, nghĩa là mỗi nút có thể chứa tối đa 2 khóa. Ta sẽ lần lượt thêm các số: 12, 17, 20, 23, 15, 11, 24, 13, 19, 22, 18, 21, 16. 1. **Thêm 12:** Cây: [12] 2. **Thêm 17:** Cây: [12, 17] 3. **Thêm 20:** Nút [12, 17] đầy, thêm 20 thành [12, 17, 20]. Tách nút: 17 lên làm gốc. Cây: [17] với con trái [12] và con phải [20]. *(Khóa gây tách: 20)* 4. **Thêm 23:** Thêm vào nút [20]. Cây: [17], [12], [20, 23] 5. **Thêm 15:** Thêm vào nút [12]. Cây: [17], [12, 15], [20, 23] 6. **Thêm 11:** Thêm vào nút [12, 15] thành [11, 12, 15]. Tách nút: 12 lên làm cha. Cây: [12, 17], [11], [15], [20, 23]. *(Khóa gây tách: 11)* 7. **Thêm 24:** Thêm vào nút [20, 23] thành [20, 23, 24]. Tách nút: 23 lên làm cha. Cây: [12, 17, 23], [11], [15], [20], [24]. *(Khóa gây tách: 24)*. Nút gốc [12, 17, 23] đầy, tách nút: 17 lên làm gốc mới. Cây: [17], [12], [23], [11], [15], [20], [24]. *(Khóa gây tách: 23)* 8. **Thêm 13:** Thêm vào nút [15]. Cây: [17], [12], [23], [11], [13, 15], [20], [24]. 9. **Thêm 19:** Thêm vào nút [20]. Cây: [17], [12], [23], [11], [13, 15], [19, 20], [24]. 10. **Thêm 22:** Thêm vào nút [23]. Cây: [17], [12], [22, 23], [11], [13, 15], [19, 20], [24]. 11. **Thêm 18:** Thêm vào nút [19, 20] thành [18, 19, 20]. Tách nút: 19 lên làm cha. Cây: [17, 19], [12], [22, 23], [11], [13, 15], [18], [20], [24]. *(Khóa gây tách: 18)* 12. **Thêm 21:** Thêm vào nút [20]. Cây: [17, 19], [12], [22, 23], [11], [13, 15], [18], [20, 21], [24]. 13. **Thêm 16:** Thêm vào nút [13, 15] thành [13, 15, 16]. Tách nút: 15 lên làm cha. Cây: [15, 17, 19], [12], [22, 23], [11], [13], [16], [18], [20, 21], [24]. *(Khóa gây tách: 16)*. Nút gốc [15, 17, 19] đầy, tách nút: 17 lên làm gốc mới. Cây: [17], [15], [19], [12], [22, 23], [11], [13], [16], [18], [20, 21], [24]. *(Khóa gây tách: 16)*. **a. Các khóa làm phát sinh thao tác tách node:** 20, 11, 24, 23, 18, 16. **b. Cần vẽ lại cây tại mỗi bước có tách node.** **Phần 3.2: Xóa các khóa khỏi cây B-Tree bậc 3 cho trước.** **Cây B-Tree ban đầu:** * Gốc: [17, 25] * Cây con trái của 17: [10, 14] * Cây con giữa 17 và 25: [19, 22] * Cây con phải của 25: [28, 30] * Các nút lá con: [6, 8], [11, 12] (dưới [10, 14]); [18], [20, 21] (dưới [19, 22]); [27], [29] (dưới [28, 30]). **a. Xóa 13:** * Khóa 13 không có trong cây. Cây không thay đổi. * Cây trước khi xóa: Như cây ban đầu. * Cây sau khi xóa: Như cây ban đầu. **b. Xóa 24:** * Khóa 24 không có trong cây. Cây không thay đổi. * Cây trước khi xóa: Như cây ban đầu. * Cây sau khi xóa: Như cây ban đầu. **c. Xóa 19:** * 19 nằm ở gốc [17, 25]. * Tìm khóa thế mạng lớn nhất nhỏ hơn 19: là 18 (từ nút lá [18]). * Thay 19 bằng 18 ở gốc. Gốc: [17, 18, 25]. * Xóa 18 khỏi nút lá [18]. Nút này còn trống. * **Xử lý underflow:** Nút [18] trống. Node cha là [17, 18, 25]. Nút trống là con thứ 3. * Xét anh em bên trái: nút [20, 21] (con thứ 4 của 25). * **Nhường khóa:** Nút cha [17, 18, 25] nhường 18 xuống. Gốc thành [17, 25]. Khoá 18 đi xuống. * Nút trống [18] nhận 18, trở thành [18]. * **Nhường từ anh em:** Nút [20, 21] nhường 20 lên. Nút [20, 21] còn [21]. * Cha [17, 25] nhận 20 lên. Cha thành [17, 20, 25]. * **Cây sau khi xóa 19:** * Gốc: [17, 20, 25] * Cây con 17: [10, 14] * Cây con 20: [19, 22] * Cây con 20: [18] * Cây con 25: [21] * Cây con 25: [28, 30] * Các lá dưới [10, 14]: [6, 8], [11, 12] * Các lá dưới [19, 22]: [18] (nơi 18 bị xóa, giờ là nút lá) * Các lá dưới [28, 30]: [27], [29]. **Lưu ý quan trọng:** Với các thao tác vẽ cây, cần thể hiện rõ ràng cấu trúc của cây sau mỗi bước có thay đổi.

Đề thi cuối kỳ môn Cấu trúc dữ liệu và giải thuật của Trường Đại học Công nghệ Thông tin, Học kỳ 2, năm học 2021-2022. Nội dung bao gồm các câu hỏi về thuật toán Insertion Sort, cây nhị phân tìm kiếm, cây B-Tree, kỹ thuật băm và biểu diễn đồ thị cho bài toán đường đi ngắn nhất.


5 câu hỏi 90 phút

Câu hỏi liên quan