1014 𝑥 60 𝑥 60 𝑥 24 𝑥 365 ≈ 3170 𝑛ă𝑚
1.5. ĐÁNH GIÁ ĐỘ PHỨC TẠP CỦA THUẬT TOÁN HàmTên gọ
log n log n tuyến tính n log n n log n n2 bình phương n3 bậc 3 2n hàm mũ nk (k là hằng số dương) đa thức
1.5. ĐÁNH GIÁ ĐỘ PHỨC TẠP CỦA THUẬT TỐN
Tên gọi Logarit Tuyến tính n log n Bình phương Lập phương mũ Giai thừa n mũ n g(n) n log2n N nlog2n n2 n3 2n n! nn 1 0 1 0 1 1 2 1 1 2 1 2 2 4 8 4 2 4 4 2 4 8 16 64 16 24 256 8 3 8 24 64 512 256 40320 134217728 16 4 16 64 256 4096 65536 ~21.1012 ~18.1018 32 5 32 160 1024 32768 2.147.483.648 ~26.1061 ~1.5x1056 64 6 64 384 4096 262144 ~1.8x1027 ~1.3x1097 ~
1.5. ĐÁNH GIÁ ĐỘ PHỨC TẠP CỦA THUẬT TỐN
Xét ví dụ: Giả sử một bài tốn nào đó, có hai thuật tốn giải là A và B.
Thuật tốn A có thời gian thực hiện là fA(n) = O(n2)
Thuật tốn B có thời gian thực hiện là fB = O(n.logn).
Với n = 1024 thuật toán A cần 1048576 phép toán sơ cấp, thuật tốn B địi hỏi 10240 phép toán sơ cấp.
Nếu cần một micro-giây cho một phép tốn sơ cấp thì thuật tốn A cần khoảng 1,05 giây trong khi đó thuật tốn B cần khoảng 0,01 giây.
Nếu n = 2048 , thì thuật tốn A địi hỏi khoảng 4,2 giây, trong khi thuật tốn B chỉ địi hỏi khoảng 0,02 giây.
Vì vậy nếu một thuật tốn có thời gian thực hiện O(n2) mà ta tìm ra được một thuật tốn khác cho bài tốn đó với thời gian
1.5. ĐÁNH GIÁ ĐỘ PHỨC TẠP CỦA THUẬT TOÁN
Các quy tắc đánh giá độ phức tạp về thời gian thực hiện thuật toán
Qui tắc tổng :
Giả sử f1(n) và f2 (n) là thời gian thực hiện của hai đoạn chương trình P1 và P2 mà
f1(n)= O(g1(n)) và f2(n) = O(g2(n))
thì thời gian thực hiện P1 và P2 kế tiếp nhau sẽ là:
1.5. ĐÁNH GIÁ ĐỘ PHỨC TẠP CỦA THUẬT TOÁN
Quy tắc nhân :
Nếu tương ứng với P1 và P2 là f1(n) = O(g1(n)),
f2(n) = O(g2(n))
thì thời gian thực hiện P1 và P2 lồng nhau sẽ là : f1(n).f2(n) = O(g1(n).g2(n)).
1.5. ĐÁNH GIÁ ĐỘ PHỨC TẠP CỦA THUẬT TỐN
Ví dụ:
Câu lệnh gán : x = x +1 có thời gian thực hiện bằng c (hằng số) nên được đánh giá là O(1).
Câu lệnh for (i = 1; i<= n; i++) x = x +1 có thời gian thực hiện O(n.1) = O(n).
Câu lệnh for (i= 1; i<=n; i ++)
for (j = 1; j<=n; j++) x = x +1
có thời gian được đánh giá là O(n.n) = O(n2)
Cũng có thể thấy O(c.g(n)) = O(g(n)) chẳng hạn
1.5. ĐÁNH GIÁ ĐỘ PHỨC TẠP CỦA THUẬT TOÁN
Ví dụ 1: Giả sử f(n) = n! Ta có n! < nn
n! = O(nn)
log(n!) = O(nlogn)
Ví dụ 2: Giả sử f(n) = nlog(n!) + (3n2 + 2n) logn Ta có:
log (n!) = O(nlogn) nlog (n!) = O(n2logn)
(3n2 + 2n) = O(n2) (3n2 + 2n)logn = O(n2logn) Vậy f(n) = O(n2logn)
1.5. ĐÁNH GIÁ ĐỘ PHỨC TẠP CỦA THUẬT TỐN
Ví dụ 3: Giả sử f(n) = (n+3).log(n2+4) + 5n2
Ta có:
log (n2+4) = O(logn)
vì với n>2 ta có log(n2+4) < log(2n2) < log 2 + log n2= log 2 + 2log n < 3 log n
n+3 = O(n)
(n+3)log (n2+4) = O(nlogn)
5n2 = O(n2) Vậy
1.5. ĐÁNH GIÁ ĐỘ PHỨC TẠP CỦA THUẬT TOÁN
Các quy tắc đánh giá độ phức tạp về thời gian
thực hiện thuật toán