ĐỀ THI: CU TRÚC D LIU VÀ GII THUT
(Thi gian 90’)
Mã đề CDK54-2010-01
Sinh viên đưc s dng tài liu
Bài 1.
a) Kích thưc ca 1 biến kiu char là 1 Byte, biến kiu int là 4 byte, kiu double là 8 byte. Kích thưc ca 1
con tr kiu char là ? con tr kiu double là ?
G
i ý: Kích th
ướ
c c
a con tr
không ph
thu
c vào ki
u d
li
u, mà ph
thu
c vào t
ng dòng máy. Máy 32
bit thì là 4 byte, máy 64 bit thì là 8 byte. Kiu int s có kích thước bng s bit ca kiu máy đó, nếu mà kiu
int là 32 bit tc là đó là máy 32 bit. Như vy kích thước con tr đây là 4 byte (32 bit).
b) Đánh giá thi gian thc hin ca thut toán đệ quy sau theo mô hình O-ln
Cho ma trn A kích thưc 𝑛×𝑚, ma trn B kích thưc 𝑚×𝑙
for(i = 0; i < n; i++)
for( k = 0; k < m; k++)
for( j = 0; j < l; j++)
C[i][j] += A[i][k] * B[k][j];
Hãy đánh giá đ phc tp ca đon chương trình trên theo O-ln
Lnh cơ s là lnh
C[i][j] += A[i][k] * B[k][j];
Có 3 vòng lp lng nhau, thi gian thc hin
𝑇(𝑛)= 1
𝑙−1
𝑗=0
𝑚−1
𝑘=0
𝑛−1
𝑖=0
= (𝑙 1 + 1)
𝑚−1
𝑘=0
𝑛−1
𝑖=0
=. . = 𝑛×𝑚×𝑙
Vy đ phc tp c
𝑂(𝑛×𝑚×𝑙)
Bài 2. Tr li các câu hi sau
a) Trong các phương pháp sp xếp: la chn, chèn, đi ch(ni bt), quicksort (sp xếp nhanh), mergesort
(sp xếp trn), tphương pháp nào là phù hp nht đ sp xếp trên danh sách liên kết đơn? Gii thích
la chn ca bn.
Các thut toán trên đưc chia thành 2 loi là cơ bn (
𝑂(𝑛2)
) và nâng cao (
𝑂(𝑛log 𝑛)
)
Sp xếp trên danh sách liên kết đơn thì mergesort là phù hp hơn vì :
Thi gian trung bình trong trưng hp ti nht c
𝑂(𝑛log 𝑛)
Cài đt đơn gin hơn QuickSort
b) Danh sách tên ca 1000 sinh viên đưc lưu tr trong mng nhưng không theo 1 th t nào.Hãy nêu
nhng ưu đim và nhưc đim ca phương pháp lưu tr này
(các tiêu chí đánh giá: b nh, thi gian tìm kiếm, thêm, xóa)
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Ưu đim:
Ch lưu mi tên, không cn lưu thêm thông tin ph (con tr…)
Có th truy cp trc tiếp tng phn t thông qua ch s
Nhưc đim
Có th lãng phí b nh nếu không dùng hết
Vì không cn sp xếp theo th t nên vic thêm phn t đơn gin (ch cn thêm vào cui). Tuy
nhiên vic tìm kiếm mt nhiu thi gian hơn do ch có th tìm kiếm tun t (𝑂(𝑛)).
Thi gian xóa gm tìm kiếm khóa cn xóa (
𝑂(𝑛)
) và xóa phn t (
𝑂(1)
do ch cn đi ch vi
phn t cui và gim s lưng đi 1)
Bài 3.
a) Trong mng LAN có 1 máy in mng đưc s dng chung. Các công vic in gi đến máy đưc lưu tr
trong 1 hàng đi, đa ch ca các công vic đưc lưu tr cho đến khi máy sn sàng. Công vic mi s
đưc xếp cui cùng trong hàng đi. Nêu các lý do ti sao nên dùng hàng đi cài đt bng danh sách liên
kết thay vì cài đt bng mng.
Dùng hàng đi cài đt bng danh sách liên kết vì:
S ng công vic in ta không thể biết trưc nên dùng danh sách liên kết s tiết kim b nh
hơn.
Ta ch lưu tr địa ch ca công vic ch không phi ni dung công vic (ni dung s đưc đ trên
máy có yêu cu in) do đó tiết kim đưc b nh (do cn phi dùng ít b nh hơn rt nhiu)
Chú ý: đây là hàng đi nên ly ra là đu hàng và thêm vào cui hàng, ta không ly ngu nhiên 1
phn t trong hàng, và sau khi ly ta cũng không phi dch c phn t n li.
b) Áp dng thut toán chuyn biu thc dng trung t sang dng hâu t bng stack đ chuyn biu thc
sau sang dng hu t (cn nêu rõ các bưc trung gian trong quá trình tính)
3 + 5 ^ (12 / 6 + 1) – 7 15 / 3 + 6
Biu thc hu t tương ng là :
3 5 12 6 / 1 + ^ + 7 15 * 3 / - 6 +
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Bài 4. Cho đ th
a. Biu din đ th dùng danh sách k
b. Thc hin duyt đ th theo chiu sâu (DFS) xut phát t đnh A, v cây khung thu đưc
Bài 5. Viết hàm nhn đu vào là 1 ma trn k biu din cho 1 đ th vô hưng , và s ng đnh trên đ th.
Hàm kim tra xem đ th có liên thông hay không. Nếu đ th liên thông thì hàm tr v giá tr 1, ngưc li
thì hàm tr v giá tr 0.
int ktLienThong(int Adj[100][100], int n)
{
//Thân hàm
}
Trong đó 𝑛 là s ng đnh thc s trên đ th ( 0 < 𝑛 100), Adj là ma trn k u tr đồ th.
Chú ý : đ th liên thông nếu mà gia hai cp đnh bt k ln tn ti đưng đi.
int ktLienThong(int Adj[100][100], int n)
{
//Thân hàm
int Queue[MAX];//Queue de cho BFS
int QStart,QEnd; //Dau va cuoi queue
int Color[MAX]; //mau cua cac dinh
int u,i;
for(i=0;i<n;i++) Color[i]=-1;
CuuDuongThanCong.com https://fb.com/tailieudientucntt
//khoi tao queue
QStart=0;
QEnd=0;
//Bat dau tham tu dinh 0
Queue[0]=0;
Color[0]=0;
while(QEnd>=QStart)
{
u=Queue[QStart];
QStart++;
for(i=0;i<n;i++)
if(Color[i]==-1 && Graph[u][i]==1)
{
QEnd++;
Queue[QEnd]=i;
Color[i]=0;
}
Color[u]=1;
}
//kiem tra xem co ton tai dinh chua tham
for(i=0;i<n;i++) if(Color[i]==-1) return 0;
return 1;
}
Thi gian thc hin 𝑂(𝑛2)
Hãy đưa ra đánh giá thi gian thc hin ca thut toán ca bn theo O-ln
Chú ý: chương trình s dng thut toán ti ưu hơn s đưc đánh giá cao hơn!
CuuDuongThanCong.com https://fb.com/tailieudientucntt