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

Xác định giá trị trả về của các hàm sau (dưới dạng 1 hàm của n), và phân tích thời gian thực hiện trong trường hợp tồi nhất sử dụng ký hiệu O-lớn duyệt theo thứ tự giữa ta được biểu thức tiền tố. 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 2
Bài 1. Xác đnh giá tr tr v ca các hàm sau (dưi dng 1 hàm ca n), và pn tích thi gian thc hin
trong trưng hp ti nht s dng ký hiu O-ln.
a) Hàm
mystery
int mystery(int n)
{
int r = 0;
for (int i = 1; i<n; i++)
for (int j = i + 1; j<=n; j++)
for (int k = 1; k<=j; k++)
r = r + 1;
return r;
}
b) Hàm
pesky
int pesky(int n)
{
int r = 0;
for (int i = 1; i<= n; i++)
for (int j = 1; j<= i; j++)
for (int k = j; k<= i + j; k++)
r = r + 1;
return r;
}
c) Hàm
prestiferous
int prestiferous(int n)
{
int r = 0;
for (int i = 1; i<= n; i++)
for (int j = 1; j<= i; j++)
for (int k = j; k<= i + j; k++)
for (int l = 1; l<= i + j − k; l++)
r = r + 1;
return r;
}
d) Hàm
conundrum
int conundrum(int n)
{
int r = 0;
for (int i = 1; i<= n; i++)
for (int j = i + 1; j<= n; j++)
for (int k = i + j − 1; k<= n; k++)
r = r + 1;
return r;
}
Bài 2. Xác đnh mi quan h gia các cp hàm
(
)
,
(
)
. Các mi quan h th có là
(
)
= (()),
(
)
= (()),
(
)
= (()).
a)
(
)
= log
,
(
)
= log + 5.
b)
(
)
=
,
(
)
= log
.
c)
(
)
= log
,
(
)
= log .
d)
(
)
= ,
(
)
= log
.
e)
(
)
= log + ,
(
)
= log .
f)
(
)
= 2
,
(
)
= 10
g)
(
)
= 10,
(
)
= log 10
h)
(
)
= 2
,
(
)
= 3
Bài 3. Vi mi cp hàm
(
)
,
(
)
sau thì quan h o là đúng trong các quan h sau
(
)
= (()),
(
)
= (()), hoc c hai.
a)
(
)
= ( 1)/2,
(
)
= 6
b)
(
)
= + 2
,
(
)
= 3
c)
(
)
= +
,
(
)
=
d)
(
)
= log,
(
)
=
/3
e)
(
)
= + log,
(
)
= 3
+ 10
f)
(
)
= (log)
,
(
)
= log
g)
(
)
= 4 + 3log,
(
)
=
+
Bài 4. Chng minh
a) 2
+ 3 6 = (
)
b)
+ 2
= (2
)
c)
3 + 3
1 = (
)
Bài 5. Xác đnh mi quan h gia các cp hàm () () sau đây
a)
(
)
=
.
+ 3( 1),
(
)
= 6
b)
(
)
=
+ 3
1),
(
)
=
c)
(
)
= 2
.
+ ,
(
)
= 
Bài 6. Chng minh
a) Nếu
(
)
= (
()), và
(
)
= (
()) thì
(
)
+
(
)
= (
(
)
+
(
)
)
b) Nếu
(
)
= (
()), và
(
)
= (
()) thì
(
)
+
(
)
= (
(
)
+
(
)
)
c) Nếu
(
)
= (
()), và
(
)
= (
()) thì
(
)
(
)
= (
(
)
(
)
)
Bài 7. Chng minh
a)
+
+
+. . +
= (
) vi > 1, và các hng s
,
,
. . ,
là các hng s bt k
b) ( + )
= (
) vi 1, và là hng s bt k
Bài 8. Sp xếp các hàm dưi đây theo th t tăng dn đ phc tp
a) ,
, + 3
/
, lg, log, + 3ln,
+ 3
.
, loglog, 2
+ loglog,
,
2
+ 3
.
, !, (ln)
, + 2log
, 2
b) 6, (2 + )

, ( + 3)
,

, !, loglog,


, (1/3)
vi là hng s bt k
Bài 9. Nhng khng đnh sau đây là đúng hay sai, ti sao?
a) 3
= (2
)
b) log(5
) = (ln 2
)
c) 3
= (2
)
d) log(5
) = (ln 2
)
Bài 10. Tìm dng hàm () đơn gin mà
(
)
= (()) cho các hàm () sau đây
a)
(
)
=

b)
(
)
=

c)
(
)
=
log

d)
(
)
=
󰇳
󰇴

e)
(
)
=
log(!)

f)
(
)
=

g)
(
)
=
2

h)
(
)
=
3
+ 2


Bài 11. Tìm các hàm () đơn gin mà
(
)
= (()) cho các hàm () sau đây
a)
(
)
= 2
+
b)
(
)
=
+
+ log
c)
(
)
= log 20
+
d)
(
)
= (
)
+
Bài 12. Chng minh rng
1
2
+ 3
4
+ +
(
1
)

=
(
1
)

( 1) 2
Bài 13. Xem xét đon chương trình in ra xâu “Hello” sau
for (i=1; i<=n; i++)
for (j=i; j<=2*i; j++)
printf("Hello");
Gi () là s ln thc hin lnh in ra màn hình. Hãy
a) Xác đnh hàm () theo .
b) Biu din dng rút gn ca () theo ký hiu O ln.
Bài 14. Xem xét đon chương trình in ra xâu “Hello” sau
for (i=1; i<= n/2; i++)
for (j=i; j<= n-i; j++)
for (k=1; k<= j; k++)
printf("Hello");
Gi () là s ln thc hin lnh in ra màn hình. Hãy
a) Xác đnh hàm () theo .
b) Biu din dng rút gn ca () theo ký hiu O ln.
Bài 15. Bài toán khp xâu:
Đầu vào: Mt xâu và mt mu (xâu con)
Đầu ra: có xut hin trong hay không, nếu có thì ti v trí nào.
Ví d. =  = 
int findmatch(char *p, char *t)
{
int i,j; /* counters */
int m, n; /* string lengths */
m = strlen(p);
n = strlen(t);
for (i=0; i<=(n-m); i=i+1) {
j=0;
while ((j<m) && (t[i+j]==p[j]))
j = j+1;
if (j == m) return(i);
}
return(-1);
}
0 1 2 3 4 5 6 7 8 9 0
0 A B C
1 A
2 A
3 A B
4 A B C D
A B B A A B C D B B A
Hãy phân tích thi gian chy trong trưng hp ti nht ca thut toán trên s dng ký hiu O-ln. đây
, ln lưt là đ dài ca xâu .
Bài 16. Nhân hai ma trn
Đầu vào: Ma trn (kích thưc × ) và ma trn (kích thưc × )
Đầu ra: Ma trân = × (kích thưc × )
for (i=1; i<=x; i++)
for (j=1; j<=y; j++) {
C[i][j] = 0;
for (k=1; k<=z; k++)
C[i][j] += A[i][k] * B[k][j];
}
Hãy phân thut toán nhân hai ma trn trên theo O-ln.
Bài 17. Nhân hai s nguyên: Đ nhân 2 s nguyên , ta thc hin theo cách nhân ln lưt vi các ch
s trong (có tính trng s) sau đó tính tng. VD, = 120, = 142 thì × = 120 × 100 + 120 ×
40 + 120 × 2 = 17,040. Phân tích đ phc tp ca thut toán trên khi áp dng đ nhân hai s ,
ch s. đây ta gi s phép cng hoc nhân tng ch s có thi gian thc hin là hng s( tc là (1))
| 1/5

Preview text:

Bài tập chương 1 Phần 2
Bài 1. Xác định giá trị trả về của các hàm sau (dưới dạng 1 hàm của n), và phân tích thời gian thực hiện
trong trường hợp tồi nhất sử dụng ký hiệu O-lớn. a) Hàm mystery int mystery(int n) { int r = 0; for (int i = 1; i
for (int j = i + 1; j<=n; j++) for (int k = 1; k<=j; k++) r = r + 1; return r; } b) Hàm pesky int pesky(int n) { int r = 0;
for (int i = 1; i<= n; i++)
for (int j = 1; j<= i; j++)
for (int k = j; k<= i + j; k++) r = r + 1; return r; } c) Hàm prestiferous int prestiferous(int n) { int r = 0;
for (int i = 1; i<= n; i++)
for (int j = 1; j<= i; j++)
for (int k = j; k<= i + j; k++)
for (int l = 1; l<= i + j − k; l++) r = r + 1; return r; } d) Hàm conundrum int conundrum(int n) { int r = 0;
for (int i = 1; i<= n; i++)
for (int j = i + 1; j<= n; j++)
for (int k = i + j − 1; k<= n; k++) r = r + 1; return r; }
Bài 2. Xác định mối quan hệ giữa các cặp hàm 𝑓(𝑛), 𝑔(𝑛). Các mối quan hệ có thể có là
𝑓(𝑛) = Ο(𝑔(𝑛)), 𝑓(𝑛) = Ω(𝑔(𝑛)), 𝑓(𝑛) = Θ(𝑔(𝑛)).
a) 𝑓(𝑛) = log 𝑛2, 𝑔(𝑛) = log 𝑛 + 5.
b) 𝑓(𝑛) = √𝑛, 𝑔(𝑛) = log 𝑛2.
c) 𝑓(𝑛) = log 2 𝑛, 𝑔(𝑛) = log 𝑛.
d) 𝑓(𝑛) = 𝑛, 𝑔(𝑛) = log 2 𝑛.
e) 𝑓(𝑛) = 𝑛 log 𝑛 + 𝑛, 𝑔(𝑛) = log 𝑛.
f) 𝑓(𝑛) = 2𝑛, 𝑔(𝑛) = 10𝑛2
g) 𝑓(𝑛) = 10, 𝑔(𝑛) = log 10
h) 𝑓(𝑛) = 2𝑛, 𝑔(𝑛) = 3𝑛
Bài 3. Với mỗi cặp hàm 𝑓(𝑛), 𝑔(𝑛) sau thì quan hệ nào là đúng trong các quan hệ sau 𝑓(𝑛) = Ο(𝑔(𝑛)),
𝑔(𝑛) = Ο(𝑓(𝑛)), hoặc cả hai.
a) 𝑓(𝑛) = 𝑛(𝑛 − 1)/2, 𝑔(𝑛) = 6𝑛
b) 𝑓(𝑛) = 𝑛 + 2√𝑛, 𝑔(𝑛) = 3𝑛
c) 𝑓(𝑛) = 𝑛 + √𝑛, 𝑔(𝑛) = 𝑛2
d) 𝑓(𝑛) = 𝑛log𝑛, 𝑔(𝑛) = 𝑛√𝑛/3
e) 𝑓(𝑛) = 𝑛 + log𝑛, 𝑔(𝑛) = 3√𝑛 + 10
f) 𝑓(𝑛) = (log𝑛)2, 𝑔(𝑛) = 𝑛log√𝑛
g) 𝑓(𝑛) = 4𝑛 + 3log𝑛, 𝑔(𝑛) = 𝑛2 + √𝑛 Bài 4. Chứng minh
a) 2𝑛2 + 3𝑛 − 6 = Θ(𝑛2)
b) 𝑛2 + 2√𝑛 = Ο(2𝑛)
c) 𝑛3 − 3𝑛 + 3𝑛2 − 1 = Ω(𝑛2)
Bài 5. Xác định mối quan hệ giữa các cặp hàm 𝑓(𝑛) và 𝑔(𝑛) sau đây
a) 𝑓(𝑛) = 𝑛2.5 + 3(𝑛 − 1), 𝑔(𝑛) = 6𝑛
b) 𝑓(𝑛) = 𝑛2 + 3√𝑛 − 1), 𝑔(𝑛) = 𝑛3
c) 𝑓(𝑛) = 2𝑛2.5 + 𝑛, 𝑔(𝑛) = √𝑛5 Bài 6. Chứng minh
a) Nếu 𝑓1(𝑛) = Ο(𝑔1(𝑛)), và 𝑓2(𝑛) = Ο(𝑔2(𝑛)) thì 𝑓1(𝑛) + 𝑓1(𝑛) = Ο(𝑔1(𝑛) + 𝑔2(𝑛))
b) Nếu 𝑓1(𝑛) = Ω(𝑔1(𝑛)), và 𝑓2(𝑛) = Ω(𝑔2(𝑛)) thì 𝑓1(𝑛) + 𝑓1(𝑛) = Ω(𝑔1(𝑛) + 𝑔2(𝑛))
c) Nếu 𝑓1(𝑛) = Ο(𝑔1(𝑛)), và 𝑓2(𝑛) = Ο(𝑔2(𝑛)) thì 𝑓1(𝑛) ∙ 𝑓1(𝑛) = Ο(𝑔1(𝑛) ∙ 𝑔2(𝑛)) Bài 7. Chứng minh
a) 𝑎0 + 𝑎1𝑥 + 𝑎2𝑥2+. . +𝑎𝑛𝑥𝑛 = Ο(𝑥𝑛) với 𝑛 > 1, và các hằng số 𝑎0,𝑎1,. . , 𝑎𝑛là các hằng số bất kỳ
b) (𝑛 + 𝑎)𝑘 = Θ(𝑛𝑘) với 𝑘 ≥ 1, và 𝑎 là hằng số bất kỳ
Bài 8. Sắp xếp các hàm dưới đây theo thứ tự tăng dần độ phức tạp
a) 𝑛, √𝑛, 𝑛 + 3𝑛1/2, lg𝑛, 𝑛log𝑛, 𝑛 + 3ln𝑛, 𝑛2 + 3𝑛1.5, loglog𝑛, 2𝑛3 + loglog𝑛, 𝑛3,
𝑛 − 2𝑛2 + 3𝑛2.5, 𝑛!, (ln𝑛)2, 𝑛 + 2𝑛 log 𝑛5, 2𝑛
b) 6𝑛, (2 + 𝑎)10, (𝑛 + 3)2, 𝑛+2𝑛, 𝑛!, 𝑛loglog𝑛, 𝑛+5𝑛3, (1/3)𝑛 với 𝑎 là hằng số bất kỳ 𝑛 lg𝑛
Bài 9. Những khẳng định sau đây là đúng hay sai, tại sao? a) 3𝑛 = Ο(2𝑛) b) log(5𝑛) = Ο(ln 2𝑛) c) 3𝑛 = Ω(2𝑛) d) log(5𝑛) = Ω(ln 2𝑛)
Bài 10. Tìm dạng hàm 𝑔(𝑛) đơn giản mà 𝑓(𝑛) = Θ(𝑔(𝑛)) cho các hàm 𝑓(𝑛) sau đây a) 𝑓(𝑛) = ∑𝑛 1 𝑖=1 𝑖
b) 𝑓(𝑛) = ∑𝑛𝑖=1 𝑖2
c) 𝑓(𝑛) = ∑𝑛𝑖=1 log 𝑖
d) 𝑓(𝑛) = ∑𝑛𝑖=1 �1� 𝑖
e) 𝑓(𝑛) = ∑𝑛𝑖=1 log(𝑛!)
f) 𝑓(𝑛) = ∑𝑛𝑖=1 √𝑖
g) 𝑓(𝑛) = ∑𝑛𝑖=1 2𝑖
h) 𝑓(𝑛) = ∑𝑛𝑖=1 3𝑖 + 22𝑖
Bài 11. Tìm các hàm 𝑔(𝑛) đơn giản mà 𝑓(𝑛) = Θ(𝑔(𝑛)) cho các hàm 𝑓(𝑛) sau đây a) 𝑓(𝑛) = 2𝑛 + 𝑛2
b) 𝑓(𝑛) = 𝑛2 + 𝑛√𝑛 + log 𝑛
c) 𝑓(𝑛) = log 20𝑛 + 𝑛2
d) 𝑓(𝑛) = (2)𝑛 + 𝑛3 3
Bài 12. Chứng minh rằng
12 − 22 + 32 − 42 + ⋯ + (−1)𝑛−1𝑛2 = (−1)𝑛−1 𝑛(𝑛 − 1) 2 ⁄
Bài 13. Xem xét đoạn chương trình in ra xâu “Hello” sau for (i=1; i<=n; i++) for (j=i; j<=2*i; j++) printf("Hello");
Gọi 𝑇(𝑛) là số lần thực hiện lệnh in ra màn hình. Hãy
a) Xác định hàm 𝑇(𝑛) theo 𝑛.
b) Biểu diễn dạng rút gọn của 𝑇(𝑛) theo ký hiệu O lớn.
Bài 14. Xem xét đoạn chương trình in ra xâu “Hello” sau for (i=1; i<= n/2; i++) for (j=i; j<= n-i; j++) for (k=1; k<= j; k++) printf("Hello");
Gọi 𝑇(𝑛) là số lần thực hiện lệnh in ra màn hình. Hãy
a) Xác định hàm 𝑇(𝑛) theo 𝑛.
b) Biểu diễn dạng rút gọn của 𝑇(𝑛) theo ký hiệu O lớn.
Bài 15. Bài toán khớp xâu:
Đầu vào: Một xâu 𝑡 và một mẫu (xâu con) 𝑝
Đầu ra: 𝑝 có xuất hiện trong 𝑡 hay không, nếu có thì tại vị trí nào.
Ví dụ. 𝑡 = 𝐴𝐵𝐵𝐴𝐴𝐵𝐶𝐷𝐵𝐵𝐴 và 𝑝 = 𝐴𝐵𝐶𝐷 0 1 2 3 4 5 6 7 8 9 0 0 A B C 1 A 2 A 3 A B 4 A B C D A B B A A B C D B B A
int findmatch(char *p, char *t) { int i,j; /* counters */
int m, n; /* string lengths */ m = strlen(p); n = strlen(t);
for (i=0; i<=(n-m); i=i+1) { j=0; while ((j j = j+1; if (j == m) return(i); } return(-1); }
Hãy phân tích thời gian chạy trong trường hợp tồi nhất của thuật toán trên sử dụng ký hiệu O-lớn. ở đây
𝑚, 𝑛 lần lượt là độ dài của xâu 𝑝 và 𝑡.
Bài 16. Nhân hai ma trận
Đầu vào: Ma trận 𝐴 (kích thước 𝑥 × 𝑦) và ma trận 𝐵 (kích thước 𝑦 × 𝑧)
Đầu ra: Ma trân 𝐶 = 𝐴 × 𝐵 (kích thước 𝑥 × 𝑧) for (i=1; i<=x; i++) for (j=1; j<=y; j++) { C[i][j] = 0; for (k=1; k<=z; k++)
C[i][j] += A[i][k] * B[k][j]; }
Hãy phân thuật toán nhân hai ma trận trên theo O-lớn.
Bài 17. Nhân hai số nguyên: Để nhân 2 số nguyên 𝑎, 𝑏 ta thực hiện theo cách nhân lần lượt 𝑎 với các chữ
số trong 𝑏 (có tính trọng số) sau đó tính tổng. VD, 𝑎 = 120, 𝑏 = 142 thì 𝑎 × 𝑏 = 120 × 100 + 120 ×
40 + 120 × 2 = 17,040. Phân tích độ phức tạp của thuật toán trên khi áp dụng để nhân hai số có 𝑛, 𝑚
chữ số. Ở đây ta giả sử phép cộng hoặc nhân từng chữ số có thời gian thực hiện là hằng số( tức là 𝑂(1))