Bài tập chương 1- Phần 3 - Cấu trúc dữ liệu và giải thuật | Trường Đại học Bách khoa Hà Nội

Dùng thuật toán Euclid: giả sử 𝑏 là số nhở hơn, nếu 𝑏 = 0 thì ước số chung lớn nhất là 𝑎, ngược lại thì ước số chung lớn nhất của 𝑎 và 𝑏 cũng là ước số chung lớn nhất của 𝑏 và 𝑎%𝑏 (chia module, chia lấy
phần dư). 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!

Bài tp chương 1
Phn 3
A. Thut toán đ quy
Bài 1. Cho hàm đ quy sau
a)
(
)
=
2 󰉦 2
3
(
2
)
+
(
1
)
+ 4 󰉦 > 2
Hãy tính (4), (9)
b)
(
)
=
1 󰉦 0
(
/2
)
+
(
1
)
󰉦 > 0
Hãy tính (3), (8)
c)
(
)
=
1 󰉦 = 0
2 󰉦 = 1
2
(
%2
)
+
(
/2
)
󰉦 > 1
Hãy tính (4), (7)
d)
(
)
=
󰇱
1 󰉦 0
2(/2) + 1 󰉦 > 0 à 󰉡
2
(
1
)
󰉦 0 < à 󰉤
Hãy tính (4), (7)
B. Phương pháp thế
Bài 1. Chng minh rng
a)
(
)
= 󰇡
󰇵
󰇶
󰇢+ 1 (log )
b)
(
)
= 2󰇡
󰇵
󰇶
󰇢+ (log )
c)
(
)
= 󰇡
󰇵
󰇶
+ 12󰇢+ 1 (log )
d)
(
)
= 4󰇡
󰇢+ (
)
e)
(
)
= 2󰇡
󰇢+ 1 ()
Bài 2. Gii công thc đ quy
a)
(
)
= 2
+ 1
Bài 3. Gii công thc đ quy ca thut toán sp xếp trn mergeSort
(
)
=
(
1
)
󰉦 = 1
2󰇡
2
󰇢+
(
)
󰉦 > 1
C. Cây đệ quy
Bài 1. Xác định mt cn trên tt cho công thc đ quy
(
)
= 3󰇡
󰇢+ dùng phương pháp thế để xác
nhn li kết qu.
Bài 2. V cây đ quy cho
(
)
= 4󰇡
󰇵
󰇶
󰇢+  vi  là hng s. Đưa ra tim cn cht cho công thc đ
quy trên. Xác nhn li li gii bng phương pháp thế.
D. Định lý th
Bài 1. Dùng đnh lý th để đưa ra các tim cn cht cho các công thc đ quy sau
a)
(
)
= 4󰇡
󰇢+
b)
(
)
= 4󰇡
󰇢+
c)
(
)
= 4󰇡
󰇢+
Bài 2. Dùng đnh lý th để chng minh thi gian thc hin ca thut toán tìm kiếm nh phân
(
)
=
󰇡
󰇢+ (1) (log )
Bài 3. Đnh lý th có th áp dng cho công thc đ quy
(
)
= 4󰇡
󰇢+
log đưc không, Ti sao?
Tìm tim cn gii hn trên cho ()
Bài 4. Đánh giá thi gian thc hin ca thut toán đ quy sau theo mô hình O-ln
int findMin(int S[], int start, int end)
{
if(start>=end) return S[end];
int div = (end-start)/2;
int A,B;
A=findMin(S,start,start+div);
B=findMin(S,start+div+1,end);
return Min(A,B);
}
Trong đó hàm Min(A,B) tr v giá tr nh nht trong 2 s A, B và thi gian thc hin là (1)
E. Viết chương trình
Bài 1. Hãy viết hàm () để tìm ưc s chung ln nht ca 2 s nguyên dương , theo các thut toán
sau:
a) Phương pháp vét cn: duyt tt c các s nguyên dương có th cho ti khi tìm thy
b) Dùng thut toán Euclid: gi s là s nh n, nếu = 0 thì ưc s chung ln nht , ngưc li
thì ưc s chung ln nht ca cũng là ưc s chung ln nht ca % (chia module, chia ly
phn dư). Cài đt thut toán Euclid theo 2 cách: lp và đ quy
Bài 2. Hãy viết chương trình đ in ra màn hình tam giác s Pascal dng hình vuông như sau
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
(
, 0
)
=
(
,
)
= 1 vi 0
(
,
)
=
(
1,
)
+ (1, 1) vi > > 0
a) V cây đ quy đ tính (6,4)
b) Xây dng hàm đ quy để tính (, )
c) V tam giác Pascal dng hình vuông
d) Ci tiến hàm tính (, ) theo 2 cách: dùng đ quy có nh, và không dùng đ quy (dùng phương
pháp lp)
e) Đánh giá đ phc tp ca hàm (, ) trong các trưng hp c,d theo các tiêu chí: b nh, thi gian
Bài 3. Hàm Ackermann đưc đnh nghĩa như sau
(
0,
)
= + 1 vi > 0
(
, 0
)
= (1,1) vi > 0
(
,
)
= (1, (, 1)) vi > 0 > 0
a) Tính toán các giá tr hàm Ackermann trong các trưng hp sau
(0,9) (0,9) (1,8) (2,2) (2,0) (2,3) (3,2) (4,2) (4,3) (4,0)
b) Viết hàm đ quy đ tính giá tr hàm Ackermann
c) Viết hàm không đ quy đ tính giá tr hàm Ackermann
F. Thut toán quay lui
Bài 1. Chiu cao ti đa ca cây đ quy ca hàm solve_from trong bài toán 8 hu ?
Bài 2. Thc hin tiếp hàm solve_from để gii bài toán 8 hu vi trng thái hin ti ca bàn c
Chú ý : trong trưng hp này ta xếp các quân hu ln lưt theo hàng ch không phi theo ct
Bài 3. Thc hin thut toán backtracking bng tay đ tìm ra mt li gii cho bài toán đt 5 quân hu trên
bàn c kích thưc 5x5
Bài 4. Cài đt thut toán backtracking đ in ra li gii có th ca bài toán 8 hu
Bài 5. Xây dng thut toán backtracking đ in ra tt c các hoán v ca dãy {A,B,C,D,E}
Bài 6. Xây dng thut toán backtracking đ gii bài toán ma phương (bc chn và bc l)
Tham kho : http://mathworld.wolfram.com/MagicSquare.html
| 1/4

Preview text:

Bài tập chương 1 Phần 3 A. Thuật toán đệ quy
Bài 1.
Cho hàm đệ quy sau a) 𝑓(𝑛) = � 2 𝑛ế𝑢 𝑛 ≤ 2
3𝑓(𝑛 − 2) + 𝑓(𝑛 − 1) + 4 𝑛ế𝑢 𝑛 > 2 Hãy tính 𝑓(4), 𝑓(9) b) 𝑓(𝑛) = � 1 𝑛ế𝑢 𝑛 ≤ 0
𝑓(𝑛/2) + 𝑓(𝑛 − 1) 𝑛ế𝑢 𝑛 > 0 Hãy tính 𝑓(3), 𝑓(8) 1 𝑛ế𝑢 𝑛 = 0 c) 𝑓(𝑛) = � 2 𝑛ế𝑢 𝑛 = 1
2𝑓(𝑛%2) + 𝑓(𝑛/2) 𝑛ế𝑢 𝑛 > 1 Hãy tính 𝑓(4), 𝑓(7) 1 𝑛ế𝑢 𝑛 ≤ 0
d) 𝑓(𝑛) = �2𝑓(𝑛/2) + 1 𝑛ế𝑢 𝑛 > 0 𝑣à 𝑐ℎẵ𝑛
2𝑓(𝑛 − 1) 𝑛ế𝑢 0 < 𝑛 𝑣à 𝑙ẻ Hãy tính 𝑓(4), 𝑓(7)
B. Phương pháp thế
Bài 1. Chứng minh rằng
a) 𝑇(𝑛) = 𝑇 ��𝑛�� + 1 là Ο(log 𝑛) 2
b) 𝑇(𝑛) = 2𝑇 ��𝑛�� + 𝑛 là Ο(𝑛 log 𝑛) 2
c) 𝑇(𝑛) = 𝑇 ��𝑛� + 12� + 1 là Ο(log 𝑛) 2
d) 𝑇(𝑛) = 4𝑇 �𝑛� + 𝑛 là 𝑂(𝑛2) 2
e) 𝑇(𝑛) = 2𝑇 �𝑛� + 1 là 𝑂(𝑛) 2
Bài 2. Giải công thức đệ quy
a) 𝑇(𝑛) = 2𝑇�√𝑛� + 1
Bài 3. Giải công thức đệ quy của thuật toán sắp xếp trộn – mergeSort 𝛰(1) 𝑛ế𝑢 𝑛 = 1 𝑇(𝑛) = � 𝑛
2𝑇 �2� + 𝛰(𝑛) 𝑛ế𝑢 𝑛 > 1 C. Cây đệ quy
Bài 1. Xác định một cận trên tốt cho công thức đệ quy 𝑇(𝑛) = 3𝑇 �𝑛� + 𝑛 dùng phương pháp thế để xác 2 nhận lại kết quả.
Bài 2. Vẽ cây đệ quy cho 𝑇(𝑛) = 4𝑇 ��𝑛�� + 𝑐𝑛 với 𝑐 là hằng số. Đưa ra tiệm cận chặt cho công thức đệ 2
quy trên. Xác nhận lại lời giải bằng phương pháp thế. D. Định lý thợ
Bài 1. Dùng định lý thợ để đưa ra các tiệm cận chặt cho các công thức đệ quy sau
a) 𝑇(𝑛) = 4𝑇 �𝑛� + 𝑛 2
b) 𝑇(𝑛) = 4𝑇 �𝑛� + 𝑛2 2
c) 𝑇(𝑛) = 4𝑇 �𝑛� + 𝑛3 2
Bài 2. Dùng định lý thợ để chứng minh thời gian thực hiện của thuật toán tìm kiếm nhị phân 𝑇(𝑛) =
𝑇 �𝑛� + Θ(1) là Θ(log 𝑛) 2
Bài 3. Định lý thợ có thể áp dụng cho công thức đệ quy 𝑇(𝑛) = 4𝑇 �𝑛� + 𝑛2 log 𝑛 được không, Tại sao? 2
Tìm tiệm cận giới hạn trên cho 𝑇(𝑛)
Bài 4. Đánh giá thời gian thực hiện của thuật toán đệ quy sau theo mô hình O-lớn
int findMin(int S[], int start, int end) {
if(start>=end) return S[end]; int div = (end-start)/2; int A,B; A=findMin(S,start,start+div); B=findMin(S,start+div+1,end); return Min(A,B); }
Trong đó hàm Min(A,B) trả về giá trị nhỏ nhất trong 2 số A, B và thời gian thực hiện là Θ(1) E. Viết chương trình
Bài 1. Hãy viết hàm 𝑔𝑐𝑑() để tìm ước số chung lớn nhất của 2 số nguyên dương 𝑎, 𝑏 theo các thuật toán sau:
a) Phương pháp vét cạn: duyệt tất cả các số nguyên dương có thể cho tới khi tìm thấy
b) Dùng thuật toán Euclid: giả sử 𝑏 là số nhở hơn, nếu 𝑏 = 0 thì ước số chung lớn nhất là 𝑎, ngược lại
thì ước số chung lớn nhất của 𝑎 và 𝑏 cũng là ước số chung lớn nhất của 𝑏 và 𝑎%𝑏 (chia module, chia lấy
phần dư). Cài đặt thuật toán Euclid theo 2 cách: lặp và đệ quy
Bài 2. Hãy viết chương trình để in ra màn hình tam giác số Pascal dạng hình vuông như sau 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
𝐶(𝑛, 0) = 𝐶(𝑛, 𝑛) = 1 với 𝑛 ≥ 0
𝐶(𝑛, 𝑘) = 𝐶(𝑛 − 1, 𝑘) + 𝐶(𝑛 − 1, 𝑘 − 1) với 𝑛 > 𝑘 > 0
a) Vẽ cây đệ quy để tính 𝐶(6,4)
b) Xây dựng hàm đệ quy để tính 𝐶(𝑛, 𝑘)
c) Vẽ tam giác Pascal dạng hình vuông
d) Cải tiến hàm tính 𝐶(𝑛, 𝑘) theo 2 cách: dùng đệ quy có nhớ, và không dùng đệ quy (dùng phương pháp lặp)
e) Đánh giá độ phức tạp của hàm 𝐶(𝑛, 𝑘) trong các trường hợp c,d theo các tiêu chí: bộ nhớ, thời gian
Bài 3. Hàm Ackermann được định nghĩa như sau
𝐴(0, 𝑛) = 𝑛 + 1 với 𝑛 > 0
𝐴(𝑚, 0) = 𝐴(𝑚 − 1,1) với 𝑚 > 0
𝐴(𝑚, 𝑛) = 𝐴(𝑚 − 1, 𝐴(𝑚, 𝑛 − 1)) với 𝑚 > 0 và 𝑛 > 0
a) Tính toán các giá trị hàm Ackermann trong các trường hợp sau
𝐴(0,9) 𝐴(0,9) 𝐴(1,8) 𝐴(2,2) 𝐴(2,0) 𝐴(2,3) 𝐴(3,2) 𝐴(4,2) 𝐴(4,3) 𝐴(4,0)
b) Viết hàm đệ quy để tính giá trị hàm Ackermann
c) Viết hàm không đệ quy để tính giá trị hàm Ackermann F. Thuật toán quay lui
Bài 1.
Chiều cao tối đa của cây đệ quy của hàm solve_from trong bài toán 8 hậu ?
Bài 2. Thực hiện tiếp hàm solve_from để giải bài toán 8 hậu với trạng thái hiện tại của bàn cờ là
Chú ý : trong trường hợp này ta xếp các quân hậu lần lượt theo hàng chứ không phải theo cột
Bài 3. Thực hiện thuật toán backtracking bằng tay để tìm ra một lời giải cho bài toán đặt 5 quân hậu trên bàn cờ kích thước 5x5
Bài 4. Cài đặt thuật toán backtracking để in ra lời giải có thể của bài toán 8 hậu
Bài 5. Xây dựng thuật toán backtracking để in ra tất cả các hoán vị của dãy {A,B,C,D,E}
Bài 6. Xây dựng thuật toán backtracking để giải bài toán ma phương (bậc chẵn và bậc lẻ)
Tham khảo : http://mathworld.wolfram.com/MagicSquare.html