Đề thi môn Cấu trúc dữ liệu và giải thuật 2011 | Trường Đại học Bách khoa Hà Nội

Ưu điểm của biểu thức dạng hậu tố là chỉ có một cách định giá (cách tính) duy nhất. Không như biểu thức dạng trung tố cần quy định thêm về độ ưu tiên của toán tử, và dấu ngoặc. Biểu thức dạng hậu tố được dùng để biểu diễn biểu thức trong máy tính. Tài liệu được sưu tầm, giúp bạn ôn tập và đạt kết quả cao. Mời bạn đọc đón xem!

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 minh ha. (1 Đim)
Mng cp phát tĩnh Mng cp phát đng
B nh
B nh ly t phn DATA
B nh ly t HEAP
Kích thưc
B nh gii hn, ch có th cp phát cho các
biến có kích thưc nh
Dung lưng b nh ln, có th cp phát đưc cho
các biến kích thưc ln
Thi đim cp
phát
B nh đưc cp phát ti thi đim biên dch
chương trình
B nh đưc cp phát ti thi đim chy
Thu hi b
nh
H điu hành s t thu hi b nh khi không
dùng đến
Ngưi lp trình phi t thu hi b nh xin cp
phát
Cp phát tĩnh: cho các biến kích thưc nh, các biến đơn
float a,b, Ar[100];
Cp phát đng: Dùng cho các biến kích thưc ln, các mng ln,
double *A;
A = (double*)malloc(10000*sizeof(double));
b) Đánh giá thi gian thc hin ti nht ca hàm sau theo O-ln (1 Đim)
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;
}
Mã đ
CD 2011 - 01
2 | Page
fract = fastPower(x,n/2);
Được gi 2 ln trong hàm (ng vi if hoc else), ta có công thc đ quy tng quát là
() =
1 󰉦 = 0
2
2
+ 1 󰉦 > 0
Ta có th viết gn li là
(
)
= 2󰇡
󰇢+ 1
Áp dng đnh l ý th vi = 2, = 2
(
)
= 1


trưng hp 1 ca đnh l ý th
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 (1 Đim)
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
()
T l vi s phn t, tuy nhiên
mi phn t không phi lưu tr
thêm dữ liu tha
()
T l vi s phn t, tuy nhiên
mi phn t phi lưu tr thêm
dữ liu tha (2 con tr)
S ng ô nh xác đnh trưc, là
kích thưc bng băm (tng ln
hơn s ng phn t cn lưu
nhiu ln)
Thi gian tìm
kiếm
(log )
(log )
(1)
Thêm phn t
()
(log )
(1)
Xoá phn t
()
(log )
(1)
In ra danh sách
các phn t hin
()
()
Không h tr thao tác này, nếu
mun in ta phi duyt toàn b
bng băm
Bài 2.
a) Biu thc dng hu t là gì? Ưu đim ca biu thc dng hu tố? (1 Đim)
động
Ví d: 3 5 + a
Ưu đim ca biu thc dng hu t là ch có mt cách đnh giá (cách tính) duy nht. Không như biu
thc dng trung t cn quy đnh thêm v độ ưu tiên ca toán t, và du ngoc.
b) Chuyn biu thc dng trung t sau sang dng hu t (1 Đim)
+ 3/(2  )
Gp
STACK
a
+
+
3
+
/
+,/
(
+,/, (
2
+,/, (
*
+,/, (,
a
+,/, (,
3 | Page
-
+,/, (,
c
+,/, (,
*
+,/, (, ,
b
+,/, (, ,
)
+,/
-
e
Biu thc kết qu: 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)
(1 Đim)
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). (1 Đim)
4 | Page
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
(1 Đim)
Bài 4. Cho mt đơn đ th ng (, ) như sau
= {, , , , , , , }
= {(, ), (, ), (, ), (, ), (, ), (, ), (, ), (, ), (, ), (, ), (, ), (, ), (, )}
a) Hãy biu din đ th trên dùng danh sách k (1 Đim)
5 | Page
b) Thc hin DFS t đỉnh D, hãy đưa ra th t các đnh được thăm.
(1 Đim)
Ch cn v đưc hình trng hàng đi hoc cây khung DFS ti D là đưc đủ đim
STT
STACK
1
D
2
D, C
3
D, C, A
4
D, C, A, B
5
D, C, A, B, E
6
D, C, A, B, E, F
7
D, C, A, B, E, F, G
8
D, C, A, B, E, F, G, H
9
D, C, A, B, E, F, G
10
D, C, A, B, E, F
11
D, C, A, B, E
12
D, C, A, B
13
D, C, A
14
D, C
15
D
16
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 (1 Đim)
Cnh cây
Tree-Edge
DC, CA, AB, BE, EF, FG, GH
Cnh ngưc
Back-edge
BC, ED, FD, GB, HB, EA
Cnh ti
Forward-Edge
Cnh vòng
Cross-Edge
6 | Page
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ị. (1 Đim)
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 (0.5 Đim)
{
NODE *ptr = pHead;
int i= 0; //biến đ đếm v trí các phn t
int pos=-1;
while(ptr!=NULL)
{
if(ptr->data%2==0)
{
pos = i;
}
ptr = ptr->pNext;
i++;
}
return pos;
D thy thi gian thc hin ca thut toán trong trưng hp ti nht c
Tng đim: 12.5 đim
| 1/6

Preview text:

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ụ minh họa. (1 Điểm)
Mảng cấp phát tĩnh
Mảng cấp phát động Bộ nhớ
Bộ nhớ lấy từ phần DATA Bộ nhớ lấy từ HEAP Kích thước
Bộ nhớ giới hạn, chỉ có thể cấp phát cho các
Dung lượng bộ nhớ lớn, có thể cấp phát được cho
biến có kích thước nhỏ
các biến kích thước lớn
Thời điểm cấp Bộ nhớ được cấp phát tại thời điểm biên dịch Bộ nhớ được cấp phát tại thời điểm chạy phát chương trình Thu hồi bộ
Hệ điều hành sẽ tự thu hồi bộ nhớ khi không Người lập trình phải tự thu hồi bộ nhớ xin cấp nhớ dùng đến phát
Cấp phát tĩnh: cho các biến kích thước nhỏ, các biến đơn float a,b, Ar[100];
Cấp phát động: Dùng cho các biến kích thước lớn, các mảng lớn,… double *A;
A = (double*)malloc(10000*sizeof(double));
b) Đánh giá thời gian thực hiện tồi nhất của hàm sau theo O-lớn (1 Điểm)
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; } 1 | P a g e
Hàm trên được cài đặt đệ quy, lời gọi đệ quy là fract = fastPower(x,n/2);
Được gọi 2 lần trong hàm (ứng với if hoặc else), ta có công thức đệ quy tổng quát là 1 𝑛ế𝑢 𝑛 = 0
𝑇(𝑛) = �2𝑇�𝑛 2��+1 𝑛ế𝑢 𝑛 > 0
Ta có thể viết gọn lại là 𝑇(𝑛) = 2𝑇 �𝑛� + 1 2
Áp dụng định l ý thợ với 𝑎 = 2, 𝑏 = 2 và 𝑓(𝑛) = 1
𝑛log𝑏 𝑎 = 𝑛log2 2 = 𝑛  trường hợp 1 của định l ý thợ
Vậy kết luận 𝑇(𝑛) = 𝜃(𝑛)
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 (1 Điểm) 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 𝑂(𝑛) 𝑂(𝑛)
Số lượng ô nhớ xác định trước, là trữ các phần tử
Tỉ lệ với số phần tử, tuy nhiên
Tỉ lệ với số phần tử, tuy nhiên
kích thước bảng băm (thường lớn
mỗi phần tử không phải lưu trữ
mỗi phần tử phải lưu trữ thêm hơn số lượng phần tử cần lưu thêm dữ liệu thừa
dữ liệu thừa (2 con trỏ) nhiều lần) Thời gian tìm 𝑂(log 𝑛) 𝑂(log 𝑛) 𝑂(1) kiếm Thêm phần tử 𝑂(𝑛) 𝑂(log 𝑛) 𝑂(1) Xoá phần tử 𝑂(𝑛) 𝑂(log 𝑛) 𝑂(1) In ra danh sách 𝑂(𝑛) 𝑂(𝑛)
Không hỗ trợ thao tác này, nếu các phần tử hiện
muốn in ta phải duyệt toàn bộ có bảng băm 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ố? (1 Điểm)
Biểu thức dạng hậu tố: Là cách biểu diễn biểu thức trong đó toàn tử đứng sau các toán hạng mà nó tác động Ví dụ: 3 5 + a –
Ưu điểm của biểu thức dạng hậu tố là chỉ có một cách định giá (cách tính) duy nhất. Không như biểu
thức dạng trung tố cần quy định thêm về độ ưu tiên của toán tử, và dấu ngoặc.
Biểu thức dạng hậu tố được dùng để biểu diễn biểu thức trong máy tính
b) Chuyển biểu thức dạng trung tố sau sang dạng hậu tố (1 Điểm)
𝑎 + 3/(2 ∗ 𝑎 − 𝑐 ∗ 𝑏) − 𝑒 Gặp STACK a ∅ + + 3 + / +,/ ( +,/, ( 2 +,/, ( * +,/, (,∗ a +,/, (,∗ 2 | P a g e - +,/, (, − c +,/, (, − * +,/, (, −,∗ b +,/, (, −,∗ ) +,/ - − e −
Biểu thức kết quả: 𝑎 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 Điểm) 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). (1 Điểm) 3 | P a g e
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 (1 Điểm)
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ề (1 Điểm) 4 | P a g e
b) Thực hiện DFS từ đỉnh D, hãy đưa ra thứ tự các đỉnh được thăm. (1 Điểm)
Chỉ cần vẽ được hình trạng hàng đợi hoặc cây khung DFS tại D là được đủ điểm
STT STACK 1 D 2 D, C 3 D, C, A 4 D, C, A, B 5 D, C, A, B, E 6 D, C, A, B, E, F 7 D, C, A, B, E, F, G 8 D, C, A, B, E, F, G, H 9 D, C, A, B, E, F, G 10 D, C, A, B, E, F 11 D, C, A, B, E 12 D, C, A, B 13 D, C, A 14 D, C 15 D 16 ∅
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 (1 Điểm) Cạnh cây DC, CA, AB, BE, EF, FG, GH Tree-Edge Cạnh ngược BC, ED, FD, GB, HB, EA Back-edge Cạnh tới Forward-Edge Cạnh vòng Cross-Edge 5 | P a g e
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ị. (1 Điểm)
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 (0.5 Điểm) int FindMax (NODE *pHead) { NODE *ptr = pHead;
int i= 0; //biến để đếm vị trí các phần tử int pos=-1; while(ptr!=NULL) { if(ptr->data%2==0) { pos = i; } ptr = ptr->pNext; i++; } return pos; }
Dễ thấy thời gian thực hiện của thuật toán trong trường hợp tồi nhất cỡ 𝑂(𝑛)
Tổng điểm: 12.5 điểm 6 | P a g e