Professional Documents
Culture Documents
THUẬT
1
Mục tiêu
Sau khi hoàn tất bài học này bạn
cần:
Hiểu được sự cần thiết phải phân tích
đánh giá giải thuật.
Biết các tiêu chuẩn để đánh giá một giải
thuật.
Hiểu khái niệm độ phức tạp của giải
thuật.
Vận dụng được các quy tắc để tính độ
phức tạp của chương trình không gọi
chương trình con, độ phức tạp của một
chương trình có gọi các chương trình
con không đệ quy.
Vận dụng được phương pháp thành lập
phương trình đệ quy.
2
Mục tiêu (tt)
3
Sự cần thiết phải
phân tích, đánh giá giải thuật
Cần phải phân tích, đánh giá
giải thuật để:
Lựa chọn một giải thuật tốt nhất
trong các giải thuật để cài đặt
chương trình giải quyết bài toán
đặt ra.
Cải tiến giải thuật hiện có để được
một giải thuật tốt hơn.
4
Tiêu chuẩn đánh giá
một giải thuật là tốt
Một giải thuật được xem là tốt
nếu nó đạt các tiêu chuẩn sau:
Thực hiện đúng.
Tốn ít bộ nhớ.
5
Thời gian thực hiện
của chương trình
Thời gian thực hiện một chương
trình là một hàm của kích thước dữ
liệu vào, ký hiệu T(n) trong đó n là
kích thước (độ lớn) của dữ liệu vào.
Ví dụ : Chương trình tính tổng của n
số có thời gian thực hiện là T(n) = cn
trong đó c là một hằng số.
Thời gian thực hiện chương trình là
một hàm không âm, tức là T(n) 0
n 0.
6
Ðơn vị đo thời gian thực
hiện
Ðơn vị của T(n) không phải là đơn vị
đo thời gian bình thường như giờ,
phút giây... mà thường được xác
định bởi số các lệnh được thực hiện
trong một máy tính lý tưởng.
Ví dụ: Khi ta nói thời gian thực hiện
của một chương trình là T(n) = Cn
thì có nghĩa là chương trình ấy cần
Cn chỉ thị thực thi.
7
Thời gian thực hiện
trong trường hợp xấu nhất
Nói chung thì thời gian thực hiện
chương trình không chỉ phụ thuộc
vào kích thước mà còn phụ thuộc
vào tính chất của dữ liệu vào.
Vì vậy thường ta coi T(n) là thời gian
thực hiện chương trình trong trường
hợp xấu nhất trên dữ liệu vào có
kích thước n, tức là: T(n) là thời
gian lớn nhất để thực hiện chương
trình đối với mọi dữ liệu vào có cùng
kích thước n.
8
Tỷ suất tăng
9
Tỷ suất tăng (tt)
10
Khái niệm độ phức tạp
của giải thuật
Giả sử ta có hai giải thuật P1 và P2 với
thời gian thực hiện tương ứng là T1(n) =
100n2 (với tỷ suất tăng là n2) và T2(n) = 5n3
(với tỷ suất tăng là n3).
Khi n>20 thì T1 < T2. Sở dĩ như vậy là do
tỷ suất tăng của T1 nhỏ hơn tỷ suất tăng
của T2.
Như vậy một cách hợp lý là ta xét tỷ suất
tăng của hàm thời gian thực hiện chương
trình thay vì xét chính bản thân thời gian
thực hiện.
Cho một hàm T(n), T(n) gọi là có độ phức
tạp f(n) nếu tồn tại các hằng C, N0 sao
cho T(n) ≤ Cf(n) với mọi n ≥ N0 (tức là T(n)
có tỷ suất tăng là f(n)) và kí hiệu T(n) là
O(f(n)) (đọc là “ô của f(n)”).
11
Khái niệm độ phức tạp
của giải thuật (tt)
Chú ý: O(C.f(n))=O(f(n)) với C là hằng số.
Ðặc biệt O(C)=O(1)
Các hàm thể hiện độ phức tạp có các dạng
thường gặp sau: log2n, n, nlog2n, n2, n3,
2n, n!, nn.
Ba hàm cuối cùng ta gọi là dạng hàm mũ,
các hàm khác gọi là hàm đa thức.
Một giải thuật mà thời gian thực hiện có độ
phức tạp là một hàm đa thức thì chấp nhận
được, còn các giải thuật có độ phức tạp
hàm mũ thì phải tìm cách cải tiến giải
thuật.
Trong cách viết, ta thường dùng logn thay
thế cho log2n cho gọn.
12
Phương pháp tính
độ phức tạp
Chú
Chúng ta sẽsẽ nói đếđến phương phá pháp tí tính độ độ phứ
phức tạtạp
(thờ
(thời gian thự
thực hiệ
hiện) củ
của:
Chương trì trình không gọ gọi chương trì trình con.
Chương trì trình có
có gọi chương trì trình con không đệ đệ
quy.
Chương trì trình đệ
đệ quy
Trướ
Trước hếhết ta có
có hai quy tắ tắc quan trọ trọng là là quy tắ
tắc
cộng vàvà quy tắ
tắc nhân
Quy tắtắc cộ
cộng:
ng: Nế
Nếu T1(n) và và T2(n) là là thờ
thời gian thự
thực
hiệ
hiện củ
của hai đoạ
đoạn chương trì trình P1 và và P2; và và
T1(n)=O(f(n)), T2(n)=O(g(n)) thì thì thờ
thời gian thự thực hiệ
hiện
của đoạ
đoạn hai chương trì trình đóđó nối tiế tiếp nhau là
T(n)=O(max(f(n),g(n))).
Quy tắtắc nhân:
nhân: Nếu T1(n) và và T2(n) là là thờ
thời gian thự
thực
hiệ
hiện củ
của hai đoạ
đoạn chương trì trình P1và
P1và P2 và và T1(n) =
O(f(n)), T2(n) = O(g(n)) thì thì thờ
thời gian thự thực hiệhiện củ
của
đoạ
đoạn hai đoạ
đoạn chương trì trình đó đó lồng nhau là T(n) =
O(f(n).g(n)).
13
Qui tắc tổng quát để phân tích
một chương trình không có
chương trình con
Thờ
Thời gian thựthực hiệ
hiện củ
của mỗmỗi lệ lệnh gá gán, READ,
WRITE là là O(1)
Thờ
Thời gian thựthực hiệ
hiện củ
của mộmột chuỗ
chuỗi tuầ tuần tựtự các lệ
lệnh
đượ
được xáxác địđịnh bằ
bằng qui tắ tắc cộcộng. Như Như vậ vậy thờ
thời gian
này là
là thờ
thời gian thi hàhành mộ một lệ lệnh nà nào đóđó lâu nhấ
nhất
trong chuỗ
chuỗi cácác lệ
lệnh.
Thờ
Thời gian thựthực hiệ
hiện cấ
cấu trú
trúc IF là là thờ
thời gian lớlớn nhấ
nhất
thự
thực hiệ
hiện lệlệnh sau THEN hoặ hoặc sau ELSE và và thờ
thời
gian kiể
kiểm tra điề
điều kiệ
kiện. Thườ
Thường thờ thời gian kiể
kiểm tra
điề
điều kiệ
kiện là
là O(1).
Thờ
Thời gian thựthực hiệ
hiện vòng lặ lặp làlà tổng (trên tấ tất cả
cả các
lần lặ
lặp) thờ
thời gian thự
thực hiệ
hiện thân vòng lặ lặp. Nế
Nếu thờ
thời
gian thự
thực hiệ
hiện thân vòng lặ lặp không đổ đổi thì
thì thờ
thời gian
thự
thực hiệ
hiện vòng lặ lặp là
là tích củcủa số số lần lặlặp vớvới thờ
thời
gian thự
thực hiệ
hiện thân vòng lặ lặp.
14
Ví dụ 1:
Thủ tục sắp xếp “nổi bọt”
void BubbleSort(int a[n])
{ int i,j,temp;
/*1*/ for(i= 0; i<=n-2; i++)
/*2*/ for(j=n-1; j>=i+1;j--)
/*3*/ if (a[j].key < a[j-1].key) {
/*4*/ temp=a[j-1];
/*5*/ a[j-1] = a[j];
/*6*/ a[j] = temp;
}
}
15
Tính thời gian thực hiện của
thủ tục sắp xếp “nổi bọt”
Đây là
là chương trì trình sửsử dụng cá các vòng lặ lặp xá
xác địđịnh.
Toà
Toàn bộ bộ chương trì trình chỉ
chỉ gồm mộ một lệ
lệnh lặlặp {1},
lồng trong lệ lệnh {1} là là lệnh lặlặp {2}, lồ
lồng trong lệ lệnh {2}
là lệnh {3} và và lồng trong lệ lệnh {3} là
là 3 lệ
lệnh nốnối tiế
tiếp
nhau {4}, {5} và và {6}.
Chú
Chúng ta sẽ sẽ tiế
tiến hà
hành tí tính độ
độ phứ
phức tạtạp theo thứthứ tự
từ trong ra.ra.
Trướ
Trước hế hết, cảcả ba lệ lệnh gágán {4}, {5} và và {6}
{6} đề
đều tốtốn
O(1) thờ
thời gian, việ việc so sá sánh a[j-
a[j-1] > a[j] cũ
cũng tốtốn
O(1) thờ
thời gian, do đó đó lệnh {3} tố tốn O(1) thờ
thời gian.
Vòng lặ lặp {2} thự
thực hiệhiện (n-(n-i) lầ
lần, mỗ
mỗi lầlần O(1)
O(1) do đó đó
vòng lặlặp {2} tốtốn O((n-
O((n-i).1) = O(n- O(n-i).
Vòng lặ lặp {1} cócó i chạ
chạy từ từ 1 đến n- n-1 nên thờthời gian
thự
thực hiệ
hiện củ của vòng lặ lặp {1} vàvà cũng là là độ
độ phứ
phức tạ tạp
của giả ả i thuậ
gi thu l ậ t là
à n1
n(n1)
T(n) (n i) O(n2 )
i 1 2
16
Tìm kiếm tuần tự
17
Tìm kiếm tuần tự (tt)
FUNCTION Search(a:ARRAY[1..n] OF
Integer; x:Integer): Boolean;
VAR i:Integer; Found:Boolean;
BEGIN
{1} i:=1;
{2} Found:=FALSE;
{3} WHILE(i<=n) AND (not Found) DO
{4} IF A[i]=X THEN Found := TRUE
ELSE I := i+1;
{5} Search := Found;
END;
18
Tính độ phức tạp
của hàm tìm kiếm tuần tự
Ta thấ
thấy cá các lệlệnh {1}, {2}, {3} và và {5} nốnối tiế
tiếp nhau, do
đó độ
độ phứ
phức tạ tạp củ
của hà
hàm Search chí chính là là độ
độ phứ
phức
tạp lớ
lớn nhấ
nhất trong 4 lệ lệnh nà này. Dễ
Dễ dàng thấ thấy rằ
rằng ba
lệnh {1}, {2} và và {5}
{5} đề
đều cócó độđộ phứ
phức tạ tạp O(1)
O(1) do đó đó
độ phứ
phức tạ tạp củcủa hà
hàm Search chí chính là là độ
độ phứ
phức tạ tạp
của lệlệ nh {3}. Lồ
L ồ ng trong lệ
lệ nh {3} là
là l ệ nh {4}. Lệ
L ệ nh
{4} có
có độ độ phứ
phức tạ tạp O(1).
Lệnh {3} là là một vòng lặ lặp không xá xác đị định, nên ta
không biế biết nó
nó sẽ lặp bao nhiêu lầ lần, nhưng trong
trườ
trường hợ hợp xấ xấu nhấ
nhất (tấ
(tất cả
cả các phầ
phần tử tử của mả mảng
a đề
đều khákhác x, ta phả phải xé
xét hế
hết tấ
tất cả
cả các a[i], i có có các
giá
giá trị
trị từ 1 đến n) thì thì vòng lặ lặp {3} thự
thực hiệhiện n lầ lần, do
đó lệnh {3} tố tố n O(n). Vậ
V ậ y ta có
có T(n) = O(n).
19
Ðộ phức tạp của chương trình có
gọi chương trình con không đệ qui
Giả sử ta có một hệ thống các
chương trình gọi nhau theo sơ
đồ sau:
A B B1 B11
C B2 B12
20
Phân tích
các chương trình đệ qui
Có thể thấy hình ảnh chương trình
đệ quy A như sau:
A
21
Chương trình đệ quy
22
Thành lập
phương trình đệ quy
Phương trì trình đệđệ quy làlà một phương trì trình biể
biểu diễ
diễn
mối liên hệ hệ giữ
giữa T(n) và và T(k),
T(k), trong đó đó T(n) vàvà T(k)
là thờ
thời gian thự thực hiệhiện chương trì trình có
có kích thướ
thước
dữ liệ
liệu nhậ
nhập tương ứng là là n và
và k, vớvới k < n.
Ðể thà
thành lậ lập đượ
được phương trì trình đệ
đệ quy, ta phảphải
căn cứcứ vào chương trì trình đệ đệ quy.
Ứng vớ với trườ
trường hợ hợp đệ
đệ quy dừ dừng, ta phảphải xem xéxét
khi đó
đó chương trì trình là
làm gìgì và tốn hế hết bao nhiêu thờ thời
gian, chẳ
chẳng hạ hạn thờ
thời gian nà này là
là c(n).
c(n).
Khi đệđệ quy chưa dừ dừng thì
thì phả
phải xé
xét xem có có bao
nhiêu lờ ời
l g đgọ
ọ i đệệ quy vớớ
v k i kíí ch thướ
thư ớc k ta sẽ
sẽ có bấy
nhiêu T(k).
Ngoà
Ngoài ra ta còn phả phải xem xé xét đế
đến thờ
thời gian đểđể phân
chia bàbài toá
toán và và tổng hợhợp cá các lờ
lời giả
giải, chẳ
chẳng hạhạn
thờ
thờ i gian nàà
n l y là
à d(n).
23
Thành lập
phương trình đệ quy (tt)
Dạng tổng quát của một phương
trình đệ quy sẽ là:
C(n)
T(n)
F(T(k)) d(n)
C(n) là thời gian thực hiện chương
trình ứng với trường hợp đệ quy
dừng.
F(T(k)) là một đa thức của các T(k).
d(n) là thời gian để phân chia bài
toán và tổng hợp các kết quả.
24
Ví dụ về phương trình đệ quy
của chương trình đệ quy tính n!
Gọi T(n) là thời gian tính n!.
Thì T(n-1) là thời gian tính (n-1)!.
Trong trường hợp n = 0 thì chương trình chỉ
thực hiện một lệnh return 1, nên tốn O(1), do
đó ta có T(0) = C1.
Trong trường hợp n>0 chương trình phải gọi
đệ quy Giai_thua(n-1), việc gọi đệ quy này
tốn T(n-1), 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 n
và return tích số.
Thời gian để thực hiện phép nhân và return
là một hằng C2. Vậy ta có phương trình:
C1 nêu n = 0
T(n)
T(n - 1) C2 nêu n 0
25
Giải thuật MergeSort
List MergeSort (List L; int n){
List L1,L2
L1,L2
if (n==1) RETURN(L);
RETURN(L);
else {
Chia đôi L thà
thành L1 vàvà L2, vớ
với độ
độ dài n/2;
RETURN(Merge(MergeSort(L1,n/2),MergeSort(L2,n/2)));
};
};
Hàm MergeSort nhậ
nhận mộmột danh sá sách có
có độ
độ dài n và
và trả
trả
về một danh sá
sách đã đượ
được sắ
sắp xếxếp.
Thủ
Thủ tục Merge nhậ
nhận hai danh sá sách đã đượ
được sắsắp L1 và
và
L2 mỗ
mỗi danh sá
sách có
có độ
độ dài , trộ
trộn chú
chúng lạ
lại vớ
với nhau để
để
đượ
được mộ
một danh sá
sách gồ
gồm n phầ
phần tử tử có thứ
thứ tự.
26
Mô hình minh hoạ
Mergesort
Sắp xếp danh sách L gồm 8
phần tử 7, 4, 8, 9, 3, 1, 6, 2
7 4 8 9 3 1 6 2
7 4 8 9 3 1 6 2
7 4 8 9 3 1 6 2
7 4 8 9 3 1 6 2
4 7 8 9 1 3 2 6
4 7 8 9 1 2 3 6
1 2 3 4 6 7 8 9
27
Phương trình đệ quy của
giải thuật MergeSort
Gọi T(n) là thời gian thực hiện MergeSort
một danh sách n phần tử
Thì T(n/2) là thời gian thực hiện MergeSort
một danh sách n/2 phần tử.
Khi L có độ dài 1 (n = 1) thì chương trình
chỉ làm một việc duy nhất là return(L), việc
này tốn O(1) = C1 thời gian.
Trong trường hợp n > 1, chương trình phải
thực hiện gọi đệ quy MergeSort hai lần cho
L1 và L2 với độ dài n/2 do đó thời gian để
gọi hai lần đệ quy này là 2T(n/2).
28
Phương trình đệ quy của
giải thuật MergeSort (tt)
Ngoài ra còn phải tốn thời gian cho
việc chia danh sách L thành hai nửa
bằng nhau và trộn hai danh sách kết
quả (Merge).
Người ta xác đinh được thời gian để
chia danh sách và Merge là O(n) =
C2n .
Vậy ta có phương trình đệ quy như
sau:
C1 nêu n 1
Tn n
C2 n nêu n 1
2
2T
29
Giải phương trình đệ quy
30
Phương pháp truy hồi
31
Ví dụ 1 về giải phương trình đệ
quy bằng phương pháp truy hồi
C nêu n = 0
T(n) 1
T(n - 1) C 2 nêu n 0
T(n) = T(n-1) + C2
T(n) = [T(n-2) + C2] + C2 = T(n-2) + 2C2
T(n) = [T(n-3) + C2] + 2C2 = T(n-3) + 3C2
……
T(n) = T(n-i) + iC2
Quá trình trên kết thúc khi n - i = 0 hay i = n.
Khi đó ta có T(n) = T(0) + nC2 = C1 + nC2 =
O(n)
32
Ví dụ 2 về giải phương trình đệ
quy bằng phương pháp truy hồi
C1 nêu n 1
T(n) n
C 2 n nêu n 1
2
2T
n
T(n) = 2T + C 2 n
2
n n n
T(n) 2 2T C 2 C 2 n 4T 2C 2 n
4 2 4
n n n
T(n) 4 2T C 2 2 C 2 n 8T 3C 2 n
8 4 8
……………..
n
T(n) 2 i T i iC 2 n
2
Quá trình suy rộng sẽ kết thúc khi n/2i = 1 hay 2i = n và do đó i =
logn. Khi đó ta có:
T(n) = nT(1) + lognC2n = C1n + C2nlogn = O(nlogn).
33
Lời giải tổng quát cho một lớp
các phương trình đệ quy
Trong mục này, chúng ta sẽ nghiên
cứu các phần sau:
Bài toán đệ quy tổng quát.
Thành lập phương trình đệ quy tổng
quát.
Giải phương trình đệ quy tổng quát.
Các khái niệm về nghiệm thuần nhất,
nghiệm riêng và hàm nhân.
Nghiệm của phương trình đệ quy tổng
quát khi d(n) là hàm nhân.
Nghiệm của phương trình đệ quy tổng
quát khi d(n) không phải là hàm nhân.
34
Bài toán đệ quy tổng quát
Ðể giả
giải mộ
một bà
bài toá
toán kí
kích thướ
thước n, ta chia bà bài toá
toán
đã cho thàthành a bà bài toá
toán con, mỗ mỗi bà
bài toá
toán con có có
kích thướ
thước n/b. Giả Giải cá
các bàbài toá
toán con nànày vàvà tổng
hợp kếkết quả
quả lại đểđể đượ
được kế kết quả
quả của bàbài toá
toán đã
cho.
Với cá
các bà bài toá
toán con chú chúng ta cũ cũng sẽ
sẽ áp dụdụng
phương phá pháp đóđó để
để tiế
tiếp tụtục chia nhỏ
nhỏ ra nữnữa cho
đến cá
các bàbài toá
toán con kí kích thướ
thước 1. KĩKĩ thuậ
thuật nà
này sẽ
sẽ
dẫn chú
chúng ta đế đến mộmột giảgiải thuậ
thuật đệ
đệ quy.
Giả
Giả thiế
thiết rằ
rằng mỗmỗi bà
bài toá
toán con kí kích thướ
thước 1 lấ lấy mộ
một
đơn vịvị thờ
thời gian
Giả
Giả thiế
thiết thờ
thời gian đểđể chia bà bài toá
toán kí
kích thướ
thước n
thà
thành cácác bàbài toá
toán con kí kích thướ
thước n/b và và tổng hợ
hợp
kết quả
quả từ các bà bài toá
toán con để để đượ
được lờlời giả
giải củ
của bà
bài
toá
toán ban đầ đầu là
là d(n).
35
Thành lập phương trình đệ
quy tổng quát
Nếu gọgọi T(n) là
là thờ
thời gian đểđể giả
giải bà
bài toá
toán kí
kích thướ
thước n
Thì
Thì T(n/b) là
là thờ
thời gian đểđể giả
giải bà
bài toá
toán con kíkích thướ
thước
n/b.
Khi n = 1 theo giảgiả thiế
thiết trên thì
thì thờ
thời gian giả
giải bà
bài toá
toán
kích thướ
thước 1 làlà 1 đơn vịvị, tứ
tức là
là T(1) = 1.
Khi n lớ
lớn hơn 1, ta phảphải giả
giải đệ
đệ quy a bàbài toá
toán con kí kích
thướ
thước n/b, mỗmỗi bàbài toá
toán con tố tốn T(n/b) nên thờ
thời gian cho
a lờ
lời giả
giải đệ
đệ quy nànày là
là aT(n/b).
Ngoà
Ngoài ra ta còn phả phải tố
tốn thờ
thời gian đểđể phân chia bà bài toá
toán
và tổng hợhợp cá
các kếkết quả
quả, thờ
thời gian nà
này theo giả
giả thiế
thiết
trên là
là d(n). Vậy ta có có phương trì trình đệ
đệ quy:
1 neu n 1
n
T(n) aT
d n neu n 1
b
36
Giải phương trình đệ quy
tổng quát
n
T(n) aT d(n)
b
n n n n
T(n) a aT 2 d d(n) a 2T 2 ad d(n)
b b b b
n n n
T(n) a 2 aT 3 d 2 ad d(n)
b b b
n n n
a 3T 3 a 2d 2 ad d(n)
b b b
........
n n
i-1
T(n) a T i ‡”a jd j
i
b j0 b
37
Giải phương trình đệ quy
tổng quát (tt)
n n
i-1
T(n) a T i ‡”a jd j
i
b j0 b
Giả sử n = bk, quá trình suy rộng trên sẽ
kết thúc khi i = k. Khi đó ta được:
n n bk
T i T k T k T(1) 1
b b b
Thay vào trên ta có:
k -1
T(n) a ‡”a jd b k - j
k
j 0
38
Nghiệm thuần nhất và
nghiệm riêng
k -1
T(n) a ‡”a jd b k - j
k
j 0
Nghiệm Nghiệm
thuần nhất riêng
ak = nlogba
39
Hàm nhân
40
Tính nghiệm riêng khi d(n)
là hàm nhân
Khi d(n) là hàm nhân, ta có:
d(bk-j) = d(b.b.b…..b) =
d(b).d(b)…d(b) = [d(b)]k-j
k
a
a
j -1
k -1 k -1 k -1
k d(b)
NR ‡”a jd b k - j ‡”a j[d(b)]k - j [d(b)] ‡”
k
[d(b)]
j 0 j 0 j 0 d(b)
a
-1
d(b)
a k - [d(b)]k
Hay NR
a
-1
d(b)
41
a k - [d(b)]k
NR
Ba trường hợp a
-1
d(b)
42
a k - [d(b)]k
NR
Ba trường hợp (tt) a
-1
d(b)
Trường hợp 3: a = d(b)
Công thức trên không xác đinh nên ta
phải tính trực tiếp nghiệm riêng:
j
a
k -1 k -1
NR [d(b)] ‡”
k
a ‡”1 a k k
k
(do a d(b))
j 0 d(b) j 0
43
Ví dụ: GPT với T(1) = 1 và
n
1/ T(n) 4T n
2
44
Ví dụ: GPT với T(1) = 1 và
n
2/ T(n) 4T n 2
2
Phương trình đã cho có dạng
phương trình tổng quát.
d(n)=n2 là hàm nhân.
a = 4 và b = 2.
d(b) = b2 = 4 = a.
T(n) = O(nlogbalogbn)
= O(nlog4logn) = O(n2logn).
45
Ví dụ: GPT với T(1) = 1 và
n
3/ T(n) 4T n 3
2
46
Nghiệm của phương trình đệ
quy tổng quát khi d(n) không
phải là hàm nhân
Trong trường hợp hàm tiến triển
không phải là một hàm nhân thì
chúng ta không thể áp dụng các
công thức ứng với ba trường
hợp nói trên mà chúng ta phải
tính trực tiếp NR, sau đó lấy
MAX(NR,NTN).
47
Ví dụ: GPT với T(1) = 1 và
n
T(n) 2T nlogn
2
PT thuộc dạng phương trình tổng
quát nhưng d(n) = nlogn không phải
là một hàm nhân.
NTN = nlogba = nlog2 = n
Do d(n) = nlogn không phải là hàm
nhân nên ta phải tính nghiệm riêng
bằng cách xét trực tiếp
48
Ví dụ (tt)
2 2
k -1 k -1
NR ‡”a d b j k- j j k- j
log2 k - j
j 0 j= 0
k -1
k(k 1)
NR 2 k
(k - j) 2 k
j 0 2
O(2 k k 2 )
49
BT4-1: GPT với T(1) = 1 và
n
T(n) T 1
2
50
BT4-2: GPT với T(1) = 1 và
n
T(n) 2T logn
2
51
n
BT4 - 2 : GTP voi T(1) 1 va T(n) 2T logn
2
k 1 k 1
NR a d (b j k j
) 2 j log 2 k j
j 0 j 0
k 1 k 1 k 1
NR 2 (k j ) k 2 j 2 j
j j
j 0 j 0 j 0
k 1
2k 1
NR O (k 2 ) O (k j
)
j 0 2 1
T ( n) O ( n log n)
52