Đề thi cuối kỳ HK1/2009 Môn Cấu trúc dữ liệu và Giải thuật Thời gian 120 phút (Không sử dụng tài liệu) Ghi chú đề thi gồm tất cả 7 câu Sinh viên lớp KSTN làm hết 7 câu, thang điểm 11 (sẽ được chuyển t[.]
Trang 1Đề thi cuối kỳ HK1/2009 Môn: Cấu trúc dữ liệu và Giải thuật Thời gian: 120 phút (Không sử dụng tài liệu)
Ghi chú: đề thi gồm tất cả 7 câu Sinh viên lớp KSTN làm hết 7 câu, thang điểm 11 (sẽ được chuyển thành thang điểm 10 tương ứng) Sinh viên lớp thường làm 6 câu (từ câu 1 đến câu 6), thang diểm 10
Câu 1 (0.5 điểm):
Cho biết các giải thuật sau sẽ thực hiện tốt nhất và xấu nhất trong những trường hợp nào? Số lần so sánh trên khóa là bao nhiêu khi sắp xếp một danh sách có N phần tử trong những trường hợp đó?
straight insertion sort Danh sách đang có thứ tự C=N-1 Danh sách đang có thứ tự ngược C=N(N-1)/2 straight selection sort Trong bất kỳ trường hợp nào: C=N(N-1)/2
Câu 2 (1.5 điểm):
Cho danh sách sau {13, 27, 8, 3, 21, 17, 32}, hãy thực hiện từng bước quá trình sắp xếp danh sách trên bằng giải thuật sắp xếp cho trong hình vẽ
Số lần so sánh trên khóa và số lần đổi chỗ (swap) các phần tử là bao nhiêu?
algorithm sort
1 recursive_sort (0, count-1)
end sort
algorithm recursive_sort (val low <int>,
val high <int>)
1 if (low < high)
1 pivot_position = divide(low, high)
2 recursive_sort (low, pivot_position-1)
3 recursive_sort (pivot_position+1, high)
2 end if
end recursive_sort
algorithm divide (val low <int>, val high <int>)
1 pivot = data low //dùng phần tử đầu tiên làm pivot
2 last_small = low
3 idx = low+1
4 loop (idx<= high)
1 if (dataidx < pivot)
1 last_small = last_small+ 1
2 swap (last_small, idx)
2 end if
5 end loop
6 if (low != last_small)
1 swap(low, last_small) //chuyển pivot về vị trí “giữa”
7 end if
8 return last_small
end divide
s l n swap so sánh
Trường ĐH Bách Khoa Tp.HCM
Trang 2Câu 3 (4 điểm):
Dựa trên cấu trúc dữ liệu cây nhị phân tìm kiếm (BST) cho như hình bên cạnh, hãy
viết các phương thức bằng mã giả (pseudocode) làm các việc như sau:
a (1 diểm) Tìm giá trị lớn nhất và nhỏ nhất của cây Nếu cây đang rỗng thì
các giá trị này là không xác định (không cần quan tâm)
algorithm bst_min_max(ref min <datatype>, ref max <datatype>)
1 call bst_min_max_aux(root, min, max)
end bst_min_max
algorithm bst_min_max_aux(val subroot <pointer>, ref min <datatype>, ref max <datatype>)
1 if (subroot is not null)
1 p=subroot
2 loop (p->left is not null)
1 p=p->left
3 end loop
4 min=p->data
5 p=subroot
6 loop (p->right is not null)
1 p=p->right
7 end loop
8 max=p->data
2 end if
end bst_min_max_aux
b (1 điểm) Nhận vào một giá trị rồi chèn vào trong cây Nếu giá trị này đã có trong cây thì lần lượt
tăng giá trị này lên một rồi chèn vào trong cây cho đến khi nào chèn được thành công Giả sử rằng quá trình tăng giá trị đã nói không làm tràn số (overflow)
algorithm bst_insert_inc(val x <datatype>)
1 call bst_insert_inc_aux(root, x)
end bst_insert_inc
algorithm bst_insert_inc_aux(ref subroot <pointer>, val x <datatype>)
1 if (subroot is null)
1 allocate subroot
2 subroot->data = x
2 else if (subroot->data = x)
1 bst_insert_inc_aux(subroot->right, x+1)
3 else if (subroot->data > x)
1 bst_insert_inc_aux(subroot->left, x)
4 else
1 bst_insert_inc_aux(subroot->right, x)
5 end if
end bst_insert_inc_aux
BinTreeNode
data <int>
left, right <pointer>
end BinTreeNode BST
root <pointer>
end BST
Trang 3c (2 điểm) Nhận vào một BST rồi chèn vào cây hiện hành Việc chèn diễn ra theo nguyên tắc sau:
- Nếu cây nhập rỗng thì kết quả không thay đổi
- Nếu có thể gắn cây nhập thành một nhánh con của cây hiện hành (hoặc cây hiện hành rỗng) sao cho cây kết quả là một BST thì gắn chúng lại với nhau Cây nhập sẽ trở thành một phần của cây kết quả, root của cây nhập sẽ là NULL
- Nếu không gắn được như vậy thì kết quả không thay đổi
algorithm bst_insert_bst(ref tree <BST>)
1 if (tree.root is not null)
1 call bst_min_max(input_root, min, max)
2 call bst_insert_bst_aux(root, tree.root)
2 end if
end bst_insert_inc
algorithm bst_insert_bst_aux(ref subroot <pointer>, ref input_root <pointer>,
val min <datatype>, val max <datatype>)
1 if (subroot is null)
1 subroot = input_root
2 input_root = null
2 else if (subroot->data > max)
1 bst_insert_bst_aux(subroot->left, input_root, min, max)
4 else if (subroot->data < min)
1 bst_insert_bst_aux(subroot->right, input_root, min, max)
5 end if
end bst_insert_bst_aux
Câu 4 (1.5 điểm):
Cho một đồ thị như hình bên, thực hiện các việc
sau:
a Hãy cho biết một thứ tự topo của đồ thị này
(1) Breadth topo sort: A B E D F G C M H
K J
Hoặc (2) Depth topo sort: A E B D G M K F H J
C
b Hãy bỏ đi toàn bộ chiều của đường đi (để biến đồ thị
trên thành độ thị vô hướng) rồi tìm cây phủ tối thiểu của
đồ thị dùng giải thuật Prim
A
B
C
G
M
J
D
E
F
H
K
12
3
8
27
5 11
23
2
4
5
7
6
1
2
4
A
B
C
G
M
J
D
12
3
8 27
23
2
4
8
2
5
7
6
1
2
4
Trang 4Câu 5 (1.5 điểm):
Cho một bảng băm (hash table) như hình vẽ bên cạnh Hãy lần lượt thêm vào bảng băm này các khóa sau đây: 12, 8, 25, 13, 9 Ghi kết quả của bảng băm sau từng giá trị thêm vào
Biết rằng:
(1) Hàm băm (hash function) dùng một hàm sinh số ngẫu nhiên giả (pseudorandom)
h(x) = (ax + c) mod size, trong đó a=17, c=7, size=13
Ví dụ: key = 121267 => address = h(121267) = (17*121267 + 7) mod 13 = 6
(2) Phương pháp giải quyết đụng độ là phương pháp địa chỉ mở (open addressing) dùng cách dò tuyến tính (linear probing) Nghĩa là nếu tại ví trí cần thêm vào một phần tử đã có phần tử khác chiếm dụng, vị trí kế tiếp (address + 1) sẽ được xem xét
Trang 5Câu 6 (1 điểm):
Cho một danh sách số nguyên như sau (45,79,81,1,18,6,17,49,61,47) Hãy xây dựng cây B-tree bậc 3 (m=3) ứng với danh sách trên, giả sử các phần tử sẽ được lần lượt thêm vào cây rỗng ban đầu theo đúng thứ tự xuất
hiện trong danh sách Chú ý: chỉ cần trình bày các cây kết quả
Câu 7 (1 điểm): (Dành riêng cho lớp KSTN)
a Cho danh sách như trong câu 6 Hãy xây dựng cây B-tree bậc 5 (m=5) ứng với danh sách trên
b Cho biết cây kết quả khi xoá phần tử 18 ra khỏi các cây đã xây dựng ở câu 6 và câu 7a Biết rằng nếu phần
tử bị xoá nằm trên một nút trung gian, phần tử này sẽ được thay thế bằng phần tử có giá trị lớn nhất nằm trên cây con bên trái của nút này
Chú ý: chỉ cần trình bày các cây kết quả
- Hết -
45 61
45 61
49
17
79