You are on page 1of 14

Báo cáo: Độ phức tạp thuật toán

Gs: Trần VănHưng


SVTH: Trương Hữu Hòa - 18CNTT3
SLIDESMANIA.
Nội dung chính
Nội dụng chính gồm những yêu cầu sau :
1. Trình bày cụ thể độ phức tạp củra thuật toán.
2. Trình bày các cách xác định độ phức tạp của
thuật toán. Mỗi cách xác định ít nhất 3 ví dụ minh
họa.
3. Trình bày độ phức tạp của máy turing
SLIDESMANIA.
1. Độ phức tạp thuật toán
SLIDESMANIA.
Độ phức tạp của thuật toán là thước đo thời gian một thuật
toán sẽ mất để hoàn thành một đầu vào có kích thước n.
Nếu một thuật toán phải mở rộng quy mô, thì nó sẽ tính
toán kết quả trong một giới hạn thời gian hữu hạn và thực
tế ngay cả đối với các giá trị lớn của n. Vì lý do này, độ
phức tạp được tính theo tiệm cận khi n tiến đến vô cùng.
Trong khi độ phức tạp thường là theo thời gian, đôi khi độ
phức tạp cũng được phân tích theo không gian, điều này
SLIDESMANIA.

chuyển sang yêu cầu bộ nhớ của thuật toán.


2. Xác định độ phức tạp thuật toán
SLIDESMANIA.
Cách XÁC ĐỊNH ĐỘ PHỨC TẠP thuật toán

● Độ phức tạp tính toán của giải thuật: O(f(n))


● Việc xác định độ phức tạp tính toán của giải thuật trong
thực tế có thể tính bằng một số quy tắc đơn giản sau:
SLIDESMANIA.
- Quy tắc bỏ hằng số : - Quy tắc cộng :
T(n) = O(c.f(n)) = O(f(n)) với c là một hằng số T1(n) = O(f(n))                T2(n) = O(g(n))
dương T1(n) + T2(n) = O(f(n) + g(n))

- Quy tắc nhân :


- Quy tắc lấy max : Đoạn chương trình có thời gian thực hiện
T(n) = O(f(n)+ g(n)) = O(max(f(n), g(n))) T(n)=O(f(n))
Nếu thực hiện k(n) lần đoạn chương trình với
k(n) = O(g(n)) thì độ phức tạp sẽ là O(g(n).f(n))
SLIDESMANIA.
PHÉP TOÁN TÍCH CỰC (BEST PROXY)
Trong một thuật toán, ta chú ý đặc biệt đến một phép toán gọi là
phép toán tích cực. Đó là phép toán mà số lần thực hiện không ít
hơn các phép toán khác.
Ví dụ 1 //Sử dụng quy tắt max và quy tắt bỏ hằng số:
s = 0;
for (i=0; i<=n;i++) (
            p =1;
            for (j=1;j<=i;j++)
                        p=p * x / j;
            s = s+p;
)
Phép toán tích cực là p = p * x / j
Số lần thực hiện phép toán này là
            0+1+2+…+n = n(n-1)/2 = n2/2 – n/2
SLIDESMANIA.

=> Vậy độ phức tạp là O(n2/2 – n/2)


= O(n2/2)       sử dụng quy tắc lấy max
= O(n2)           sử dụng quy tắc bỏ hằng số
Ví dụ 2: Sử dụng quy tắc Ví dụ 3: sử dụng quy tắc
nhân: nhân :
for (i= 1; i<=n; i++) for (i= 1; i<=n; i++)
            for (j= 1; j<=n; j++)             for (j= 1; j<=m; j++)
                        //Lệnh                         //Lệnh
=> Dùng quy tắc nhân ta có => Dùng quy tắc nhân ta có
O(n^2) O(n*m)
tương tự như vậy ta sẽ có
O(n^3), O(n^4).
SLIDESMANIA.
Ví dụ 4: Sử dụng quy tắc cộng và quy tắc lấy max:
for (i= 1;i<=n;i++)
            //lệnh1
for (j= 1;j<=m;j++)
            //lệnh 2
=> Dùng quy tắc cộng và quy tắc lấy max, sẽ có O(max (n,m))
SLIDESMANIA.
3. Độ phức tạp của máy
SLIDESMANIA.

Turing
A, Độ phức tạp của thuật toán trong máy turing

- Để đánh giá hiệu quả của một thuật toán, ta có thể


đánh giá độ phức tạp của thuật toán về mặt thời gian,
tức là thời gian máy tính làm việc và về không gian,
tức là dung lượng bộ nhớ của máy tính cần thiết để
thực hiện thuật toán, khi nói đến độ phức tạp của
thuật toán ta luôn hiểu là độ phức tạp về thời gian.
SLIDESMANIA.
B, Độ phức tạp về thời gian
Thời gian làm việc của máy tính khi chạy một thuật toán nào đó
không chỉ phụ thuộc vào thuật toán, mà còn phụ thuộc vào máy
tính được sử dụng. Vì thế, để có một tiêu chuẩn chung, ta sẽ đo độ
phức tạp của một thuật toán bằng số các phép tính phải thực hiện.
Khi thực hiện cùng một thuật toán, số các phép tính phải thực hiện
còn phụ thuộc vào cỡ của bài toán, tức là độ lớn của đầu vào. Vì
thế, độ phức tạp của thuật toán sẽ là một hàm số phụ thuộc độ lớn
của đầu vào. Trong những ứng dụng thực tiễn, chúng ta không cần
biết chính xác hàm này, mà chỉ cần biết “cỡ” của chúng, tức là cần
có một ước lượng đủ tốt của chúng.
SLIDESMANIA.
Cảm ơn thầy và các
bạn đã lắng nghe bài
báo cáo của em
SLIDESMANIA.

You might also like