Tổng hợp đề thi môn Cấu trúc dữ liệu và thuật toán| Môn Cấu trúc dữ liệu và thuật toán| Trường Đại học Bách Khoa Hà Nội

Tổng hợp đề thi môn Cấu trúc dữ liệu và thuật toán| Môn Cấu trúc dữ liệu và thuật toán| Trường Đại học Bách Khoa Hà Nội. Tài liệu gồm 68 trang giúp bạn ôn tập và đạt kết quả cao trong kỳ thi sắp tới. Mời bạn đọc đón xem.

TRƯỜNG ĐẠI HC BÁCH KHOA HÀ NI
VIN CÔNG NGH THÔNG TIN VÀ TRUYN THÔNG
B MÔN KHOA HC MÁY TÍNH
***
H tên: ……………………………
Lp: …………………………………
SHSV: ……………………………….
ĐỀ THI MÔN: CU TRÚC D LIU
VÀ GII THUT
Ngày thi: …../…../….
Thời gian 90’
(Sinh viên được s dng tài liu)
Hà nội, .…. /….. / …...
Trưởng b môn
Bài 1. Cho hàm khai báo như sau (tham s  là các s nguyên không âm)
long mistery(int a, int b)
{
if(a==0) return 0;
if(a%2==0) return 2*mistery(a/2,b);
return b+2*mistery((a-1)/2,b);
}
a. Hàm sau thc hin công vic gì? Tính giá tr ca hàm vi a=5 và b=7
b. Đánh giá độ phc tp ca hàm mistery theo O-ln
Bài 2. Cho cây biu thc sau
a. Duyt cây biu thc để đưa ra biểu thc dng tin t, hu t
b. Vi a=36 b=5, hãy minh ha thuật toán định giá biu thc hu t
trên biu thc hu t thu được t phn a
Chú ý: là ký hiu ca toán t căn bậc hai
Bài 3. Cây nh phân tìm kiếm
a) Thêm lần lượt các nút 25, 32, 14, 21, 19, 17, 23, 5, 9 vào cây nh
phân tìm kiếm ban đầu rng, v cây kết qu thu được
b) Vi cây kết qu trong phn b ta xóa nút 1, hãy v cây kết qu thu được.
Thay bng nút trái nht trên con phi
c) Cho cu trúc mt nút trên cây đưc khai báo như sau
Hãy hoàn thin hàm tìm và tr v s ng nút có giá tr nh hơn hoặc bng x trên cây
int *CountNodes(struct BinaryNode *root, double x)
{
double data;
struct BinaryNode *Left, *Right;
}
Mã đề
CD 2012 - 03
Figure 1 Cây biu thc
+
 
b 3 /
a 4
Bài 4.
a) Để biu diễn đa thức bc n
󰇛
󰇜


 

Và thc hin các thao tác cng, tr, nhân và chia với đa thức này thì ta nên s dng mng hay danh
sách liên kết? Hãy gii thích ti sao.
b) Gi s chúng ta có mt danh sách gm 100 phn t kiểu double được lưu trữ trong mng, và cn
phi thc hin sp xếp. Khi đó ta nên chọn thut toán sp xếp nào trong các thuật toán đã học để
thu được hiu qu tt nht? Gii thích lý do?
Nếu s ng phn t 1 000 000 và được lưu tr dùng danh sách liên kết đơn thì nên dùng thuật
toán nào? Gii thích lý do?
c) Gi s chúng ta cn qun lý mt danh sách khách hàng có tối đa 1000 người (không biết trước s
ng) và cn thc hin tìm kiếm theo h tên. Hãy mô t phương pháp của bạn để:
Thc hin vic tìm kiếm khách hàng mt cách nhanh nht
Thc hiện lưu trữ và tìm kiếm tiết kim b nh nht có th
Hãy gii thích?
d) Gi s chúng ta có mt danh sách các s nguyên gm 1 000 000 số. Hãy đưa ra một thut toán hiu
qu để thng kê các s trùng nhau trong danh sách.
Đánh giá thời gian thc hin ca thut toán ca bn theo
O ln.
Bài 5. Cho đồ th ớng như hình bên
a) Minh họa cách lưu trữ đồ th trên s dng ma
trn k và danh sách k
b) Thc hin DFS ti đỉnh B, hãy đưa ra thứ t
thăm các đỉnh
Đưa ra các loại cnh trên cây khung DFS ti B.
A
B H
C
G
F
E
D
Figure 2 Đồ th G (V, E)
1 | P a g e
TRƯỜNG ĐẠI HC BÁCH KHOA HÀ NI
VIN CÔNG NGH THÔNG TIN VÀ TRUYN THÔNG
B MÔN KHOA HC MÁY TÍNH
***
H tên: ……………………………
Lp: …………………………………
SHSV: ……………………………….
ĐỀ THI MÔN: CU TRÚC D LIU
VÀ GII THUT
Ngày thi: …../…../….
Thời gian 90’
(Sinh viên được s dng tài liu)
Hà nội, .…. /….. / …...
Trưởng b môn
Bài 1.
a) Cho cây AVL sau, v cây kết qu khi thêm phn t 29, và xóa
phn t 25
b) Cho mt cây nh phân tìm kiếm có khóa là các s nguyên, và
mt giá tr k, Hãy viết hàm tìm và in ra tt c các cp phn
t (a, b) trên cây sao cho 𝑎 + 𝑏 𝑘
c) So sánh thi gian thêm và tìm kiếm ca các cu trúc d liu
sau: Bảng băm, mảng, danh sách liên kết, hàng đợi
Bài 2. Cho hai văn bản A và B đã được tách t, gi s ng t
phân bit ca văn bản A là n, và của văn bản B là m
(𝑛 𝑚). Hãy đưa ra thuật toán tìm tp t chung ca hai
văn bản theo tiêu chí
a) Thi gian thc hin nhanh nht
b) B nh ph tn ít nht
Trong c hai trường hp, hãy ch rõ thi gian thc hin theo O-ln và b nh ph cn s dng
Bài 3. Cho mt t đin tiếng anh gm n t, và mt danh sách ký t phân biệt độ dài m (𝑚 𝑛). Hãy xây
dng thuật toán tìm và đưa ra từ dài nht trong t điển được to t các ký t trong danh sách.
Thi gian ca thut toán cn𝑂(𝑛)
Bài 4. Cho mt danh sách s nguyên dương gm n phn t (𝑛 1 𝑡ỷ) và mt s nguyên dương k(𝑘 𝑛),
Hãy đưa ra thuật toán đếm s cp trong danh sách ban đầu có tng < 𝑘 vi thi gian thc hin nh hơn
𝑂(𝑛 log 𝑛)
Bài 5. Cho mt lung các ký t liên tc, hãy xây dng thuật toán đưa ra danh sách ký t không được lp
trong lung ký t đó (giả s rng tn ti ít nht mt ký t như vậy).
Chú ý: vi lung ta ch có th duyt các ký t 1 ln và theo 1 chiu
Mã đề
DH 2013 - 01
12 36
7 21 4531
10 27 33
25
CuuDuongThanCong.com https://fb.com/tailieudientucntt
2 | P a g e
Bài 6. Cho danh sách thông tin ca n cuc hp vi thời điểm bt đu và thời điểm kết thúc. Hãy đưa ra thut
toán sp xếp các cuc hp này vào các phòng sao cho s ợng phòng được s dng là nh nht có th.
Độ phc tp ca thut toán bạn đề xut là bao nhiêu?
Bài 7. Trong mt trình duyt cần lưu trữ các URL đã được thăm theo tần s truy cp gim dn.
Hãy xây dựng CTDL lưu trữ các URL h tr các thao tác
Thêm/xóa
Tìm kiếm
Vi thi gian 𝑂(log 𝑛), liu có th lưu trữ để hc hin các thao tác trên vi thi gian 𝑂(1)?
Bài 8. Cho 2 Queue thông thường, hãy xây dng thut toán sp xếp ch dung 2 queue đó (không s dng
thêm b nh ph) để sp xếp danh sách gm n phn t s nguyên.
Các thao tác được dùng ch là enqueue và
dequeue
Bài 9. Cho m mng s nguyên vi s ng
phn t mi mng là n, các phn t trong
mi mảng đều đã được sp xếp. Hãy xây
dng thuật toán để tìm khong nh nht sao
cho mi mng có ít nht mt phn t
trong khoảng đó.
Ví d.
A1={1,2,5,7,8}
A2={1,4,6,7,8}
A3={2,5,9,10,12}
Thì khong nh nht có th là [8,9]
Gi ý: Dùng priority queue
Bài 10. Cho đồ th sau
a) Thc hin DFS ti E
b) Đưa ra phân loại cnh theo th t duyt phn a
Th t thăm theo ABC
Chú ý: Nhng bài yêu cu viết hàm mi phi viết code cho hàm, các bài xây dng thut toán ch cn nêu
ý tưởng (và ví d minh họa cho ý tưởng)
A
B
C
D
E
I
J
K
L
M
FG
H
CuuDuongThanCong.com https://fb.com/tailieudientucntt
1 | Page
TRƯNG ĐI HC BÁCH KHOA HÀ NI
VIN CÔNG NGH THÔNG TIN VÀ TRUYN THÔNG
B MÔN KHOA HC MÁY TÍNH
***
H tên
: ……………………………
Lp: …………………………………
SHSV
: ……………………………….
ĐỀ THI MÔN: CU TRÚC D LIU
VÀ GII THUT
Ngày thi: …../…../….
Thi gian 90’
(
Sinh viên đưc s dng tài liu
)
Hà ni, .…. /….. / …...
Trưng b môn
Bài 1.
a) Phân bit gia mng cp phát đng và mng cp phát tĩnh. Khi nào nên dùng mng cp phát đng, hoc
mng cp phát tĩnh? Cho ví d mình ha.
b) Đánh giá thi gian thc hin ti nht ca hàm sau theo O-ln
double fastPower(double x, int n)
{
double fract;
if(n==0) return 1;
if(n%2==0) return fastPower(x,n/2)*fastPower(x,n/2);
else return fastPower(x,n/2)*fastPower(x,n/2)*x;
}
c) So sánh ưu nhưc đim ca phương pháp t chc tìm kiếm dùng mng và áp dng thut toán tìm kiếm
nh phân, cây nh phân tìm kiếm và dùng bng băm theo các tiêu chí sau
Tiêu c
Tìm kiếm nh phân
Cây nh phân tìm kiếm
Bng băm
B nh dùng lưu tr các
phn t
Thi gian tìm kiếm
Thêm phn t
Xoá phn t
In ra danh sách c phn t
hin
Bài 2.
a) Biu thc dng hu t là gì? Ưu đim ca biu thc dng hu tố?
b) Chuyn biu thc dng trung t sau sang dng hu t
𝑎 + 3/(2 𝑎 𝑐 𝑏) 𝑒
c) V cây biu thc biu din cho biu thc phn b (không cn phi trình bày các bưc trung gian)
Mã đ
CD 2011 - 01
CuuDuongThanCong.com https://fb.com/tailieudientucntt
2 | Page
Bài 3.
a) Cho cây nh phân tìm kiếm ban đu như hình
thêm ln lưt dãy khóa 43, 12, 36, 78, 29, 16, 9, 65, 27, 32. Hãy v cây nh phân kết qu thu đưc cui
cùng (không cn trình bày các bưc trung gian).
b) Vi cây nh phân tìm kiếm thu đưc phn a, thc hin xóa ln lưt khóa 18 và 36. Hãy v cây kết qu
thu đưc sau mi ln xóa
Chú ý: chn nút thay thế là nút phi nht trên cây con trái
Bài 4. Cho mt đơn đthvô hưng 𝐺(𝑉, 𝐸) như sau
𝑉 = {𝐴, 𝐵, 𝐶, 𝐷, 𝐸, 𝐹, 𝐺, 𝐻}
𝐸 = {(𝐴, 𝐵), (𝐴, 𝐶), (𝐴, 𝐸), (𝐵, 𝐸), (𝐵, 𝐺), (𝐶, 𝐷), (𝐶, 𝐵), (𝐷, 𝐸), (𝐹, 𝐷), (𝐹, 𝐸), (𝐹, 𝐺), (𝐻, 𝐵), (𝐻, 𝐺)}
a) Hãy biu din đ th trên dùng danh sách k.
b) Thc hin DFS t đỉnh D, hãy đưa ra th t các đnh đưc thăm.
c) Hãy đưa ra các loi cnh thu đưc khi DFS ti đnh D (BackEdge, CrossEdge, TreeEdge và ForwardEdge).
Lưu ý: Các đnh trên đ th đưc thăm theo th t ABC
Bài 5. Để biu din các tp hp s nguyên ta dùng danh sách liên kết đơn vi cu trúc mt phn t đưc
khai báo như sau:
typedef struct Node
{
int data;
struct node *pNext;
} NODE;
a) Hãy xây dng hàm tìm và tr v gtr phn t chn ln nht trong tp hp trong trưng hp biết các
phn t ca tp hp đưc sp xếp theo th t tăng dần v giá trị.
int FindMax (NODE *pHead)
{
}
b) Hãy đánh giá thi gian thc hin trong trưng hp ti nht ca hàm bn viết theo O-ln
CuuDuongThanCong.com https://fb.com/tailieudientucntt
ĐỀ 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 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 + 1)




=. . = × ×
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), thì phươ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 (
(
)
) 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 th tìm kiếm tun t (()).
Thi gian xóa gồm tìm kiếm ka 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 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 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 lư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 (
)
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
ĐỀ THI: CU TRÚC D LIU VÀ GII THUT
(Thi gian 90’)
Mã đề CDK54-2010-02
Sinh viên đưc s dng tài liu
Bài 1.
a) Trình bày s khác bit gia mng cp phát b nh động và mng cp phát tĩnh? Khi nào dùng mng cp
phát đng, mng cp phát tĩnh, cho ví d.
Xem trong v
b) Đánh giá thi gian thc hin ca thut toán tính mũ nhanh sau theo mô hình O-ln
double fastPower(double x, int n)
{
double fract;
if(n==0) return 1;
fract = fastPower(x,n/2);
if(n%2==0) return fract*fract;
else return fract*fract*x;
}
Thut toán trên s thc hin vic tính
Thut toán này là thut toán đ quy, ta có công thc đ quy là
(
)
= 󰇡
2
󰇢+ 1
Thi gian thc hin theo O-ln là O(logn)
Chú ý: Có th dùng 1 trong 3 phương pháp đã hc để chng minh!
Bài 2.
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), thì phương pháp nào là phù hp nht đ sp xếp trên mng vi s ng các phn t
ln? Gii thích la chn ca bn.
QuickSort là phù hp nht đ sp xếp trên mng vi s ng phn t ln vì:
Thi gian c
(
log
)
So vi mergersort thì nó không cn s dụng thêm b nh ph
Không cn thc hin thao tác trn
b) Cho mng A={14,45,21,12,7,87,25,56,91,64,33,41,72,89,62}
Hãy minh ha ln lp th nht ca thut toán sp xếp ni bt trên A.
Tùy tng tng hp sp xếp tăng dn hoc gim dn mà kết qu s kc nhau. Trong trưng hp tăng
dần thì ln lp đu tiên, khóa có giá tr ln nht s b đẩy v cui dãy.
CuuDuongThanCong.com https://fb.com/tailieudientucntt
C th xem ví d trong slide
Bài 3.
a) Hàng đi vòng (Circle Queue) là gì ? Tác dng ca vic t chc hàng đi dng vòng?
Hàng đi vòngtác dng ca hàng đi vòng : Xem trong slide đây là phn lý thuyết căn bn
b) Áp dng thut toán đnh giá biu thc hu t bng stack đ tính giá tr biu thc dng hu t sau (cn
nêu rõ các bưc trung gian trong quá trình tính)
15 2 3 + / 2 ^ 4 12 2 % +
Kết qu là 13, còn trình t thc hin xem các ví d đã cha trên lp
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Bài 4. Cho đ th
a. Biu din đ th dùng ma trn k
b. Thc hin thut toán PRIM và đưa ra cây khung có trng s nh nht trên đ th (cn mô t rõ các
c thc hin)
Cây khung trng s nh nht là 21
Trình t thc hin xem các ví d đã cha trên lp
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 ln 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 lưu tr đồ th.
Chú ý : đ th liên thông nếu mà gia hai cp đnh bt k ln tn ti đưng đi.
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
1
PHẦN CÂU HỎI
Câu 1 (2đ) Cho hàm sau:
int process(int a[], int i, int j){
if(i > j) return 0;
if(i == j) return a[i];
int m = (i+j)/2;
return process(a,i,m) + process(a,m+1,j);
}
a) Hãy cho biết hàm process thực hiện công việc gì? Giải thích?
b) Với giả thiết các phép toán cần thực hiện đều thể thực hiện trong thời gian O(1), hãy đưa ra
đánh giá thời gian tính của thuật toán trong trường hợp tối nhất theo O-lớn.
Câu 2 (1đ) Lịch trình di chuyển trong ngày của một cá nhân được lưu trữ trong danh sách liên kết theo
thứ tự tăng dần thời gian, với một nút được định nghĩa như sau:
typedef struct aPlace{
int hour, min; // thoi diem ghe tham trong ngay theo gio va phut
char locName[255]; // ten dia diem
struct aPlace* next; // con trỏ đến nút kế tiếp
}PLACE;
Giả sử để truy vết F1 của Covid mới xuất hiện, cục y tế dự phòng phát ra thông báo những người qua
một địa điểm tên reportLocName sau khoảng thời gian reportHour giờ, reportMin phút (cùng
ngày) đều phải trình báo y tế. Hãy hoàn thiện hàm
int needMedicalReport(PLACE* visitedPlaces, char* reportLocName, int
reportHour, int reportMin)
Hàm trả về 1 nếu cá nhân cần phải khai báo y tế, và 0 nếu ngược lại (trong đó visitedPlaces là con
trỏ đầu đến danh sách liên kết các địa điểm cùng với thời gian ghé thăm của người cần kiểm tra).
Câu 3 (2đ)
a) Cho dãy số sau cần sắp xếp theo thứ tự không tăng 7, 9, 5, 3, 1, 6, 4, 8, 2. y trình diễn thuật
toán sắp xếp trộn sắp xếp dãy đã cho.
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
Học phần:.........CẤU TRÚC DL & TT.........Mã HP....IT3011......Mã lớp: ........ 119183
........
Bài thi [ ] giữa kỳ .[ X] cuối kỳ.. Năm học... 2020-2021..... Ngày thi:.......13 / 01 / 2021...........
Không sử dùng tài liệu.
Thời gian làm bài 90 phút.
Xác nhận của bộ môn
1
2
b) Hãy lập trình ngôn ngữ C hàm int isMinHeap(int A[], int n) kiểm tra xem mảng A[]
chiều dài n (chỉ số các phần tử từ 0 đến n-1) đống min (min-heap) hay kng ? (trả về 0
sai, và 1 là đúng).
Câu 4 (3đ)
a) Hãy vẽ cây nhị phân tìm kiếm (BST) thu được (không cần vẽ bước trung gian) bằng cách chèn liên
tiếp dãy khóa sau vào BST bắt đầu từ BST rỗng: 11, 4, 8, 21, 16, 1, 3, 27, 14
b) Hãy vẽ BST thu được sau khi loại bỏ nút có khóa bằng 11 khỏi BST thu được ở câu a)
c) Cấu trúc dữ liệu mỗi nút của một cây nhị phân được định nghĩa như sau:
typedef struct TNode{
int key;// khóa của nút
struct TNode* left; // trỏ đến nút con trái
struct TNode* right; // trỏ đến nút con phải
}TNode;
Hãy lập trình hàm
int checkBST(TNode* p)
trả về 1 nếu cây nhị phân gốc p là một BST và trả về 0
nếu ngược lại.
Câu 5 (1đ)
a) Đưa ra kết quả duyệt cây theo thứ tự sau.
b) Cho a=3, b=5,c=-4,d=6,e=2,f=9 tính giá trị biểu
thức biểu diễn bởi cây biểu thức bên.
Câu 6 (1đ) Cho cấu trúc mô tả vị trí ngồi của n người trong một phòng họp
typedef struct aLoc{
double x,y;// toa độ
char name[51];// tên của người họp
} LOC;
Danh sách được cho bởi mảng listLoc (các phần tử đánh số từ 0 đến n-1). Giả sử sau khi xét nghiệm
covid có nguời ngồi vị trí tọa độ x1,y1 bị dương tính covid, những người trong phạm vi khoảng cách
đến (x1,y1) nhỏ hơn hoặc bằng d cần được cách ly ngay. Hãy viết hàm
void listF1Covid(LOC *listLoc, int n, double x1, double y1, double d)
in ra danh sách (tên người) những người cần được cách ly (kể cả người ở vị trí tọa độ x1,y1).
(Chú ý: Khoảng cách tính theo Euclide)
------------------ Hết -------------------
Cán bộ coi thi không giải thích gì thêm
1 | Page
TRƯNG ĐI HC BÁCH KHOA HÀ NI
VIN CÔNG NGH THÔNG TIN VÀ TRUYN THÔNG
B MÔN KHOA HC MÁY TÍNH
***
H tên
: ……………………………
Lp: …………………………………
SHSV
: ……………………………….
ĐỀ THI MÔN: CU TRÚC D LIU
VÀ GII THUT
Ngày thi: …../…../….
Thi gian 90’
(
Sinh viên đưc s dng tài liu
)
Hà ni, .…. /….. / …...
Trưng b môn
Bài 1.
a) Phân bit gia mng cp phát đng và mng cp phát tĩnh. Khi nào nên dùng mng cp phát đng, hoc
mng cp phát tĩnh? Cho ví d mình ha.
b) Đánh giá thi gian thc hin ti nht ca hàm sau theo O-ln
double fastPower(double x, int n)
{
double fract;
if(n==0) return 1;
if(n%2==0) return fastPower(x,n/2)*fastPower(x,n/2);
else return fastPower(x,n/2)*fastPower(x,n/2)*x;
}
c) So sánh ưu nhưc đim ca phương pháp t chc tìm kiếm dùng mng và áp dng thut toán tìm kiếm
nh phân, cây nh phân tìm kiếm và dùng bng băm theo các tiêu chí sau
Tiêu c
Tìm kiếm nh phân
Cây nh phân tìm kiếm
Bng băm
B nh dùng lưu tr các
phn t
Thi gian tìm kiếm
Thêm phn t
Xoá phn t
In ra danh sách c phn t
hin
Bài 2.
a) Biu thc dng hu t là gì? Ưu đim ca biu thc dng hu tố?
b) Chuyn biu thc dng trung t sau sang dng hu t
𝑎 + 3/(2 𝑎 𝑐 𝑏) 𝑒
c) V cây biu thc biu din cho biu thc phn b (không cn phi trình bày các bưc trung gian)
Mã đ
CD 2011 - 01
2 | Page
Bài 3.
a) Cho cây nh phân tìm kiếm ban đu như hình
thêm ln lưt dãy khóa 43, 12, 36, 78, 29, 16, 9, 65, 27, 32. Hãy v cây nh phân kết qu thu đưc cui
cùng (không cn trình bày các bưc trung gian).
b) Vi cây nh phân tìm kiếm thu đưc phn a, thc hin xóa ln lưt khóa 18 và 36. Hãy v cây kết qu
thu đưc sau mi ln xóa
Chú ý: chn nút thay thế là nút phi nht trên cây con trái
Bài 4. Cho mt đơn đthvô hưng 𝐺(𝑉, 𝐸) như sau
𝑉 = {𝐴, 𝐵, 𝐶, 𝐷, 𝐸, 𝐹, 𝐺, 𝐻}
𝐸 = {(𝐴, 𝐵), (𝐴, 𝐶), (𝐴, 𝐸), (𝐵, 𝐸), (𝐵, 𝐺), (𝐶, 𝐷), (𝐶, 𝐵), (𝐷, 𝐸), (𝐹, 𝐷), (𝐹, 𝐸), (𝐹, 𝐺), (𝐻, 𝐵), (𝐻, 𝐺)}
a) Hãy biu din đ th trên dùng danh sách kề.
b) Thc hin DFS t đỉnh D, hãy đưa ra th t các đnh đưc thăm.
c) Hãy đưa ra các loi cnh thu đưc khi DFS ti đnh D (BackEdge, CrossEdge, TreeEdge và ForwardEdge).
Lưu ý: Các đnh trên đ th đưc thăm theo th t ABC
Bài 5. Để biu din các tp hp s nguyên ta dùng danh sách liên kết đơn vi cu trúc mt phn t đưc
khai báo như sau:
typedef struct Node
{
int data;
struct node *pNext;
} NODE;
a) Hãy xây dng hàm tìm và tr v giá tr phn t chn ln nht trong tp hp trong trưng hp biết các
phn t ca tp hp đưc sp xếp theo th t tăng dần v giá trị.
int FindMax (NODE *pHead)
{
}
b) Hãy đánh giá thi gian thc hin trong trưng hp ti nht ca hàm bn viết theo O-ln
1 | Page
TRƯNG ĐI HC BÁCH KHOA HÀ NI
VIN CÔNG NGH THÔNG TIN VÀ TRUYN THÔNG
B MÔN KHOA HC MÁY TÍNH
***
H tên
: ……………………………
Lp: …………………………………
SHSV
: ……………………………….
ĐỀ THI MÔN: CU TRÚC D LIU
VÀ GII THUT
Ngày thi: …../…../….
Thi gian 90’
(
Sinh viên đưc s dng tài liu
)
Hà ni, .…. /….. / …...
Trưng b môn
Bài 1.
a) So sánh ưu nhưc đim khi lưu tr cây nh phân chiu cao dùng: (1) mng, (2) cu trúc liên kết
struct BNode
{
DATA_TYPE data; //là kiu d liu lưu tr ti nút
struct BNode * Lchild, *Rchild; //con tr ti cây con trái và con phi
}
Theo các tiêu chí:
B nh,
thi gian truy cp mt nút bt k,
tìm nút cha ca mt nút bất k trên cây
b) Đánh giá thi gian thc hin ti nht ca hàm sau theo O-lớn
double fastPower(double x, int n)
{
double fract;
if(n==0) return 1;
fract = fastPower(x,n/2);
if(n%2==0) return fract* fract;
else return fract*fract*x;
}
c) So sánh ưu nhưc đim ca phương pháp t chc tìm kiếm dùng mng và áp dng thut toán tìm kiếm
nh phân, cây nh phân tìm kiếm và dùng bng băm theo các tiêu chí sau
Tiêu c
Tìm kiếm nh phân
Cây nh phân tìm kiếm
Bng băm
B nh dùng lưu tr các
phn t
Thi gian tìm kiếm
Thêm phn t
Xoá phn t
In ra danh sách c phn t
hin
Mã đ
CD 2011 - 02
2 | Page
Bài 2.
a) Biểu thc dng hu t là gì? Ưu đim ca biu thc dng hu tố?
b) Định giá biu thc dng hu t sau (trình bày rõ các trng thái trung gian ca STACK
10 2 3 + / 2 ^ 4 12 8 % +
c) V cây biu thc biu din cho biu thc phn b (kng cn phi trình bày các bưc trung gian)
Bài 3.
a) Cho cây nh phân tìm kiếm ban đu như hình
thêm ln lưt dãy khóa 33, 43, 12, 36, 78, 29, 16, 9, 65, 27, 32. Hãy v cây nh phân
kết qu thu đưc cui cùng (không cn trình bày các bưc trung gian).
b) Vi cây nh phân tìm kiếm thu đưc phn a, thc hin xóa ln lưt khóa 18
và 33. Hãy v cây kết qu thu đưc sau mi ln xóa
Chú ý: chn nút thay thế là nút phi nht trên cây con trái
Bài 4. Cho mt đơn đ thvô hưng 𝐺(𝑉, 𝐸) như sau
𝑉 = {𝐴, 𝐵, 𝐶, 𝐷, 𝐸, 𝐹, 𝐺, 𝐻}
𝐸 = {(𝐴, 𝐵), (𝐴, 𝐶), (𝐴, 𝐸), (𝐵, 𝐸), (𝐵, 𝐺), (𝐶, 𝐷), (𝐶, 𝐵), (𝐷, 𝐸), (𝐹, 𝐷), (𝐹, 𝐸), (𝐹, 𝐺), (𝐻, 𝐵), (𝐻, 𝐺)}
a) Hãy biu din đ th trên dùng danh sách kề.
b) Thc hin BFS t đỉnh B, hãy đưa ra th tự các đnh đưc thăm.
c) Hãy đưa ra các loi cnh thu đưc khi BFS ti đnh B (BackEdge, CrossEdge, TreeEdge và ForwardEdge).
Lưu ý: Các đnh trên đ th đưc thăm theo th tự ABC
Bài 5. Để biu din các tp hp s nguyên ta dùng danh sách liên kết đơn vi cu trúc mt phn t đưc
khai báo như sau:
typedef struct Node
{
int data;
struct node *pNext;
} NODE;
a) Hãy xây dng hàm tìm và tr v giá tr phn t chn ln nht trong tp hp trong trưng hp biết các
phn t ca tp hp đưc sp xếp theo th tự tăng dn v giá trị.
int FindMax (NODE *pHead)
{
}
b) Hãy đánh giá thi gian thc hin trong trưng hp ti nht ca hàm bn viết theo O-lớn
| 1/68

Preview text:

Mã đề CD 2012 - 03
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
BỘ MÔN KHOA HỌC MÁY TÍNH ***
ĐỀ THI MÔN: CẤU TRÚC DỮ LIỆU
Hà nội, .…. /….. / …...
Họ tên: …………………………… VÀ GIẢI THUẬT
Trưởng bộ môn
Lớp: …………………………………
Ngày thi: …../…../…. Thời gian 90’
SHSV: ……………………………….
(Sinh viên được sử dụng tài liệu)
Bài 1. Cho hàm khai báo như sau (tham số 𝑎, 𝑏 là các số nguyên không âm) long mistery(int a, int b) { if(a==0) return 0;
if(a%2==0) return 2*mistery(a/2,b);
return b+2*mistery((a-1)/2,b); }
a. Hàm sau thực hiện công việc gì? Tính giá trị của hàm với a=5 và b=7
b. Đánh giá độ phức tạp của hàm mistery theo O-lớn +
Bài 2. Cho cây biểu thức sau
a. Duyệt cây biểu thức để đưa ra biểu thức dạng tiền tố, hậu tố
b. Với a=36 và b=5, hãy minh họa thuật toán định giá biểu thức hậu tố
trên biểu thức hậu tố thu được từ phần a
Chú ý: √ là ký hiệu của toán tử căn bậc hai b 3 /
Bài 3. Cây nhị phân tìm kiếm
a) Thêm lần lượt các nút 25, 32, 14, 21, 19, 17, 23, 5, 9 vào cây nhị a 4
phân tìm kiếm ban đầu rỗng, vẽ cây kết quả thu được
Figure 1 Cây biểu thức
b) Với cây kết quả trong phần b ta xóa nút 1, hãy vẽ cây kết quả thu được.
Thay bằng nút trái nhất trên con phải
c) Cho cấu trúc một nút trên cây được khai báo như sau struct BinaryNode { double data;
struct BinaryNode *Left, *Right; }
Hãy hoàn thiện hàm tìm và trả về số lượng nút có giá trị nhỏ hơn hoặc bằng x trên cây
int *CountNodes(struct BinaryNode *root, double x) Bài 4.
a) Để biểu diễn đa thức bậc n
𝑃𝑛(𝑥) = 𝑎𝑛𝑥𝑛 + 𝑎𝑛−1𝑥𝑛−1+. . +𝑎1𝑥 + 𝑎𝑛+1
Và thực hiện các thao tác cộng, trừ, nhân và chia với đa thức này thì ta nên sử dụng mảng hay danh
sách liên kết
? Hãy giải thích tại sao.
b) Giả sử chúng ta có một danh sách gồm 100 phần tử kiểu double được lưu trữ trong mảng, và cần
phải thực hiện sắp xếp. Khi đó ta nên chọn thuật toán sắp xếp nào trong các thuật toán đã học để
thu được hiệu quả tốt nhất? Giải thích lý do?
Nếu số lượng phần tử là 1 000 000 và được lưu trữ dùng danh sách liên kết đơn thì nên dùng thuật
toán nào? Giải thích lý do?
c) Giả sử chúng ta cần quản lý một danh sách khách hàng có tối đa 1000 người (không biết trước số
lượng) và cần thực hiện tìm kiếm theo họ tên. Hãy mô tả phương pháp của bạn để:
 Thực hiện việc tìm kiếm khách hàng một cách nhanh nhất
 Thực hiện lưu trữ và tìm kiếm tiết kiệm bộ nhớ nhất có thể Hãy giải thích?
d) Giả sử chúng ta có một danh sách các số nguyên gồm 1 000 000 số. Hãy đưa ra một thuật toán hiệu
quả để thống kê các số trùng nhau trong danh sách.
Đánh giá thời gian thực hiện của thuật toán của bạn theo O lớn. A D
Bài 5. Cho đồ thị vô hướng như hình bên
a) Minh họa cách lưu trữ đồ thị trên sử dụng ma B H
trận kề và danh sách kề
b) Thực hiện DFS tại đỉnh B, hãy đưa ra thứ tự E thăm các đỉnh
Đưa ra các loại cạnh trên cây khung DFS tại B. G C F
Figure 2 Đồ thị G (V, E) Mã đề
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI DH 2013 - 01
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
BỘ MÔN KHOA HỌC MÁY TÍNH ***
ĐỀ THI MÔN: CẤU TRÚC DỮ LIỆU
Hà nội, .…. /….. / …...
Họ tên: …………………………… VÀ GIẢI THUẬT
Trưởng bộ môn
Lớp: …………………………………
Ngày thi: …../…../…. Thời gian 90’
SHSV: ……………………………….
(Sinh viên được sử dụng tài liệu) Bài 1.
a) Cho cây AVL sau, vẽ cây kết quả khi thêm phần tử 29, và xóa phần tử 25 25
b) Cho một cây nhị phân tìm kiếm có khóa là các số nguyên, và
một giá trị k, Hãy viết hàm tìm và in ra tất cả các cặp phần
tử (a, b) trên cây sao cho 𝑎 + 𝑏 ≤ 𝑘
c) So sánh thời gian thêm và tìm kiếm của các cấu trúc dữ liệu 12 36
sau: Bảng băm, mảng, danh sách liên kết, hàng đợi
Bài 2. Cho hai văn bản A và B đã được tách từ, gọi số lượng từ 7 21 31 45
phân biệt của văn bản A là n, và của văn bản B là m
(𝑛 ≤ 𝑚). Hãy đưa ra thuật toán tìm tập từ chung của hai văn bản theo tiêu chí 10 27 33
a) Thời gian thực hiện nhanh nhất
b) Bộ nhớ phụ tốn ít nhất
Trong cả hai trường hợp, hãy chỉ rõ thời gian thực hiện theo O-lớn và bộ nhớ phụ cần sử dụng
Bài 3. Cho một từ điển tiếng anh gồm n từ, và một danh sách ký tự phân biệt độ dài m (𝑚 ≪ 𝑛). Hãy xây
dựng thuật toán tìm và đưa ra từ dài nhất trong từ điển được tạo từ các ký tự trong danh sách.
Thời gian của thuật toán cần là 𝑂(𝑛)
Bài 4. Cho một danh sách số nguyên dương gồm n phần tử (𝑛 ≈ 1 𝑡ỷ) và một số nguyên dương k(𝑘 ≪ 𝑛),
Hãy đưa ra thuật toán đếm số cặp trong danh sách ban đầu có tổng < 𝑘 với thời gian thực hiện nhỏ hơn 𝑂(𝑛 log 𝑛)
Bài 5. Cho một luồng các ký tự liên tục, hãy xây dựng thuật toán đưa ra danh sách ký tự không được lặp
trong luồng ký tự đó (giả sử rằng tồn tại ít nhất một ký tự như vậy).
Chú ý: với luồng ta chỉ có thể duyệt các ký tự 1 lần và theo 1 chiều 1 | P a g e CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Bài 6. Cho danh sách thông tin của n cuộc họp với thời điểm bắt đầu và thời điểm kết thúc. Hãy đưa ra thuật
toán sắp xếp các cuộc họp này vào các phòng sao cho số lượng phòng được sử dụng là nhỏ nhất có thể.
Độ phức tạp của thuật toán bạn đề xuất là bao nhiêu?
Bài 7. Trong một trình duyệt cần lưu trữ các URL đã được thăm theo tần số truy cập giảm dần.
Hãy xây dựng CTDL lưu trữ các URL hỗ trợ các thao tác  Thêm/xóa  Tìm kiếm
Với thời gian 𝑂(log 𝑛), liệu có thể lưu trữ để hực hiện các thao tác trên với thời gian 𝑂(1)?
Bài 8. Cho 2 Queue thông thường, hãy xây dựng thuật toán sắp xếp chỉ dung 2 queue đó (không sử dụng
thêm bộ nhớ phụ) để sắp xếp danh sách gồm n phần tử số nguyên.
Các thao tác được dùng chỉ là enqueue và dequeue J A
Bài 9. Cho m mảng số nguyên với số lượng G F
phần tử mỗi mảng là n, các phần tử trong B
mỗi mảng đều đã được sắp xếp. Hãy xây
dựng thuật toán để tìm khoảng nhỏ nhất sao K
cho mỗi mảng có ít nhất một phần tử ở trong khoảng đó. I H E Ví dụ. C A1={1,2,5,7,8} M A2={1,4,6,7,8} L A3={2,5,9,10,12} D
Thì khoảng nhỏ nhất có thể là [8,9]
Gợi ý: Dùng priority queue
Bài 10. Cho đồ thị sau a) Thực hiện DFS tại E
b) Đưa ra phân loại cạnh theo thứ tự duyệt ở phần a Thứ tự thăm theo ABC
Chú ý: Những bài yêu cầu viết hàm mới phải viết code cho hàm, các bài xây dựng thuật toán chỉ cần nêu
ý tưởng (và ví dụ minh họa cho ý tưởng) 2 | P a g e CuuDuongThanCong.com
https://fb.com/tailieudientucntt Mã đề CD 2011 - 01
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
BỘ MÔN KHOA HỌC MÁY TÍNH ***
ĐỀ THI MÔN: CẤU TRÚC DỮ LIỆU
Hà nội, .…. /….. / …...
Họ tên: …………………………… VÀ GIẢI THUẬT
Trưởng bộ môn
Lớp: …………………………………
Ngày thi: …../…../…. Thời gian 90’
SHSV: ……………………………….
(Sinh viên được sử dụng tài liệu) Bài 1.
a) Phân biệt giữa mảng cấp phát động và mảng cấp phát tĩnh. Khi nào nên dùng mảng cấp phát động, hoặc
mảng cấp phát tĩnh? Cho ví dụ mình họa.
b) Đánh giá thời gian thực hiện tồi nhất của hàm sau theo O-lớn
double fastPower(double x, int n) { double fract; if(n==0) return 1;
if(n%2==0) return fastPower(x,n/2)*fastPower(x,n/2);
else return fastPower(x,n/2)*fastPower(x,n/2)*x; }
c) So sánh ưu nhược điểm của phương pháp tổ chức tìm kiếm dùng mảng và áp dụng thuật toán tìm kiếm
nhị phân, cây nhị phân tìm kiếm và dùng bảng băm theo các tiêu chí sau Tiêu chí
Tìm kiếm nhị phân
Cây nhị phân tìm kiếm Bảng băm
Bộ nhớ dùng lưu trữ các phần tử Thời gian tìm kiếm Thêm phần tử Xoá phần tử
In ra danh sách các phần tử hiện có Bài 2.
a) Biểu thức dạng hậu tố là gì? Ưu điểm của biểu thức dạng hậu tố?
b) Chuyển biểu thức dạng trung tố sau sang dạng hậu tố
𝑎 + 3/(2 ∗ 𝑎 − 𝑐 ∗ 𝑏) − 𝑒
c) Vẽ cây biểu thức biểu diễn cho biểu thức ở phần b (không cần phải trình bày các bước trung gian) 1 | P a g e CuuDuongThanCong.com
https://fb.com/tailieudientucntt Bài 3.
a) Cho cây nhị phân tìm kiếm ban đầu như hình
thêm lần lượt dãy khóa 43, 12, 36, 78, 29, 16, 9, 65, 27, 32. Hãy vẽ cây nhị phân kết quả thu được cuối
cùng (không cần trình bày các bước trung gian).
b) Với cây nhị phân tìm kiếm thu được ở phần a, thực hiện xóa lần lượt khóa 18 và 36. Hãy vẽ cây kết quả
thu được sau mỗi lần xóa
Chú ý: chọn nút thay thế là nút phải nhất trên cây con trái
Bài 4. Cho một đơn đồ thị vô hướng 𝐺(𝑉, 𝐸) như sau
𝑉 = {𝐴, 𝐵, 𝐶, 𝐷, 𝐸, 𝐹, 𝐺, 𝐻}
𝐸 = {(𝐴, 𝐵), (𝐴, 𝐶), (𝐴, 𝐸), (𝐵, 𝐸), (𝐵, 𝐺), (𝐶, 𝐷), (𝐶, 𝐵), (𝐷, 𝐸), (𝐹, 𝐷), (𝐹, 𝐸), (𝐹, 𝐺), (𝐻, 𝐵), (𝐻, 𝐺)}
a) Hãy biểu diễn đồ thị trên dùng danh sách kề.
b) Thực hiện DFS từ đỉnh D, hãy đưa ra thứ tự các đỉnh được thăm.
c) Hãy đưa ra các loại cạnh thu được khi DFS tại đỉnh D (BackEdge, CrossEdge, TreeEdge và ForwardEdge).
Lưu ý: Các đỉnh trên đồ thị được thăm theo thứ tự ABC
Bài 5. Để biểu diễn các tập hợp số nguyên ta dùng danh sách liên kết đơn với cấu trúc một phần tử được khai báo như sau: typedef struct Node { int data; struct node *pNext; } NODE;
a) Hãy xây dựng hàm tìm và trả về giá trị phần tử chẵn lớn nhất trong tập hợp trong trường hợp biết các
phần tử của tập hợp được sắp xếp theo thứ tự tăng dần về giá trị.
int FindMax (NODE *pHead) { }
b) Hãy đánh giá thời gian thực hiện trong trường hợp tồi nhất của hàm bạn viết theo O-lớn 2 | P a g e CuuDuongThanCong.com
https://fb.com/tailieudientucntt
ĐỀ THI: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT (Thời gian 90’)
Mã đề CDK54-2010-01
Sinh viên được sử dụng tài liệu Bài 1.
a) Kích thước của 1 biến kiểu char là 1 Byte, biến kiểu int là 4 byte, kiểu double là 8 byte. Kích thước của 1
con trỏ kiểu char là ? con trỏ kiểu 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. Kiểu int sẽ có kích thước bằng số bit của kiểu máy đó, nếu mà kiểu
int là 32 bit tức là đó là máy 32 bit. Như vậy kích thước con trỏ ở đây là 4 byte (32 bit).
b) Đánh giá thời gian thực hiện của thuật toán đệ quy sau theo mô hình O-lớn
Cho ma trận A kích thước 𝑛 × 𝑚, ma trận 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á độ phức tạp của đoạn chương trình trên theo O-lớn
Lệnh cơ sở là lệnh C[i][j] += A[i][k] * B[k][j];
Có 3 vòng lặp lồng nhau, thời gian thực hiện 𝑛−1 𝑚−1 𝑙−1 𝑛−1 𝑚−1
𝑇(𝑛) = � � � 1 = � � (𝑙 − 1 + 1) =. . = 𝑛 × 𝑚 × 𝑙 𝑖=0 𝑘=0 𝑗=0 𝑖=0 𝑘=0
Vậy độ phức tạp cỡ 𝑂(𝑛 × 𝑚 × 𝑙)
Bài 2. Trả lời các câu hỏi sau
a) Trong các phương pháp sắp xếp: lựa chọn, chèn, đổi chỗ(nổi bọt), quicksort (sắp xếp nhanh), mergesort
(sắp xếp trộn), thì phương pháp nào là phù hợp nhất để sắp xếp trên danh sách liên kết đơn? Giải thích lựa chọn của bạn.
Các thuật toán trên được chia thành 2 loại là cơ bản (𝑂(𝑛2)) và nâng cao (𝑂(𝑛 log 𝑛))
Sắp xếp trên danh sách liên kết đơn thì mergesort là phù hợp hơn vì :
• Thời gian trung bình trong trường hợp tồi nhất cỡ 𝑂(𝑛 log 𝑛)
• Cài đặt đơn giản hơn QuickSort
b) Danh sách tên của 1000 sinh viên được lưu trữ trong mảng nhưng không theo 1 thứ tự nào.Hãy nêu
những ưu điểm và nhược điểm của phương pháp lưu trữ này
(các tiêu chí đánh giá: bộ nhớ, thời gian tìm kiếm, thêm, xóa) CuuDuongThanCong.com
https://fb.com/tailieudientucntt Ưu điểm:
• Chỉ lưu mỗi tên, không cần lưu thêm thông tin phụ (con trỏ…)
• Có thể truy cập trực tiếp từng phần tử thông qua chỉ số Nhược điểm
• Có thể lãng phí bộ nhớ nếu không dùng hết
• Vì không cần sắp xếp theo thứ tự nên việc thêm phần tử đơn giản (chỉ cần thêm vào cuối). Tuy
nhiên việc tìm kiếm mất nhiều thời gian hơn do chỉ có thể tìm kiếm tuần tự (𝑂(𝑛)).
• Thời gian xóa gồm tìm kiếm khóa cần xóa (𝑂(𝑛)) và xóa phần tử (𝑂(1) do chỉ cần đổi chỗ với
phần tử cuối và giảm số lượng đi 1) Bài 3.
a) Trong mạng LAN có 1 máy in mạng được sử dụng chung. Các công việc in gửi đến máy được lưu trữ
trong 1 hàng đợi, địa chỉ của các công việc được lưu trữ cho đến khi máy sẵn sàng. Công việc mới sẽ
được xếp cuối cùng trong hàng đợi. Nêu các lý do tại sao nên dùng hàng đợi cài đặt bằng danh sách liên
kết thay vì cài đặt bằng mảng.
Dùng hàng đợi cài đặt bằng danh sách liên kết vì:
• Số lượng công việc in ta không thể biết trước nên dùng danh sách liên kết sẽ tiết kiệm bộ nhớ hơn.
• Ta chỉ lưu trữ địa chỉ của công việc chứ không phải nội dung công việc (nội dung sẽ được để trên
máy có yêu cầu in) do đó tiết kiệm được bộ nhớ (do cần phải dùng ít bộ nhớ hơn rất nhiều)
Chú ý: ở đây là hàng đợi nên lấy ra là ở đầu hàng và thêm vào ở cuối hàng, ta không lấy ngẫu nhiên 1
phần tử trong hàng, và sau khi lấy ta cũng không phải dịch các phần tử còn lại.
b) Áp dụng thuật toán chuyển biểu thức dạng trung tố sang dạng hâu tố bằng stack để chuyển biểu thức
sau sang dạng hậu tố (cần nêu rõ các bước trung gian trong quá trình tính)
3 + 5 ^ (12 / 6 + 1) – 7 ∗ 15 / 3 + 6
Biểu thức hậu 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. Biểu diễn đồ thị dùng danh sách kề
b. Thực hiện duyệt đồ thị theo chiều sâu (DFS) xuất phát từ đỉnh A, vẽ cây khung thu được
Bài 5. Viết hàm nhận đầu vào là 1 ma trận kề biểu diễn cho 1 đồ thị vô hướng , và số lượng đỉnh trên đồ thị.
Hàm kiểm 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 lại
thì hàm trả về giá trị 0.
int ktLienThong(int Adj[100][100], int n) { //Thân hàm }
Trong đó 𝑛 là số lượng đỉnh thực sự trên đồ thị ( 0 < 𝑛 ≤ 100), Adj là ma trận kề lưu trữ đồ thị.
Chú ý : đồ thị liên thông nếu mà giữa hai cặp đỉnh bất kỳ luôn tồn tại đườ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 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
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 return 1; }
Thời gian thực hiện 𝑂(𝑛2)
Hãy đưa ra đánh giá thời gian thực hiện của thuật toán của bạn theo O-lớn
Chú ý: chương trình sử dụng thuật toán tối ưu hơn sẽ được đánh giá cao hơn! CuuDuongThanCong.com
https://fb.com/tailieudientucntt
ĐỀ THI: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT (Thời gian 90’)
Mã đề CDK54-2010-02
Sinh viên được sử dụng tài liệu Bài 1.
a) Trình bày sự khác biệt giữa mảng cấp phát bộ nhớ động và mảng cấp phát tĩnh? Khi nào dùng mảng cấp
phát động, mảng cấp phát tĩnh, cho ví dụ. Xem trong vở
b) Đánh giá thời gian thực hiện của thuật toán tính mũ nhanh sau theo mô hình O-lớn
double fastPower(double x, int n) { double fract; if(n==0) return 1;
fract = fastPower(x,n/2);
if(n%2==0) return fract*fract;
else return fract*fract*x; }
Thuật toán trên sẽ thực hiện việc tính 𝑥𝑛
Thuật toán này là thuật toán đệ quy, ta có công thức đệ quy là 𝑛 𝑇(𝑛) = 𝑇 �2� + 1
Thời gian thực hiện theo O-lớn là O(logn)
Chú ý: Có thể dùng 1 trong 3 phương pháp đã học để chứng minh! Bài 2.
a) Trong các phương pháp sắp xếp: lựa chọn, chèn, đổi chỗ(nổi bọt), quicksort (sắp xếp nhanh), mergesort
(sắp xếp trộn), thì phương pháp nào là phù hợp nhất để sắp xếp trên mảng với số lượng các phần tử
lớn? Giải thích lựa chọn của bạn.
QuickSort là phù hợp nhất để sắp xếp trên mảng với số lượng phần tử lớn vì:
• Thời gian cỡ 𝑂(𝑛 log 𝑛)
• So với mergersort thì nó không cần sử dụng thêm bộ nhớ phụ
• Không cần thực hiện thao tác trộn
b) Cho mảng A={14,45,21,12,7,87,25,56,91,64,33,41,72,89,62}
Hãy minh họa lần lặp thứ nhất của thuật toán sắp xếp nổi bọt trên A.
Tùy từng trường hợp sắp xếp tăng dần hoặc giảm dần mà kết quả sẽ khác nhau. Trong trường hợp tăng
dần thì lần lặp đầu tiên, khóa có giá trị lớn nhất sẽ bị đẩy về cuối dãy. CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Cụ thể xem ví dụ trong slide Bài 3.
a) Hàng đợi vòng (Circle Queue) là gì ? Tác dụng của việc tổ chức hàng đợi dạng vòng?
Hàng đợi vòng và tác dụng của hàng đợi vòng : Xem trong slide vì đây là phần lý thuyết căn bản
b) Áp dụng thuật toán định giá biểu thức hậu tố bằng stack để tính giá trị biểu thức dạng hậu tố sau (cần
nêu rõ các bước trung gian trong quá trình tính) 15 2 3 + / 2 ^ 4 12 2 − % +
Kết quả là 13, còn trình tự thực hiện xem các ví dụ đã chữa trên lớp CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Bài 4. Cho đồ thị
a. Biểu diễn đồ thị dùng ma trận kề
b. Thực hiện thuật toán PRIM và đưa ra cây khung có trọng số nhỏ nhất trên đồ thị (cần mô tả rõ các bước thực hiện)
Cây khung trọng số nhỏ nhất là 21
Trình tự thực hiện xem các ví dụ đã chữa trên lớp
Bài 5. Viết hàm nhận đầu vào là 1 ma trận kề biểu diễn cho 1 đồ thị vô hướng , và số lượng đỉnh trên đồ thị.
Hàm kiểm 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 lại
thì hàm trả về giá trị 0.
int ktLienThong(int Adj[100][100], int n) { //Thân hàm }
Trong đó 𝑛 là số lượng đỉnh thực sự trên đồ thị ( 0 < 𝑛 ≤ 100), Adj là ma trận kề lưu trữ đồ thị.
Chú ý : đồ thị liên thông nếu mà giữa hai cặp đỉnh bất kỳ luôn tồn tại đường đi.
Hãy đưa ra đánh giá thời gian thực hiện của thuật toán của bạn theo O-lớn
Chú ý: chương trình sử dụng thuật toán tối ưu hơn sẽ được đánh giá cao hơn! CuuDuongThanCong.com
https://fb.com/tailieudientucntt
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 1
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
Học phần:.........CẤU TRÚC DL & TT.........Mã HP....IT3011......Mã lớp: ........ 119183 ........
Bài thi [ ] giữa kỳ .[ X] cuối kỳ.. Năm học... 2020-2021..... Ngày thi:.......13 / 01 / 2021...........
Không sử dùng tài liệu.
Xác nhận của bộ môn
Thời gian làm bài 90 phút. PHẦN CÂU HỎI
Câu 1 (2đ) Cho hàm sau:
int process(int a[], int i, int j){
if(i > j) return 0;
if(i == j) return a[i]; int m = (i+j)/2;
return process(a,i,m) + process(a,m+1,j); }
a) Hãy cho biết hàm process thực hiện công việc gì? Giải thích?
b) Với giả thiết các phép toán cần thực hiện đều có thể thực hiện trong thời gian O(1), hãy đưa ra
đánh giá thời gian tính của thuật toán trong trường hợp tối nhất theo O-lớn.
Câu 2 (1đ) Lịch trình di chuyển trong ngày của một cá nhân được lưu trữ trong danh sách liên kết theo
thứ tự tăng dần thời gian, với một nút được định nghĩa như sau: typedef struct aPlace{
int hour, min; // thoi diem ghe tham trong ngay theo gio va phut
char locName[255]; // ten dia diem
struct aPlace* next; // con trỏ đến nút kế tiếp }PLACE;
Giả sử để truy vết F1 của Covid mới xuất hiện, cục y tế dự phòng phát ra thông báo những người qua
một địa điểm tên reportLocName sau khoảng thời gian reportHour giờ, reportMin phút (cùng
ngày) đều phải trình báo y tế. Hãy hoàn thiện hàm
int needMedicalReport(PLACE* visitedPlaces, char* reportLocName, int
reportHour, int reportMin)

Hàm trả về 1 nếu cá nhân cần phải khai báo y tế, và 0 nếu ngược lại (trong đó visitedPlaces là con
trỏ đầu đến danh sách liên kết các địa điểm cùng với thời gian ghé thăm của người cần kiểm tra). Câu 3 (2đ)
a) Cho dãy số sau cần sắp xếp theo thứ tự không tăng 7, 9, 5, 3, 1, 6, 4, 8, 2. Hãy trình diễn thuật
toán sắp xếp trộn sắp xếp dãy đã cho. 1
b) Hãy lập trình ngôn ngữ C hàm int isMinHeap(int A[], int n) kiểm tra xem mảng A[]
chiều dài n (chỉ số các phần tử từ 0 đến n-1) có là đống min (min-heap) hay không ? (trả về 0 là sai, và 1 là đúng). Câu 4 (3đ)
a) Hãy vẽ cây nhị phân tìm kiếm (BST) thu được (không cần vẽ bước trung gian) bằng cách chèn liên
tiếp dãy khóa sau vào BST bắt đầu từ BST rỗng: 11, 4, 8, 21, 16, 1, 3, 27, 14
b) Hãy vẽ BST thu được sau khi loại bỏ nút có khóa bằng 11 khỏi BST thu được ở câu a)
c) Cấu trúc dữ liệu mỗi nút của một cây nhị phân được định nghĩa như sau: typedef struct TNode{
int key;// khóa của nút
struct TNode* left; // trỏ đến nút con trái
struct TNode* right; // trỏ đến nút con phải }TNode;
Hãy lập trình hàm int checkBST(TNode* p) trả về 1 nếu cây nhị phân gốc p là một BST và trả về 0 nếu ngược lại. Câu 5 (1đ)
a) Đưa ra kết quả duyệt cây theo thứ tự sau.
b) Cho a=3, b=5,c=-4,d=6,e=2,f=9 tính giá trị biểu
thức biểu diễn bởi cây biểu thức bên.
Câu 6 (1đ) Cho cấu trúc mô tả vị trí ngồi của n người trong một phòng họp typedef struct aLoc{
double x,y;// toa độ
char name[51];// tên của người họp } LOC;
Danh sách được cho bởi mảng listLoc (các phần tử đánh số từ 0 đến n-1). Giả sử sau khi xét nghiệm
covid có nguời ngồi ở vị trí tọa độ x1,y1 bị dương tính covid, và những người trong phạm vi khoảng cách
đến (x1,y1) nhỏ hơn hoặc bằng d cần được cách ly ngay. Hãy viết hàm
void listF1Covid(LOC *listLoc, int n, double x1, double y1, double d)
in ra danh sách (tên người) những người cần được cách ly (kể cả người ở vị trí tọa độ x1,y1).
(Chú ý: Khoảng cách tính theo Euclide)
------------------ Hết -------------------
Cán bộ coi thi không giải thích gì thêm 2 Mã đề CD 2011 - 01
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
BỘ MÔN KHOA HỌC MÁY TÍNH ***
ĐỀ THI MÔN: CẤU TRÚC DỮ LIỆU
Hà nội, .…. /….. / …...
Họ tên: …………………………… VÀ GIẢI THUẬT
Trưởng bộ môn
Lớp: …………………………………
Ngày thi: …../…../…. Thời gian 90’
SHSV: ……………………………….
(Sinh viên được sử dụng tài liệu) Bài 1.
a) Phân biệt giữa mảng cấp phát động và mảng cấp phát tĩnh. Khi nào nên dùng mảng cấp phát động, hoặc
mảng cấp phát tĩnh? Cho ví dụ mình họa.
b) Đánh giá thời gian thực hiện tồi nhất của hàm sau theo O-lớn
double fastPower(double x, int n) { double fract; if(n==0) return 1;
if(n%2==0) return fastPower(x,n/2)*fastPower(x,n/2);
else return fastPower(x,n/2)*fastPower(x,n/2)*x; }
c) So sánh ưu nhược điểm của phương pháp tổ chức tìm kiếm dùng mảng và áp dụng thuật toán tìm kiếm
nhị phân, cây nhị phân tìm kiếm và dùng bảng băm theo các tiêu chí sau Tiêu chí
Tìm kiếm nhị phân
Cây nhị phân tìm kiếm Bảng băm
Bộ nhớ dùng lưu trữ các phần tử Thời gian tìm kiếm Thêm phần tử Xoá phần tử
In ra danh sách các phần tử hiện có Bài 2.
a) Biểu thức dạng hậu tố là gì? Ưu điểm của biểu thức dạng hậu tố?
b) Chuyển biểu thức dạng trung tố sau sang dạng hậu tố
𝑎 + 3/(2 ∗ 𝑎 − 𝑐 ∗ 𝑏) − 𝑒
c) Vẽ cây biểu thức biểu diễn cho biểu thức ở phần b (không cần phải trình bày các bước trung gian) 1 | P a g e Bài 3.
a) Cho cây nhị phân tìm kiếm ban đầu như hình
thêm lần lượt dãy khóa 43, 12, 36, 78, 29, 16, 9, 65, 27, 32. Hãy vẽ cây nhị phân kết quả thu được cuối
cùng (không cần trình bày các bước trung gian).
b) Với cây nhị phân tìm kiếm thu được ở phần a, thực hiện xóa lần lượt khóa 18 và 36. Hãy vẽ cây kết quả
thu được sau mỗi lần xóa
Chú ý: chọn nút thay thế là nút phải nhất trên cây con trái
Bài 4. Cho một đơn đồ thị vô hướng 𝐺(𝑉, 𝐸) như sau
𝑉 = {𝐴, 𝐵, 𝐶, 𝐷, 𝐸, 𝐹, 𝐺, 𝐻}
𝐸 = {(𝐴, 𝐵), (𝐴, 𝐶), (𝐴, 𝐸), (𝐵, 𝐸), (𝐵, 𝐺), (𝐶, 𝐷), (𝐶, 𝐵), (𝐷, 𝐸), (𝐹, 𝐷), (𝐹, 𝐸), (𝐹, 𝐺), (𝐻, 𝐵), (𝐻, 𝐺)}
a) Hãy biểu diễn đồ thị trên dùng danh sách kề.
b) Thực hiện DFS từ đỉnh D, hãy đưa ra thứ tự các đỉnh được thăm.
c) Hãy đưa ra các loại cạnh thu được khi DFS tại đỉnh D (BackEdge, CrossEdge, TreeEdge và ForwardEdge).
Lưu ý: Các đỉnh trên đồ thị được thăm theo thứ tự ABC
Bài 5. Để biểu diễn các tập hợp số nguyên ta dùng danh sách liên kết đơn với cấu trúc một phần tử được khai báo như sau: typedef struct Node { int data; struct node *pNext; } NODE;
a) Hãy xây dựng hàm tìm và trả về giá trị phần tử chẵn lớn nhất trong tập hợp trong trường hợp biết các
phần tử của tập hợp được sắp xếp theo thứ tự tăng dần về giá trị.
int FindMax (NODE *pHead) { }
b) Hãy đánh giá thời gian thực hiện trong trường hợp tồi nhất của hàm bạn viết theo O-lớn 2 | P a g e Mã đề CD 2011 - 02
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
BỘ MÔN KHOA HỌC MÁY TÍNH ***
ĐỀ THI MÔN: CẤU TRÚC DỮ LIỆU
Hà nội, .…. /….. / …...
Họ tên: …………………………… VÀ GIẢI THUẬT
Trưởng bộ môn
Lớp: …………………………………
Ngày thi: …../…../…. Thời gian 90’
SHSV: ……………………………….
(Sinh viên được sử dụng tài liệu) Bài 1.
a) So sánh ưu nhược điểm khi lưu trữ cây nhị phân chiều cao ℎ dùng: (1) mảng, (2) cấu trúc liên kết struct BNode {
DATA_TYPE data; //là kiểu dữ liệu lưu trữ tại nút
struct BNode * Lchild, *Rchild; //con trỏ tới cây con trái và con phải } Theo các tiêu chí: • Bộ nhớ,
• thời gian truy cập một nút bất kỳ,
• tìm nút cha của một nút bất kỳ trên cây
b) Đánh giá thời gian thực hiện tồi nhất của hàm sau theo O-lớn
double fastPower(double x, int n) { double fract; if(n==0) return 1; fract = fastPower(x,n/2);
if(n%2==0) return fract* fract; else return fract*fract*x; }
c) So sánh ưu nhược điểm của phương pháp tổ chức tìm kiếm dùng mảng và áp dụng thuật toán tìm kiếm
nhị phân, cây nhị phân tìm kiếm và dùng bảng băm theo các tiêu chí sau Tiêu chí
Tìm kiếm nhị phân
Cây nhị phân tìm kiếm Bảng băm
Bộ nhớ dùng lưu trữ các phần tử Thời gian tìm kiếm Thêm phần tử Xoá phần tử
In ra danh sách các phần tử hiện có 1 | P a g e Bài 2.
a) Biểu thức dạng hậu tố là gì? Ưu điểm của biểu thức dạng hậu tố?
b) Định giá biểu thức dạng hậu tố sau (trình bày rõ các trạng thái trung gian của STACK 10 2 3 + / 2 ^ 4 12 8 − % +
c) Vẽ cây biểu thức biểu diễn cho biểu thức ở phần b (không cần phải trình bày các bước trung gian) Bài 3.
a) Cho cây nhị phân tìm kiếm ban đầu như hình
thêm lần lượt dãy khóa 33, 43, 12, 36, 78, 29, 16, 9, 65, 27, 32. Hãy vẽ cây nhị phân
kết quả thu được cuối cùng (không cần trình bày các bước trung gian).
b) Với cây nhị phân tìm kiếm thu được ở phần a, thực hiện xóa lần lượt khóa 18
và 33. Hãy vẽ cây kết quả thu được sau mỗi lần xóa
Chú ý: chọn nút thay thế là nút phải nhất trên cây con trái
Bài 4. Cho một đơn đồ thị vô hướng 𝐺(𝑉, 𝐸) như sau
𝑉 = {𝐴, 𝐵, 𝐶, 𝐷, 𝐸, 𝐹, 𝐺, 𝐻}
𝐸 = {(𝐴, 𝐵), (𝐴, 𝐶), (𝐴, 𝐸), (𝐵, 𝐸), (𝐵, 𝐺), (𝐶, 𝐷), (𝐶, 𝐵), (𝐷, 𝐸), (𝐹, 𝐷), (𝐹, 𝐸), (𝐹, 𝐺), (𝐻, 𝐵), (𝐻, 𝐺)}
a) Hãy biểu diễn đồ thị trên dùng danh sách kề.
b) Thực hiện BFS từ đỉnh B, hãy đưa ra thứ tự các đỉnh được thăm.
c) Hãy đưa ra các loại cạnh thu được khi BFS tại đỉnh B (BackEdge, CrossEdge, TreeEdge và ForwardEdge).
Lưu ý: Các đỉnh trên đồ thị được thăm theo thứ tự ABC
Bài 5. Để biểu diễn các tập hợp số nguyên ta dùng danh sách liên kết đơn với cấu trúc một phần tử được khai báo như sau: typedef struct Node { int data; struct node *pNext; } NODE;
a) Hãy xây dựng hàm tìm và trả về giá trị phần tử chẵn lớn nhất trong tập hợp trong trường hợp biết các
phần tử của tập hợp được sắp xếp theo thứ tự tăng dần về giá trị.
int FindMax (NODE *pHead) { }
b) Hãy đánh giá thời gian thực hiện trong trường hợp tồi nhất của hàm bạn viết theo O-lớn 2 | P a g e