Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 5

Problem 1.

A) Giả sử: T(n) = 4n^2 + 7n +1


Ta có:
4n^2 + 7n + 1 < 4n^2 + 7n^2 + 1n^2 = 12n^2, với mọi n=1.
Vậy T(n) = O(n^2).

B) Giả sử: T(n) = n^2 - 3n + 1


Ta có:
n^2 − 3n + 1 >= 12*n, với mọi n >= 3.
Vậy T(n) = Q(n).

C) log(2n + k) <= c * log(n), với mọi n >=n0.


log(2n + k) <= log(2n) + log(1 + k/n) <= log(2) + log(n) + log(1 + k/n)
Chọn c = 2, n0 = 1:
log(2n + k) <= 3*log(n), với mọi n >=n0.
Do đó, log(2n + k) = O(log(n)). (*)

log(2n + k) >= c * log(n), với mọi n >= n0.


log(2n + k) >= log(2n) - log(1 + k/n) >= log(n)- log(1 + k/n)
Chọn c = 1/2 và n0 = 1:
log(2n + k) >= 1/2*log(n), với mọi n >=n0.
Do đó, log(2n + k) = Q(log(n)). (**)
Từ (*)(**) suy ra: log(2n + k) = O(log(n)).
a. - Vòng lặp bên ngoài chạy từ i = 1 đến i = n, vì vậy nó sẽ được thực hiện n
lần.
- Vòng lặp bên trong chạy từ j = 1 đến j = n, và với mỗi giá trị của i trong
vòng lặp bên ngoài,
vòng lặp này sẽ được thực hiện n lần.
Do đó, tổng số lần lặp của cả hai vòng lặp là n * n = n^2.
Do trong từng lần lặp, các câu lệnh được thực hiện chỉ là lệnh gán và tăng biến
đếm cnt1, có độ
phức tạp là O(1) (tương đương với việc không ảnh hưởng đến độ phức tạp khi tăng
giá trị của biến), vì vậy độ phức tạp của vòng lặp là O(n^2).
b. - Vòng lặp bên ngoài duyệt từ 1 đến n
- Vòng lặp bên trong duyệt từ 1 đến i.
Với mỗi giá trị của i, vòng lặp bên trong chạy i lần.
Vì vậy, với i = 1, vòng lặp bên trong chạy một lần, với i = 2, vòng lặp bên trong
chạy hai lần, và cứ
tiếp tục như vậy. Biến cnt2 sau đó được tăng lên 1 cho mỗi lần lặp của vòng lặp
bên trong.
Do đó, giá trị cuối cùng của cnt2 sẽ là tổng của các số nguyên từ 1 đến n, tương
đương với (n * (n
+ 1))/ 2.
Nói cách khác, đoạn mã này tính tổng của dãy số: 1+2+3+...+n.
Đây là một chuỗi số học có tổng bằng (n * (n+1)) / 2. Do đó, độ phức tạp tính toán
của đoạn mã
này là O(n^2), vì có hai vòng lặp lồng nhau và số lần lặp tăng theo cấp số nhân.
c. - Vòng lặp bên ngoài chạy với giá trị của i tăng theo cấp số nhân: 1, 2,
4, 8, ...
Khi i vượt quá giá trị n thì vòng lặp dừng. Vòng lặp bên trong chạy n lần cho mỗi
giá trị của i. Số lần
lặp của vòng lặp bên ngoài được tính như sau:
Khi i = 1, vòng lặp bên trong chạy n lần.
Khi i = 2, vòng lặp bên trong vẫn chạy n lần. Khi i = 4, vòng lặp bên trong vẫn
chạy n lần. Khi i =
8, vòng lặp bên trong vẫn chạy n lần. ...
Tổng số lần lặp của cả hai vòng lặp là: n + n + n + ... (ở mỗi bước i được nhân đôi)
= n * log2(n)
Do đó, độ phức tạp tính toán của đoạn mã này là O(nlogn), vì có hai vòng lặp lồng
nhau và số lần lặp
tăng theo cấp số nhân.
d. Vòng lặp bên ngoài chạy với giá trị của i tăng theo cấp số nhân: 1, 2, 4, 8, ...
Khi i vượt quá giá trị n thì vòng lặp dừng.
Vòng lặp bên trong chạy i lần cho mỗi giá trị của i.
Số lần lặp của vòng lặp bên ngoài được tính như sau:
Khi i = 1, vòng lặp bên trong chạy 1 lần.
Khi i = 2, vòng lặp bên trong chạy 2 lần.
Khi i = 4, vòng lặp bên trong chạy 4 lần.
Khi i = 8, vòng lặp bên trong chạy 8 lần. ...
Tổng số lần lặp của cả hai vòng lặp là: 1+2+4 +8 + ... (ở mỗi bước i được nhân
đôi) = n
Do đó, độ phức tạp tính toán của đoạn mã này là O(n), vì có hai vòng lặp lồng
nhau và số lần lặp
tăng theo cấp số nhân, nhưng không vượt quá giới hạn của n.
Problem 3.
a. Độ phức tạp của phép cộng hai ma trận nxn như trên là O(n^2).
Vì có hai vòng lặp for lồng nhau chạy từ 0 đến n-1, và mỗi phần tử trong ma trận
được cộng với
phần tử tương ứng của ma trận khác.
Cụ thể:
Vòng lặp bên ngoài chạy n lần.
Vòng lặp bên trong chạy n lần cho mỗi giá trị của i.
Mỗi lần lặp, thực hiện một phép cộng.
Do đó, tổng số phép tính cộng là O(n^2).
Phép nhân hai ma trận nxn có độ phức tạp là O(n^3), và phép dời hình (transpose)
của một ma trận
nxn cũng có độ phức tạp là O(n^2).
b. Độ phức tạp của phép nhân hai ma trận nxn như trên là O(n^3).
Vì có ba vòng lặp for lồng nhau chạy từ 0 đến n-1, và trong mỗi giá trị của i và j,
thực hiện n phép
nhân và n-1 phép cộng. Cụ thể:
Vòng lặp bên ngoài chạy n lần.
Các vòng lặp bên trong chạy n lần cho mỗi giá trị của i và j.
Trong vòng lặp bên trong thứ ba, thực hiện một phép nhân và một phép cộng.
Do đó, tổng số phép tính (nhân và cộng) là O(n^3).
c. Độ phức tạp của phép dời hình (transpose) một ma trận nxn như trên là
O(n^2).
Vì có hai vòng lặp for lồng nhau chạy từ 0 đến n-1.
Problem 4.
Trong từng lần lặp, thực hiện một phép gản và một phép trao đổi giá trị giữa hai
phần tử của ma
trận. Cụ thể:
Vòng lặp bên ngoài chạy n-1 lần.
Vòng lặp bên trong chạy từ i+1 đến n-1 cho mỗi giá trị của i.
Trong mỗi lần lặp, thực hiện một phép gán và một phép trao đổi giá trị giữa hai
phần tử của ma
trận.
Do đó, tổng số phép gán và phép trao đổi là O(n^2).
Hàm Min trả về giá trị nhỏ nhất trong một mảng gồm n phần tử.
Độ phức tạp của hàm này là O(n), vì có một vòng lặp for duyệt qua từng phần tử
trong mảng. Trong
vòng lặp, chỉ có một phép so sánh và gán được thực hiện với mỗi phần tử.
Do đó số phép tính toán là hằng số (không phụ thuộc vào n).
End of document

You might also like