TRƯỜNG ĐẠI HỌC BÁCH KHOA TP Sinh viên PHẢI nộp lại đề thi MSSV Họ tên Đề 0001 Trang 1/4 15 20 Đại học Quốc Gia TP Hồ Chí Minh Trường đại học Bách Khoa Khoa Khoa học & Kỹ thuật Máy tính Bộ môn Khoa học[.]
Trang 115
20
Đại học Quốc Gia TP Hồ Chí Minh
Trường đại học Bách Khoa
Khoa: Khoa học & Kỹ thuật Máy tính
Bộ môn: Khoa học Máy tính
ĐỀ THI CUỐI HỌC KỲ 1
Năm học: 2012 – 2013
Môn: Cấu trúc dữ liệu & Giải thuật
MSMH: 503001 Ngày thi: 04/01/2013 - Thời gian: 110 phút
(Được sử dụng tài liệu)
Mã đề thi: 0001
PHẦN I: TRẮC NGHIỆM (2.0 điểm) (để được trọn 2 điểm sinh viên chỉ cần làm đúng 6 câu) 1) Cho cây nhị phân có các nút A, B, C, D,
E, F, G Duyệt tiền thứ tự (PreOrder) một
cây nhị phân ta có ABCDEFG Khi duyệt
theo trung thứ tự (InOrder), kết quả có thể
là
A CABDEFG B.ABCDEFG
C.DACEFBG D.ADCFEG
2) Biết rằng duyệt tiền thứ tự và duyệt hậu
thứ tự một cây nhị phân cho kết quả ngược
nhau (Ví dụ, duyệt tiền thứ tự là ABCD,
duyệt hậu thứ tự là DCBA), nhận định nào
sau đây đúng
A Cây nhị phân hoặc là rỗng hoặc chỉ có một
nút
B Bất cứ nút nào cũng không có cây con bên
trái
C Cây có chiều cao đúng bằng tổng số nút
D Bất cứ nút nào cũng không có cây con bên
phải
3) Cho cây AVL như sau:
Khi chèn thêm nút có giá trị 19, cần phải
A Thực hiện phép quay đơn về bên trái
B Thực hiện phép quay kép
C Thực hiện phép quay đơn về bên phải
D Không cần thực phép quay
4)Cho đồ thị có hướng G = (V, E) với
V={V 1 ,V 2 ,V 3 ,V 4 ,V 5 ,V 6 ,V 7 } và E={<V 1 ,V 2 >,
<V 1 ,V 3 >,<V 1 ,V 4 >,<V 2 ,V 5 >,<V 3 ,V 5 >,
<V 3 ,V 6 >,<V 4 ,V 6 >, <V 5 ,V 7 >, <V 6 ,V 7 > }, thứ
tự Topo của đồ thị này là
A.V1,V3,V4,V6,V2,V5,V7 B.V1,V3,V2,V6,V4,V5,V7
C.V1,V3,V4,V5,V2,V6,V7 D.V1,V2,V5,V3,V4,V6,V7
5) Giải thuật nào dưới đây có độ phức tạp
không gian lớn nhất:
A Nổi bọt (bubble sort)
B Quick sort
C Heap sort
D Shell sort
6) Giả sử ta muốn sắp xếp dãy số theo thứ tự tăng dần Trong trường hợp dãy số đầu vào đã
có thứ tự tăng dần thì giải thuật chọn trực tiếp (Straight Selection Sort) có độ phức tạp là:
A O(n) B O(nlog2n)
C O(n2) D O(n1.25)
7) Giả sử ta muốn sắp xếp dãy số theo thứ tự tăng dần Trong trường hợp dãy số đầu vào đã
có thứ tự tăng dần thì giải thuật nào sau đây có
độ phức tạp là O(n)
A Chèn trực tiếp (Straight Insertion)
B Chọn trực tiếp (Straight Selection)
C Nổi bọt D.A và C
8) Giả sử ta dùng mảng để biểu diễn heap,
hãy cho biết trong những dãy số dưới đây, dãy nào KHÔNG phải là biểu diễn của heap:
A 100, 85, 98, 77, 80, 60, 82, 40, 20, 10, 66
B 100, 98, 85, 82, 80, 77, 66, 60, 40, 20, 10
C 100, 85, 40, 77, 80, 60, 66, 98, 82, 10, 20
D 10, 20, 40, 60, 66, 77, 80, 82, 85, 98, 100
Trang 29) Nhận định nào dưới đây về heap KHÔNG
ĐÚNG
A Heap nhị phân là cây cân bằng
B d-heap thích hợp cho những ứng dụng
mà số lượng thao tác chèn phần tử vào
heap lớn hơn nhiều so với số lượng thao
tác xóa
C Heap nhị phân là cây nhị phân đầy đủ
hoặc gần đầy đủ
D Trong max-heap với n phần tử (n >= 2),
phần tử nhỏ nhất sẽ nằm ở nút lá
10) Để nâng cao hiệu quả tìm kiếm đối với
bảng hash, có thể sử dụng những biện pháp sau
a) Tăng hệ số tải (load factor) b) Thiết kế hàm hash sao cho giảm xung đột c) Khi xử lý xung đột cần phải tránh hiện tượng gom cụm
A chỉ a) đúng
B chỉ b) đúng
C chỉ a) và b) đúng
D chỉ b) và c) đúng
PHẦN II: ĐIỀN CHỖ TRỐNG (4.0 điểm)
1) Tiến hành đánh số cho các nút của một cây nhị phân đầy đủ theo thứ tự từ trên xuống từ trái qua phải, con bên trái của nút thứ i sẽ là nút , nút cha của nút thứ i sẽ là nút 2) Một cây nhị phân có 2000 nút, chiều cao của cây ít nhất bằng
3) Cho cây AVL như hình vẽ
Hãy vẽ cây AVL này sau khi chèn thêm nút có giá trị bằng 17 (chỉ cần vẽ kết quả cuối cùng, không cần vẽ các bước trung gian)
4) Cho cây AVL như hình vẽ:
Hãy vẽ cây AVL này sau khi xóa nút có giá trị bằng 19 (chỉ cần vẽ kết quả cuối cùng, không cần vẽ các bước trung gian)
5) Cho đồ thị như hình vẽ sau:
a) Bắt đầu từ đỉnh A, kết quả duyệt đồ thị theo chiều sâu là _ b) Bắt đầu từ đỉnh E, kết quả duyệt đồ thị theo chiều rộng là _
6
3 19
2 4 13 22
12 15
15
6 30
3 12 19
2 4
1
A
B
C
D
E
6 4
3
5
3
1
|_log 2 n_|+1
ABGFDEC EACFBDG
Trang 3c) Sử dụng giải thuật Prim để tìm cây phủ tối thiểu, giả sử bắt đầu từ đỉnh A, hãy vẽ cây phủ tối thiểu
Lưu ý: trong trường hợp nhiều đỉnh có thể được chọn, các đỉnh sẽ được đưa vào Stack (hoặc Queue) theo thứ tự trong bảng chữ cái
6) Cho dãy các từ khóa B = {12, 23, 45, 57, 20, 3, 78, 31, 15, 36}, giả sử bảng hash có không gian địa chỉ là H[0 12], hàm hash H(key)= key % 13, đồng thời sử dụng phương pháp thăm dò tuyến tính (linear probing) để giải quyết xung đột Hãy vẽ bảng hash
7) Cho một bảng hash như hình vẽ dưới :
35 20 33 48 59
0 1 2 3 4 5 6 7 8 9 10 11 12
Biết rằng hàm hash H(key)= key % 13, xử lý xung đột bằng phương pháp hash kép (double hashing) với HP(k, i) = (H(k) + iH1(k)) % 13 với H1(k) = (k%11) + 1, hãy cho biết khi tìm kiếm các từ khóa 35, 20, 33 và 48 cần phải sử dụng đến hàm HP lần lượt bao nhiêu lần
8) Giả sử ta biểu diễn max-heap dưới dạng dãy, hiện tại ta có max-heap (36, 23, 31, 19, 20, 3, 2, 6,
13, 12) Hãy cho biết max-heap này sau khi chèn thêm vào max-heap phần tử có giá trị 30
9) Giả sử ta biểu diễn max-heap dưới dạng dãy, hiện tại ta có max-heap (36, 23, 31, 19, 20, 3, 2, 6,
13, 12) Hãy viết max-heap này dưới dạng dãy sau khi bỏ phần tử lớn nhất
10) Xây dựng cây B-tree tương ứng với dãy số (36, 23, 31, 19, 20, 3, 2, 6, 13, 12), với số bậc là 3 Giả sử thứ tự các phần tử được đưa vào cây tương ứng với thứ tự trên dãy
11) Cho biết kết quả cây B-Tree sau khi xóa phần tử 20 ra khỏi cây B-Tree tương ứng với dãy số (36, 23, 31, 19, 20, 3, 2, 6, 13, 12), với số bậc là 3
PHẦN III: ĐỌC HIỂU GIẢI THUẬT (1 điểm)
1) Nút trong một cây nhị phân được định nghĩa như sau:
struct node {
char data;
node* lchild, *rchild;
};
Cho giải thuật sau:
void f31(BinTree* T)
{
InitStack(S); //S là một ngăn xếp
while (T || !StackEmpty(S){
while (T){
Push(S,T); T=T->lchild; }
if (!StackEmpty(S)) {
T=Pop(S); printf(“%c”,T->data); T=T->rchild;
}
12 23
45
57 20 3
3 2 1 1
36 30 31 19 23 3 2 6 13 12 20
31 23 12 19 20 3 2 6 13
CBEDFAGH
Trang 4Class heap private:
data: array<element’stype>
count: int protected:
reHeapUp(position) reHeapDown(position, lastPosition) public:
insertHeap(element) deleteHeap()
End class
}
}
Biết rằng T chỉ vào gốc của một cây nhị phân như hình vẽ bên
Hãy cho biết kết quả xuất ra màn hình của lời gọi hàm f31(T)
PHẦN IV: THIẾT KẾ GIẢI THUẬT (3 điểm)
1) Trong một class heap (dùng để hiện thực một min-heap được định nghĩa như bên dưới), hãy
hiện thực hàm remove(int d) dùng để xóa một phần tử có giá trị là d, và kết quả trả về vẫn là
một cấu trúc cây thỏa mãn tính chất của min-heap
2) (Dành cho lớp thường) Cho một ma trận liền kề M (nxn) biểu diễn một đồ thị có hướng G Hãy hiện thực hàm isCyclic(int ** M) dùng để xác định đồ thị G có chứa chu trình không
Lưu ý: điểm thưởng cho sinh viên đề xuất giải pháp có độ phức tạp trong trường hợp xấu nhất
tối đa là O(n) (sinh viên cần chứng minh điều này)
Phần dành cho lớp KSTN:
1) Hãy hiện thực hàm sau đây để trả về phần tử trung vị (median) của dãy được nhập vào ở thông
số
//arr: dãy nhập vào, không số thứ tự, cũng không phải là một heap
//num: số phần tử trong dãy
int median(int* arr, int num){
//Viết code ở đây }
Yêu cầu: sử dụng heap để hiện thực giải thuật Tự viết lại tất cả các code liên quan đến heap
2) Cho một đồ thị vô hướng Hãy hiện thực hàm sau để trả về số thành phần liên thông trong đồ thị Sinh viên có thể tuỳ chọn cách biểu diễn đồ thị: dạng ma trận kề hay danh sách kề Tất cả các hàm cơ bản trên đồ thị (như trong bài giảng), sinh viên xem như đã được hiện thực trước //graph: là graph đưa vào
int countDisjointComp(UDGraph* &graph){
//Viết code ở đây }
- HẾT -