ĐÁNH GIÁ ĐỘ PHỨC TẠP CỦA THUẬT TOÁN HàmTên gọ

Một phần của tài liệu Slide môn toán rời rạc CHƯƠNG 1: THUẬT TOÁN ( TRƯỜNG ĐẠI HỌC MỎ ĐỊA CHẤT) (Trang 33 - 42)

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 lnh 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

Một phần của tài liệu Slide môn toán rời rạc CHƯƠNG 1: THUẬT TOÁN ( TRƯỜNG ĐẠI HỌC MỎ ĐỊA CHẤT) (Trang 33 - 42)

Tải bản đầy đủ (PDF)

(78 trang)