Đề thi cuối kỳ học kỳ 2 Cấu trúc dữ liệu và giải thuật | Trường Đại học CNTT Thành Phố Hồ Chí Minh

Đề thi cuối kỳ học kỳ 2 Cấu trúc dữ liệu và giải thuật | Trường Đại học CNTT Thành Phố Hồ Chí Minh được sưu tầm và soạn thảo dưới dạng file PDF để gửi tới các bạn sinh viên cùng tham khảo, ôn tập đầy đủ kiến thức, chuẩn bị cho các buổi học thật tốt. Mời bạn đọc đón xem!

MSSV:............................ Đề thi gm 1 trang.
TRƯNG ĐẠI HCNG NGH THÔNG TIN
KHOA KHOA H C MÁY TÍNH
ĐỀ THI CUI K
HC K 2 – N M H C 2019 – 2020 Ă
Môn thi: C u trúc d u và gi i thu t li
Mã l p: Các l p IT003 - H i trà, ch t l ng cao đạ ượ
Thi gian làm bài: 90 phút.
(Sinh viên không c s d ng tài li u) đượ
Câu 1: (2 đim)
a. Hãy trình bày các bước a c tic gii thu t s p x p c n trế h ếp (Selection Sort) để
sp x p m nguyên giế t dãy s m dn . (không viết hàm) (1 đim)
Đáp án tham kh o và Thang đi m đề ngh :
Bước 1: Khi gán i = 0; // v trí t b đầu dãy n t N ph
0.25 đim
Bước 2: Tìm phn t a[max] ln nht trong dãy s
hin hành t n a[N] a[i] đế
0.25 đim
Bước 3 : Đổi ch a[max] và a[i]
0.25 đim
Bước 4 : Nếu i < N 1 thì -
{ i=i+1;
Lp li Bước 2; }
Ngược li: D i thung gi t.
0.25 đim
b. Cho dãy s nguyên A như sau: 2, 5, 4, 7 t dãy s, 3, 9, 1, 8. Hãy cho biế A s
bi giến nào qua ng bđổi nh thư ế t ước theo i thu t câu 1.a khi p x p dãy ss ế
A gim dn. (1 đim)
Đáp án tham kh o và Thang đi m đề ngh :
Dãy s ban u : đầ
2
5
4
3
1
- Ln l p 1 và dãy s n 0.125 biế đổi: đim
9
5
4
3
1
- Ln l p 2 và dãy s n 0.125 biế đổi: đim
9
8
4
3
1
- Ln l p 3 và dãy s n 0.125 biế đổi: đim
9
8
7
3
1
- Ln l p 4 và dãy n 0.125 s biế đổi: đim
9
8
7
3
1
- Ln l p 5 và dãy s n 0.125 biế đổi: đim
9
8
7
4
1
- Ln l p 6 và dãy s n 0.125 biế đổi: đim
9
8
7
4
1
MSSV:............................ Đề thi gm 1 trang.
- Ln l p 7 và dãy s n 0.125 biế đổi: đim
9
8
7
4
2
- Kết thúc gi i thu t, tr i dãy s t qu : 0.125 l kế đim
9
8
7
4
2
Câu 2: (4 đim) Cho dãy ký t như sau: F, D, H, B, A, G, C, E, I
Hãy thc hin các yêu cu : sau
a. V cây nh phân tìm ki ng cách thêm l n l ng k tếm b ượt t ý vào cây theo th
t t trái qua ph i c a dãy k tý trên, bi t rế ng giá tr c a t ng k tý tương ng
theo th t hi trong t t xu n ca k tý đin t(th Alphabet) (1 đim)
Đáp án :
Thang đim đề ngh :
- V cây chính xác : 1 đim
- V sai 1 nút trên cây : 0 đim
b. duy Cho biết k t qế u t cây theo th : t RNL và NRL. (1 đim)
Đáp án và Thang đi m đ ngh :
- Duyt cây RNL : I,H,G,F,E,D,C,B,A (0.5 đim)
- Duyt cây NRL : F,H,I,G,D,E,B,C,A (0.5 đim)
c. Hu l t : v l n l ng nútượt t theo th D, E, F, H. Mi ln hu 1 nút hãy i cây.
(1 đim)
Đáp án tham kho :
- Xoá nút D :
MSSV:............................ Đề thi gm 1 trang.
- Xoá nút E :
- Xoá nút F :
- Xoá nút H :
Thang đim đề ngh :
- Thc hin Xoá chính xác mt nút : 0.25 đim / 1 nút
MSSV:............................ Đề thi gm 1 trang.
- Trường h p SV không xoá l n l u c ượt theo yêu c a cây k a đề, ch v ết q
cu úngi cùng sau khi xoá c t q 4 nút kế a cây v đ , nhưng không
gii thích vì sao có t q : trđược kế a 50% s đim ca câu.
d. ng Viết hàm đếm s lượ nút lá trên cây . (1 đim)
Đáp án tham kh o và Thang đi m đề ngh :
int DEMLA(Tree T)
{ if (T==NULL)
return 0;
0.25 đim
if (T- ->Left==NULL && T >Right==NULL)
return 1;
0.25 đim
else
return DEMLA(T->Left) + DEMLA(T->Right);
}
0.5 đim
Câu 3: (2 đim) Cho cu trúc d liu l u trư tng tin nhân s như sau:
typedef struct Thongtin
{ int maso; // mã s nhân s
// char hoten[100] ; h tên nhân s
int thamnien; // s năm thâm niên công tác
float hesoluong ; // h s lương
}Nhansu;
Da tn mt trong các thut toán sp xếp và tìm kiếm,y th c hi n yêu cu sau:
a. Viết m s theo p x p m ng NS g nhân sế m N thâm nnng tác gim dn
(1 đim)
Đáp án tham kh o và Thang đi m đề ngh :
- s d SV có th ng b p x p nào ng khi vit k gii thu t s ế để áp d ết hàm.
- n p . Đáp án tham kho gii thu t ch trc tiế và thang đim đề ngh
void Sapxep_Thamnien (Nhansu NS[], int N)
{ int i, j, max_idx;
for (i = 0; i < N-1; i++)
{
0.25 đim
max_idx = i;
for (j = i+1; j < N; j++)
0.25 đim
if (NS[j].thamnien > NS[max_idx].thamnien)
max_idx = j;
0.25 đim
swap(&NS[max_idx], &NS[i]);
}
}
0.25 đim
void *yp) swap(Nhansu *xp, Nhansu
{
MSSV:............................ Đề thi gm 1 trang.
Nhansu temp = *xp;
*xp = *yp;
*yp = temp;
}
b. Viết m để m xem trong m ng NS g nhân st m m N nhâ n s nào
s bng hay không. N u tìm th y tr g tr 1, ng giá trX ế v ược li tr v 0 (1
đim)
Đáp án tham kh o và Thang đi m đề ngh :
- s d m SV có th ng bt k gii thu t tìm ki ế nào ng khi viđể áp d ết hàm.
- m m . Đáp án tham kho gii thu t tì kiế tuyến tính và thang đim đề ngh
int Tim_Nhansu (Nhansu NS[], int N, int X)
{ int i;
0.25 đim
for(i=0; i<N; i=i+1)
0.25 đim
if (NS[i].maso == X)
return 1;
0.25 đim
return 0;
}
0.25 đim
Câu 4: (2 đim)
Cho K m t t : p các giá tr khóa s nguyên nh ư sau K={89, 18, 10, 12, 49, 58,
69 10} và b ng b m g ă m M= ô nh trng.
Cho 2 hàm b m nh sau:ă ư h
1
(k (key) = key mod 10 h
2
ey) = (key mod 7)+1, trong ó đ
phép toán y ph n d mod là phép toán l ư.
Hãy v K vào b hình b ng b m kh n l ă i thêm l ượt các khóa trong ng băm theo th t
t trái qua phi b hng cách dùng hàm b m ă
1
để xác nh đị địa ch a m c i khoá. Trong
trường h p y ra ng x đ độ thì dùng ph m képương pháp bă ( ) Double Hashing để gii
quyết đụng độ vi hàm băm h
i
(key)= ( h h
1
(key)+ i*
2
(key) ) mod 10, trong đó i=1,2,3..
là s l n x y ra c a khóa key l n th 1,2, đụng độ 3..
Đáp án tham kh o và Thang đi m đề ngh :
- d . Các s khi thêm vào s ng hàm h1(key) : 89, 18, 10, 12, không b đụng độ
- Thang đim m / 1 sđề ngh : 0.25 đi thêm vào bng b m ă đúng.
- B ng b m khi thêm 89 :ă
+h1(89) = 9
V trí
Giá tr
0
1
2
3
4
- B ng b m khi thêm 18 :ă
+h1(18)=8
V trí
Giá tr
0
1
2
3
4
- B ng b m khi thêm 10 :ă
+h1(10) =0
V trí
Giá tr
0
10
1
2
3
4
MSSV:............................ Đề thi gm 1 trang.
5
6
7
8
9
89
5
6
7
8
18
9
89
5
6
7
8
18
9
89
- B ng b m khi thêm 12 :ă
+h1(12)=2
V trí
Giá tr
0
10
1
2
12
3
4
5
6
7
8
18
9
89
- d b . Các s khi thêm vào s ng hàm h1(key), h2(key) : 49, 58, 69, đụng độ
- B m ng b m khi thêm 49 : 0.5 ă đi
+h1(49) =9
+h2(49) = (49 % 7) +1 = 1
+ v = h1(49) + 1*h2(49) = 9 + 1*1 =10 trí h
1
(49) % 10 = 0 (đụng độ)
+ v trí h
2
(49) = h1(49) + 2*h2(49) = 9 + 2*1 =11 % 10 = 1 (chp nhn)
V trí
Giá tr
0
10
1
49
2
12
3
4
5
6
7
8
18
9
89
- B m ng b m khi thêm 58 : 0.25 ă đi
+h1(58) =8
+h2(58) = (58 % 7) +1 = 3
+ v =11 % 10 = 1 trí h
1
(58) = ) + 1*h2(5 ) = 8 + 1*3h1(58 8 (đụng độ)
+ v + 2*3 trí h
2
(58) = ) + 2*h2(58) = 8h1(58 =14 % 10 = 4 (chp nhn)
MSSV:............................ Đề thi gm 1 trang.
V trí
Giá tr
0
10
1
49
2
12
3
4
58
5
6
7
8
18
9
89
- B m ng b m khi thêm 69 : 0.25 ă đi
+h1(69) =9
+h2(69) = (69 % 7) + 1 = 7
+ v + 1*7=16 = 6 trí h
1
(69) = ) + 1*h2(69) = 9h1(69 % 10 (chp nhn)
V trí
Giá tr
0
10
1
49
2
12
3
4
58
5
6
69
7
8
18
9
89
- Trong trường h p SV thêm các s 49,58,69 vào b ng b m chính xác, nh ng không ă ư
có gi a, i thích vì sao có k t qế đề ngh đim cho trường h p này là 0.5 đim.
Bảng tóm tắt phân bố thang m :điể
Câu
Thang đim
1.a
1
1.b
1
2.a
1
2.b
1
2.c
1
2.d
1
MSSV:............................ Đề thi gm 1 trang.
3.a
1
3.b
1
4.
Ý 1 : các s không đ ng đ
1
4.
Ý 2 : các s b đụng đ
1
Tng đim
10
| 1/8

Preview text:

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN ĐỀ THI CUỐI KỲ
KHOA KHOA HỌC MÁY TÍNH
HỌC KỲ 2 – NĂM HỌC 2019 – 2020
Môn thi: Cấu trúc dữ liệu và giải thuật
Mã lớp: Các lớp IT003 - Hệ đại trà, chất lượng cao
Thời gian làm bài: 90 phút.
(Sinh viên không được sử d ng tài li ệu) Câu 1: (2 điểm)
a. Hãy trình bày các bước của giải thuật sắp xếp chọn trực tiếp (Selection Sort) để
sắp xếp một dãy số nguyên giảm dần (không viết hàm). (1 điểm)
Đáp án tham khảo và Thang điểm đề nghị :
Bước 1: Khởi gán i = 0; // vị trí bắt đầu dãy N phần tử 0.25 điểm
Bước 2: Tìm phần tử a[max] lớn nhất trong dãy số 0.25 điểm
hiện hành từ a[i] đến a[N]
Bước 3 : Đổi chỗ a[max] và a[i] 0.25 điểm
Bước 4 : Nếu i < N-1 thì 0.25 điểm { i=i+1; Lặp lại Bước 2; }
Ngược lại: Dừng giải thuật.
b. Cho dãy số nguyên A như sau: 2, 5, 4, 7, 3, 9, 1, 8. Hãy cho biết dãy số A sẽ
biến đổi như thế nào qua từng bước theo giải thuật ở câu 1.a khi sắp xếp dãy số A giảm dần. (1 điểm)
Đáp án tham khảo và Thang điểm đề nghị : Dãy số ban đầu : 2 5 4 7 3 9 1 8
- Lần lặp 1 và dãy số biến đổi: 0.125 điểm 9 5 4 7 3 2 1 8
- Lần lặp 2 và dãy số biến đổi: 0.125 điểm 9 8 4 7 3 2 1 5
- Lần lặp 3 và dãy số biến đổi: 0.125 điểm 9 8 7 4 3 2 1 5
- Lần lặp 4 và dãy số biến đổi: 0.125 điểm 9 8 7 5 3 2 1 4
- Lần lặp 5 và dãy số biến đổi: 0.125 điểm 9 8 7 5 4 2 1 3
- Lần lặp 6 và dãy số biến đổi: 0.125 điểm 9 8 7 5 4 3 1 2
MSSV:............................ Đề thi gồm 1 trang.
- Lần lặp 7 và dãy số biến đổi: 0.125 điểm 9 8 7 5 4 3 2 1
- Kết thúc giải thuật, trả lời dãy số kết quả : 0.125 điểm 9 8 7 5 4 3 2 1
Câu 2: (4 điểm) Cho dãy ký tự như sau: F, D, H, B, A, G, C, E, I
Hãy thực hiện các yêu cầu sau :
a. Vẽ cây nhị phân tìm kiếm bằng cách thêm lần lượt từng ký tự vào cây theo thứ
tự từ trái qua phải của dãy ký tự trên, biết rằng giá trị của từng ký tự tương ứng
theo thứ tự xuất hiện của ký tự trong từ điển (thứ tự Alphabet) (1 điểm) Đáp án : Thang điểm đề nghị :
- Vẽ cây chính xác : 1 điểm
- Vẽ sai 1 nút trên cây : 0 điểm
b. Cho biết kết quả duyệt cây theo thứ tự: RNL và NRL. (1 điểm)
Đáp án và Thang điểm đề nghị :
- Duyệt cây RNL : I,H,G,F,E,D,C,B,A (0.5 điểm)
- Duyệt cây NRL : F,H,I,G,D,E,B,C,A (0.5 điểm)
c. Huỷ lần lượt từng nút theo thứ tự: D, E, F, H. Mỗi lần huỷ 1 nút hãy vẽ lại cây. (1 điểm) Đáp án tham khảo : - Xoá nút D :
MSSV:............................ Đề thi gồm 1 trang. - Xoá nút E : - Xoá nút F : - Xoá nút H : Thang điểm đề nghị :
- Thực hiện Xoá chính xác một nút : 0.25 điểm / 1 nút
MSSV:............................ Đề thi gồm 1 trang.
- Trường hợp SV không xoá lần lượt theo yêu cầu của đề, chỉ vẽ cây kết qủa
cuối cùng sau khi xoá cả 4 nút và kết qủa vẽ cây là đúng, nhưng không có
giải thích vì sao có được kết qủa: trừ 50% số điểm của câu.
d. Viết hàm đếm số lượng nút lá có trên cây. (1 điểm)
Đáp án tham khảo và Thang điểm đề nghị : int DEMLA(Tree T) 0.25 điểm { if (T==NULL) return 0;
if (T->Left==NULL && T->Right==NULL) 0.25 điểm return 1; else 0.5 điểm
return DEMLA(T->Left) + DEMLA(T->Right); }
Câu 3: (2 điểm) Cho cấu trúc dữ liệu l u
ư trữ thông tin nhân sự như sau : typedef struct Thongtin
{ int maso; // mã số nhân sự
char hoten[100] ; / / họ và tên nhân sự
int thamnien; // số năm thâm niên công tác
float hesoluong ; // hệ số lương }Nhansu;
Dựa trên một trong các thuật toán sắp xếp và tìm kiếm, hãy thực hiện yêu cầu sau: a.
Viết hàm sắp xếp mảng NS gồm N nhân sự theo thâm niên công tác giảm dần (1 điểm)
Đáp án tham khảo và Thang điểm đề nghị :
- SV có thể sử dụng bất kỳ giải thuật sắp xếp nào để áp dụng khi viết hàm.
- Đáp án tham khảo giải thuật chọn trực tiếp và thang điểm đề nghị.
void Sapxep_Thamnien (Nhansu NS[], int N) 0.25 điểm { int i, j, max_idx; for (i = 0; i < N-1; i++) { max_idx = i; 0.25 điểm for (j = i+1; j < N; j++)
if (NS[j].thamnien > NS[max_idx].thamnien) 0.25 điểm max_idx = j;
swap(&NS[max_idx], &NS[i]); 0.25 điểm } }
void swap(Nhansu *xp, Nhansu *yp) {
MSSV:............................ Đề thi gồm 1 trang. Nhansu temp = *xp; *xp = *yp; *yp = temp; } b. Viết hàm để tì
m xem trong một mảng NS gồm N n
hân sự có nhân sự nào c ó mã
số bằng X hay không. Nếu tìm thấy trả về giá trị 1, ngược lại trả về giá trị 0 (1 điểm)
Đáp án tham khảo và Thang điểm đề nghị :
- SV có thể sử dụng bất kỳ giải thuật tìm kiếm nào để áp dụng khi viết hàm.
- Đáp án tham khảo giải thuật tìm kiếm tuyến tính và thang điểm đề nghị.
int Tim_Nhansu (Nhansu NS[], int N, int X) 0.25 điểm { int i; for(i=0; i0.25 điểm if (NS[i].maso = = X) 0.25 điểm return 1; return 0; 0.25 điểm } Câu 4: (2 điểm)
Cho K là một tập các giá trị khóa là số nguyên như sau: K={89, 18, 10, 12, 49, 58,
69} và bảng băm gồm M=10 ô nhớ trống.
Cho 2 hàm băm như sau: h đ
1(key) = key mod 10 h2(key) = (key mod 7)+1, trong ó
phép toán mod là phép toán lấy phần dư.
Hãy vẽ hình bảng băm khi thêm lần lượt các khóa trong K vào bảng băm theo thứ tự
từ trái qua phải bằng cách dùng hàm băm h1 để xác định địa chỉ của mỗi khoá. Trong
trường hợp xảy ra đụng độ thì dùng phương pháp băm kép (Double Hashing) để giải
quyết đụng độ với hàm băm hi(key)= ( h1(key)+ i*h2(key) ) mod 10, trong đó i=1,2,3..
là số lần xảy ra đụng độ của khóa key ở lần thứ 1,2,3..
Đáp án tham khảo và Thang điểm đề nghị :
- Các số khi thêm vào sử dụng hàm h1(key) : 89, 18, 10, 12, không bị đụng độ.
- Thang điểm đề nghị : 0.25 điểm / 1 số thêm vào bảng băm đúng. - Bảng băm khi thêm 89 : - Bảng băm khi thêm 18 : - Bảng băm khi thêm 10 : +h1(89) = 9 +h1(18)=8 +h1(10) =0 Vị trí Giá trị Vị trí Giá trị Vị trí Giá trị 0 0 0 10 1 1 1 2 2 2 3 3 3 4 4 4
MSSV:............................ Đề thi gồm 1 trang. 5 5 5 6 6 6 7 7 7 8 8 18 8 18 9 89 9 89 9 89 - Bảng băm khi thêm 12 : +h1(12)=2 Vị trí Giá trị 0 10 1 2 12 3 4 5 6 7 8 18 9 89
- Các số khi thêm vào sử dụng hàm h1(key), h2(key) : 49, 58, 69, bị đụng độ.
- Bảng băm khi thêm 49 : 0.5 điểm +h1(49) =9 +h2(49) = (49 % 7) +1 = 1
+ vị trí h1(49) = h1(49) + 1*h2(49) = 9 + 1*1 =10 % 10 = 0 (đụng độ)
+ vị trí h2(49) = h1(49) + 2*h2(49) = 9 + 2*1 =11 % 10 = 1 (chấp nhận) Vị trí Giá trị 0 10 1 49 2 12 3 4 5 6 7 8 18 9 89
- Bảng băm khi thêm 58 : 0.25 điểm +h1(58) =8 +h2(58) = (58 % 7) +1 = 3
+ vị trí h1(58) = h1(58) + 1*h2(58) = 8 + 1*3=11 % 10 = 1 (đụng độ)
+ vị trí h2(58) = h1(58) + 2*h2(58) = 8 + 2*3 =14 % 10 = 4 (chấp nhận)
MSSV:............................ Đề thi gồm 1 trang. Vị trí Giá trị 0 10 1 49 2 12 3 4 58 5 6 7 8 18 9 89
- Bảng băm khi thêm 69 : 0.25 điểm +h1(69) =9 +h2(69) = (69 % 7) + 1 = 7
+ vị trí h1(69) = h1(69) + 1*h2(69) = 9 + 1*7=16 % 10 = 6 (chấp nhận) Vị trí Giá trị 0 10 1 49 2 12 3 4 58 5 6 69 7 8 18 9 89
- Trong trường hợp SV thêm các số 49,58,69 vào bảng băm chính xác, nhưng không
có giải thích vì sao có kết qủa, đề nghị điểm cho trường hợp này là 0.5 điểm.
Bảng tóm tắt phân bố thang điểm : Câu Thang đim 1.a 1 1.b 1 2.a 1 2.b 1 2.c 1 2.d 1
MSSV:............................ Đề thi gồm 1 trang. 3.a 1 3.b 1 4. 1
Ý 1 : các số không đụng độ 4. 1
Ý 2 : các số bị đụng độ Tổng điểm 10
MSSV:............................ Đề thi gồm 1 trang.