Chương 1: Introduction - 10.Algorithms Analysis: Problems & Solutions(41-53)
Problem-41
Tìm độ phức tạp của hàm đệ quy:
Solution:
Áp dụng logic của Problem-40 ta được:
Sử dụng master theorem ta có kết quả:
Thay m = logn trở lại ta được:
Problem-42
Tìm độ phức tạp của hàm đệ quy:
Solution:
Áp dụng logic của Problem-40 ta được:
Sử dụng master theorem ta có kết quả:
Thay m = logn trở lại ta được:
Problem-43
Tìm độ phức tạp của hàm đệ quy:
public static int function(int n){
if(n <= 2) return 1;
else return (function((int) Math.floor(Math.sqrt(n))) + 1);
}
Solution: Xem xét comments
public static int function(int n){
if(n <= 2) return 1; //constant time
else return (function((int) Math.floor(Math.sqrt(n))) + 1); //execute sqrt(n) + 1 lần
}
Ta có thể xác định T(n) như sau:
Bài toán này giống Problem 41
Problem-44
Tìm độ phức tạp của hàm đệ quy:
static int counter;
public static void function(int n){
if(n < 2) return;
else counter = 0;
for (int i = 1; i <= 8; i++) {
function(n/2);
}
for (int i = 1; i <= Math.pow(n, 3); i++) {
counter++;
}
}
Solution: Xem xét comments
static int counter;
public static void function(int n){
if(n < 2) return; //constant time
else counter = 0;
//Vòng lặp thực thi 8 lần với giá trị của n giảm 1 nửa mỗi lần gọi
for (int i = 1; i <= 8; i++) {
function(n/2);
}
//Vòng lặp này thực thi n^3 lần với thời gian mỗi vòng lặp là không đổi
for (int i = 1; i <= Math.pow(n, 3); i++) {
counter++;
}
}
Ta có thể xác định T(n) như sau:
Sử dụng master theorem ta có kết quả:
Problem-45
Tìm độ phức tạp của đoạn pseudocode sau:
temp = 1
repeat
for i = 1 to n
temp = temp + 1;
n = n/2;
until n <= 1
Solution: Xem xét comments
temp = 1 //constatnt time
repeat
//Vòng lặp này thực thi n lần
for i = 1 to n
temp = temp + 1;
//Tiếp tục vòng lặp với giá trị n giảm 1 nửa
n = n/2;
until n <= 1
Ta có thể xác định T(n) như sau:
Sử dụng master theorem ta có kết quả:
Problem-46
Tìm độ phức tạp:
public void function(int n) {
for (int i = 1; i < n; i++) {
for (int j = 1; j < n; j = j*2) {
System.out.println("*");
}
}
}
Solution: Xem xét comments
public void function(int n) {
//Vòng lặp này thực thi n lần
for (int i = 1; i < n; i++) {
//Vòng lặp này thực thi log(n) lần
for (int j = 1; j < n; j = j*2) {
System.out.println("*");
}
}
}
=> Độ phức tạp của chương trình
Problem-47
Tìm độ phức tạp:
public void function(int n) {
for (int i = 1; i < n/3; i++) {
for (int j = 1; j < n; j = j + 4) {
System.out.println("*");
}
}
}
Solution: Xem xét comments
public void function(int n) {
//Vòng lặp này thực thi n/3 lần
for (int i = 1; i < n/3; i++) {
//Vòng lặp này thực thi n/4 lần
for (int j = 1; j < n; j = j + 4) {
System.out.println("*");
}
}
}
=> Độ phức tạp của chương trình
Problem-48
Tìm độ phức tạp:
public void function(int n) {
if(n <= 1) return;
if(n > 1){
System.out.println("*");
function(n/2);
function(n/2);
}
}
Solution: Xem xét comments
public void function(int n) {
if(n <= 1) return; //constatnt time
if(n > 1){
System.out.println("*"); //constant time
function(n/2); //Gọi lại hàm với giá trị n giảm 1 nửa
function(n/2); //Gọi lại hàm với giá trị n giảm 1 nửa
}
}
Ta có thể xác định T(n) như sau:
Sử dụng master theorem ta có kết quả:
Problem-49
Tìm độ phức tạp:
public void function(int n) {
int i = 1;
while (i < n) {
int j = n;
while (j > 0)
j = j / 2;
i = 2 * i;
}
}
Solution: Xem xét comments
public void function(int n) {
int i = 1;
while (i < n) {
int j = n;
while (j > 0)
j = j / 2; //logn lần
i = 2 * i; //logn lần
}
}
=> Độ phức tạp của chương trình
Problem-50
, trong đó O (n) là viết tắt của bậc n thì tổng trên có độ phức tạp:\
Solution: (2)
Problem-51
Khẳng định nào sau đây là đúng
I)
II)
III)
- I và II
- I và III
- II và III
- Cả 3
Solution: (1)
(2)
Problem-52
Xem xét hàm sau:
Phát biểu nào sau đây về tiệm cận của f(n), g(n), và h(n) là đúng\
Solution: (4) Theo tốc độ tăng trưởng: (g(n) tiệm cận đứng lớn hơn f(n) và f (n) tiệm cận đứng lớn hơn h(n)).
Ta có thể dễ dàng nhận thấy thứ tự trên bằng cách lấy logarit của 3 hàm đã cho: . Lưu ý rằng:
Problem-53
int j=1, n;
while(j <= n)
j=j*2;
Số phép so sánh được thực hiện khi thực hiện vòng lặp cho n> 0 bất kỳ là:\
- n
Solution:
Giả sử rằng vòng lặp thực hiện k lần. Sau bước thứ k, giá trị của j là .
Lấy loga 2 vế ta được .
Vì chúng ta đang thực hiện một so sánh nữa cho việc thoát khỏi vòng lặp => đáp án (1)
All rights reserved