Bài tập Tuần 10 – Cây B Tree Bài 1 Thêm một dãy các số nguyên 10, 20, 30, 40, 50, 60, 70, 80, 90 vào một cây B Tree rỗng Với t=3, t là bậc tối thiểu Bài 2 Hiện thực cây B Tree, với Cây B Tree được địn[.]
Trang 1Bài tập Tuần 10 – Cây B-Tree
Bài 1
Thêm một dãy các số nguyên : 10, 20, 30, 40, 50, 60, 70, 80, 90 vào một cây B-Tree rỗng Với t=3, t là bậc tối thiểu
Bài 2
Hiện thực cây B-Tree, với Cây B-Tree được định nghĩa như sau:
struct BTreeNode {
BTreeNode **Child; // Dãy các con trỏ Child
}
// Tạo 1 node của cây B-Tree
BTreeNode * CreateNode( int _t , bool _leaf )
{
BTreeNode * pCurr = new BTreeNode ();
pCurr->t = _t ;
pCurr->leaf = _leaf ;
pCurr->keys = new int [2 * pCurr->t - 1];
pCurr->Child = new BTreeNode *[2 * pCurr->t];
pCurr->n = 0;
return pCurr;
}
Viết các hàm sau:
a) Duyệt cây B-Tree:
void BTree_Traverse( BTreeNode * root)
b) Tìm một khoá k trên cây B-Tree:
BTreeNode * BTree_Search( BTreeNode * root, int k)
c) Thêm một node có khoá k vào cây B-Tree:
void BTree_Insert( BTreeNode * root, int k)
Hướng dẫn:
Khi thêm nút vào cây B-Tree nếu tại một node bị đầy (node đó có số khoá lớn hơn 2t-1), thì phải tách node đó thành hai node
Thủ tục Tách (split) 1 node bị đầy:
Trang 2
x x
Bài 3 – Đồ thị
Thuật toán Prims – Tìm cây khung nhỏ nhất
• Cho G = (V, E) là một đồ thị liên thông có trọng số gồm n đỉnh
• Bước 1 Chọn tuỳ ý một đỉnh bất kỳ v ∈ V và khởi tạo: Y = {v} và T = Ø
• Bước 2 Trong số những cạnh e = (V,W), trong đó v ∈ Y và w ∈ V\Y, ta chọn cạnh có
độ dài nhỏ nhất
• Bước 3 Gán Y = Y ∪ {w} và T = T ∪ {e}
• Bước 4 Nếu T đủ n-1 phần tử thì dừng, ngược lại làm tiếp bước 2
• T chính là cây khung nhỏ nhất
Cho đồ thị như Hình 3.1 Hãy tìm cây khung nhỏ nhất _MST
Hình 3.1: Đồ thị G(V, E) có trọng số
Hướng dẫn
Các bước tìm cây khung MST theo thuật toán Prims:
Trang 3Cho G(V, E): V=6, E=9
visited[] = {0, 0, 0, 0, 0, 0}
PriorityQueue(Q) = {}
push tất cả các cạnh của đỉnh ‘1’ vào hàng đợi Đỉnh ‘1’ là visited _đã xét
.visited[] = {1, 0, 0, 0, 0, 0}
Q = {1 -> 3(4), 1 -> 5(5)}
Extract Min from Q, and go to that vertex
Min = 4, và ‘3’ là node kế tiếp được xét
.push tất cả các cạnh của đỉnh ‘3’ vào Queue Đỉnh ‘3’ đã visited
.visited[] = {1, 0, 1, 0, 0, 0}
Q = {1->5(5), 3->2(3), 3->4(2), 3->5(3), 3->1(4)}
Extract Min từ Q, và tới đỉnh kế tiếp là
Đỉnh ‘4’
Lặp lại các bước này cho đến khi các đỉnh của đồ thị G được duyệt hết, ta được cây khung nhỏ nhất như Hình 3.3
Hình 3.3: Cây khung nhỏ nhất của đồ thị G
a) Cài đặt thuật toán Prims để tìm cây khung nhỏ nhất MST (Minimum Spaning Tree)
============================ *** ============================