Thứ Hai, 25 tháng 11, 2013

[Thuật toán]Cách tính độ phức tạp thuật toán – Algorithm complexity(Phần 3)

V. GIẢI PHƯƠNG TRÌNH ĐỆ QUY
Phuơng pháp truy hồi:
Dùng đệ quy để thay thế bất kỳ T(m) với m<n vào vế phải của PT cho đến khi m=1.
VD: Giải phương trình đệ quy:
T(n) = \begin{cases}  C1 & n=1 \\  2T(\frac{n}{2}) + C2.n & n>1  \end{cases}


Ta có:
T(n) = 2T(\frac{n}{2}) + C2.n\\  =2[2T(\frac{n}{2})+ C2.\frac{n}{2}] + C2.n = 4T(\frac{n}{4}) + 2.C2.n \\  =4[2T(\frac{n}{8})+ C2.\frac{n}{4}] + C2.n = 8T(\frac{n}{8}) + 3.C2.n \\  =...\\  =2^{i}.T(\frac{n}{2^{i}}) + i.C2.n
Giải sử n=2^k và khi kết thúc ta có i = k.
\Rightarrow T(n) = 2^{k}T(1) + kC2n
Lại có:
n=2^k \Rightarrow k = logn, T(1) = C1\\  \Rightarrow T(n) = 2^{k}T(1) + kC2n\\  \Rightarrow T(n) =  n.C1 + C2.n.logn\\  \Rightarrow T(n) =  O(n.logn)
Phương pháp tổng quát
Chia bài toán thành a bài toán con và mỗi bài toán có kích thước n/b. Và cứ chia như vậy đến khi bài toán đủ nhỏ để giải quyết (đệ quy). Và sau khi dùng phương pháp này người ta đã chỉ ra rằng đối với phương trình đệ quy:
T(n) = \begin{cases}  C1 & n=1 \\  aT(\frac{n}{b}) + C2.n & n>1  \end{cases}
Ta có:
T(n) = C1 nếu n=1
Với n>1 ta có:
T(n) = \begin{cases}  O(n)& \text{ if } a < b \\   O(n.log(n))& \text{ if } a=b \\   O(n^{loga}) & \text{ if } a>b  \end{cases}


Xem tiếp: