Chương 1: Introduction - 10.Algorithms Analysis: Problems & Solutions(41-53)
Bài đăng này đã không được cập nhật trong 2 năm
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
 
  
 