1. Tính độ phức tạp của chương trình sau:
int tongtunhien(int n)
{
if (n==1)
return 1;
else
return 4*tongtunhien(n/2) + n;
}
1. Viết công thức đệ quy tính tổng thời gian thực hiện cho hàm tongtunhien.
2. Tính độ phức tạp của hàm này.
1. Gọi T(n) là thời gian tính tongtunhien của n.
Thì T(n/2) là thời gian tính tongtunhien của n/2.
Trong trường hợp n=1 thì chương trình chỉ thực hiện 1 lệnh return 1, nên tốn O(1), do đó ta có T(0) = C1.
Trường hợp n>1 chương trình phải gọi đệ quy tongtunhien(n/2), việc gọi đệ quy này tốn T(n/2), sau khi có kết quả
của việc gọi đệ quy, chương trình phải nhân kết quả đó với 4, sau đó cộng với n và return kết quả.
Thời gian để thực hiện phép nhân, phép cộng và return về kết quả là 1 hằng C2.
Vậy ta có phương trình đệ quy:
T(n) = C1 nếu n=1
T(n) = T(n/2) + C2 nếu n>1
2. Giải phương trình đệ quy:
T(n) = C1 nếu n=1
T(n) = T(n/2) + C2 nếu n>1
Ta có: T(n) = T(n/2) + C2
T(n) = [T(n/2
2
) + C2] + C2 = T(n/4) + 2C2
T(n) = [T(n/2
3
) + C2] + 2C2 = T(n/8) + 3C2
…
T(n) = T(n/2
i
) + iC2
Quá trình trên kết thúc khi n/2
i
= 1 hay 2
i
= n => i = logn. Khi đó ta có:
T(n) = T(1) + lognC2 = C1 + C2logn = O(logn)