ĐỀ THI MÔN: Cấu trúc dữ liệu và giải thuật Lớp môn học: INT2203 7, 8, 9 Học kỳ I, Năm học 2011-2012
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Thờ i gian làm bài: 120 phút
Đề thi thi gồm 2 trang Sinh viên đượ c sử d d ụng tài liệu in (tuyệt đố i không sử d d ụng máy tính và không trao đổ i tài liệu) Câu 1. Cho bảng băm địa chỉ mở gi giải
quyết va chạm bằng phương pháp thăm dò bình phương, cỡ SIZE SIZE = 11. Từ bảng băm rỗng, sử dụng hàm băm chia lấy dư, hãy: a) (0.5đ) đưa lần lượ t các dữ liệu vớ i khoá: 14, 0, 24, 12 , 33 , 11 , 22, 3 vào bảng băm và đưa ra bảng băm kết quả. ồi sau đó xen vào dữ liệu vớ i khoá là 44 và đưa ra bảng b) (0.5đ) loại bỏ dữ liệu vớ i khoá là 14 r ồi băm kết quả. Đáp án. a) 0
12
24
14
33
22
0
1
2
3
4
5
0
12
24
44
33
22
0
1
2
3
4
5
3
6
7
11
8
9
10
b) 3
6
7
11
8
9
Câu 2. Cho một dãy đối tượ ng ng vớ i các giá tr ị ưu tiên là 14, 0, 28 , 12 , 20 , 11 , 22, 3
ỗ
ừng đối tượ
10
Cây b giống cây a. Câu 3.
a) (0.75đ) Hãy sắ p xế p mảng các số {55, 22, 3, 20, 11, 90, 13, 47, 68, 36} sử dụng sắ p xế p tr ộn (merge sort). Cần đưa ra kết quả thực hiện mỗi bướ c của thuật toán. b) (0.25đ) Một thuật toán sắ p xếp đượ c xem là ổn định, nếu tr ật tự của các phần tử có khoá bằng nhau trong mảng đầu vào và trong mảng k ết quả là như nhau. Thuật toán sắ p xế p tr ộn có ổn định hay không? Đáp án. a) 55, 22, 3, 20, 11, 90, 13, 47, 68, 36 55, 22, 3, 20, 11 | 90, 13, 47, 68, 36 55, 22 | 3, 20, 11 | 90, 13, 47, 68, 36 55 | 22 | 3, 20, 11 | 90, 13, 47, 68, 36
swap( A[ a] , A[ ( a+b) / 2] ) up <<- a + 1 down down <- b pi vot vot <- A[ a] whi l e up <= <= down down do whi l e up <= down down and A[ A[ up] <= pi vot do up++ whi l e up <= down and A[ A[ down] > pi vot do down— i f up < down t hen hen swap swap(( A[ up] , A[ dow down] ) swap swap(( A[ a] , A[ down] )
b) tốt nhất: O(nlogn), xấu nhất: O(n2), trung bình: O(nlogn) c) Chọn phần tử chính giữa làm chốt có tốt hơn vì ít bị ảnh hưở ng ng bở i dữ liệu đầu vào hơn. Cụ thể là tránh đượ c trườ ng ng hợp input đượ c sắ p. Câu 5. Theo bạn trong các cấu trúc dữ liệu liệt kê dưới đây, cấu trúc nào cài đặt hàng ưu tiên là
tốt nhất? Giải thích. a) (0.5đ) Danh sách đượ c sắ p b) (0.5đ) Danh sách chưa sắ p c) (0.5đ) Cây tìm kiếm nhị phân d) (0.5đ) Cây thứ tự bộ phận Đáp án. sắ p Danh sách đượ c sắ Danh sách chưa sắ p Cây tìm kiế kiếm nhị nhị phân Cây thứ thứ tự tự bộ bộ phậ phận
insert O(n) O(1) O(h) O(logn)
deleteMin O(1) O(n) O(h) O(logn)
findMin O(1) O(n) O(h) O(1)
Nhậ Nhận xét
tốt nhấ nhất
•
vớ i i > 0, j > 0:
Gọi m là chiều dài xâu a, n là chiều dài xâu b. Ô (m, n) sẽ lưu độ dài của dãy con chung dài nhất của 2 dãy chữ cái. Từ đây ta có thể xây dựng dãy con chung dài nhất của a và b như sau: Xuất phát từ ô i = m, j = n: Nếu a[i] = b[j], push a[i] vào stack, i--, j- Nếu a[i] ≠ b[j] nếu L(i,j) = L(i-1,j) thì i-nếu L(i,j) = L(i,j-1) thì j-Lặ p tớ i khi i = 0, j = 0. Dãy con dài nhất thu đượ c khi ta pop toàn bộ stack ra. c)
H U M A N
0 0 0 0 0 0
C 0 0 0 0 0 0
H 0 1 1 1 1 1
I 0 1 1 1 1 1
M 0 1 1 2 2 2
P 0 1 1 2 2 2
A 0 1 1 2 3 3
N 0 1 1 2 3 4
Z 0 1 1 2 3 4
E 0 1 1 2 3 4
E 0 1 1 2 3 4
/ / h à m hủy ~Ar r ayQueue( ueue( ) { del et e [ ] el ement ; el ement = NULL; LL ; cap capaci t y = 0; f = 0; r = 0; } voi voi d enqueue( i nt x) ; / / ham t hem x va vao cuo cuoi hang doi pr i vat e: i nt * el ement ; / / con con t r o t oi dau mang i nt cap capaci t y; / / ki ch t huoc t oi da cua cua mang i nt f ; / / chi chi so cua cua o dau hang doi i nt r ; / / chi chi so cua cua o l i en sau sau o cuo cuoi hang doi };
Đáp án. a) sr and( t i me( 0) ) ; cout cout << r and and( ) % ( N + 1) ;
b) Bổ sung hàm isFull kiểm tra hàng đợi đầy bool Ar r ayQueue: : i sFu sFul l ( ) { i nt si ze = ( cap capaci t y - f + r ) % cap capaci t y; r et ur n si ze == cap capaci t y - 1; }
/ / ham t hem x vao vao cuoi cuoi hang do doi voi voi d Ar Ar r ayQ ayQueue ueue:: : enq enqueu ueue(i nt x) { / / neu neu day day t hi phai phai noi noi mang ang + sao du du l i eu t u sang sang mang ang moi i f ( i s Ful l ( ) ) { i nt * t emp = new i nt [ cap capaci t y * 2 + 1] ; / / s ao ao. . . . . . . f or o r ( i nt i = f , j = 0; j < c apac i t y - 1; i = ( i + 1) % c apac i t y, y , j ++) t emp[ j ] = el ement [ i ] ; del ete[ ] el ement ent ; f = 0; r = c ap apac i t y - 1; el ement ent = t emp; cap capaci t y = cap capaci t y * 2 + 1; } el ement [ r ] = x; r = ( r + 1) % c apac i t y ; }
Trang 6