You are on page 1of 57

THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ

TS. Huỳnh Thị Hồng Diễm

Trường Đại học Bách Khoa TP HCM


Khoa Khoa học ứng dụng, bộ môn Toán ứng dụng

TP. HCM tháng 2 năm 2021.

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 1 / 19
Thuật toán và độ phức tạp

Thuật toán là một dãy hữu hạn các bước, mỗi bước mô tả chính xác các
phép toán, hoặc hành động cần thực hiện,...để cho ta lời giải của bài toán.

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 2 / 19
Thuật toán và độ phức tạp

Thuật toán là một dãy hữu hạn các bước, mỗi bước mô tả chính xác các
phép toán, hoặc hành động cần thực hiện,...để cho ta lời giải của bài toán.
Một vấn đề quan trọng của thuật toán là ta phải đánh giá và so sánh
được các thuật toán với nhau. Nói chung tiêu chuẩn để đánh giá một
thuật toán là tốt hay không chủ yếu dựa trên độ phức tạp của nó, tức là
dựa trên số thời gian cần dùng để thực hiện nó.

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 2 / 19
Tiêu chuẩn: Thuật toán sử dụng tiết kiệm nhất các nguồn
tài nguyên của máy tính và đặc biệt chạy nhanh nhất có
thể được, được gọi là tính hiệu quả của thuật toán. Tính
hiệu quả của thuật toán gồm 2 nhân tố cơ bản:

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 3 / 19
Tiêu chuẩn: Thuật toán sử dụng tiết kiệm nhất các nguồn
tài nguyên của máy tính và đặc biệt chạy nhanh nhất có
thể được, được gọi là tính hiệu quả của thuật toán. Tính
hiệu quả của thuật toán gồm 2 nhân tố cơ bản:
1 Dung lượng không gian nhớ cần thiết để lưu dữ liệu
vào, các kết quả tính toán trung gian và các kết quả
của thuật toán.

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 3 / 19
Tiêu chuẩn: Thuật toán sử dụng tiết kiệm nhất các nguồn
tài nguyên của máy tính và đặc biệt chạy nhanh nhất có
thể được, được gọi là tính hiệu quả của thuật toán. Tính
hiệu quả của thuật toán gồm 2 nhân tố cơ bản:
1 Dung lượng không gian nhớ cần thiết để lưu dữ liệu
vào, các kết quả tính toán trung gian và các kết quả
của thuật toán.
2 Thời gian cần thiết để thực hiện thuật toán. Một
thuật toán có hiệu quả được xem là thuật toán có
thời gian chạy ít hơn so với các thuật toán khác.

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 3 / 19
Có 2 cách tiếp cận để đánh giá thời gian thực hiện của
một thuật toán: phương pháp thử nghiệm và phương
pháp lý thuyết.

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 4 / 19
Có 2 cách tiếp cận để đánh giá thời gian thực hiện của
một thuật toán: phương pháp thử nghiệm và phương
pháp lý thuyết.
Trong phương pháp thử nghiệm, ta viết chương trình và
cho chạy chương trình với các dữ liệu vào khác nhau trên
một máy tính nào đó. Thời gian chạy chương trình phụ
thuộc vào các nhân tố sau:

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 4 / 19
Có 2 cách tiếp cận để đánh giá thời gian thực hiện của
một thuật toán: phương pháp thử nghiệm và phương
pháp lý thuyết.
Trong phương pháp thử nghiệm, ta viết chương trình và
cho chạy chương trình với các dữ liệu vào khác nhau trên
một máy tính nào đó. Thời gian chạy chương trình phụ
thuộc vào các nhân tố sau:
1 Các dữ liệu vào

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 4 / 19
Có 2 cách tiếp cận để đánh giá thời gian thực hiện của
một thuật toán: phương pháp thử nghiệm và phương
pháp lý thuyết.
Trong phương pháp thử nghiệm, ta viết chương trình và
cho chạy chương trình với các dữ liệu vào khác nhau trên
một máy tính nào đó. Thời gian chạy chương trình phụ
thuộc vào các nhân tố sau:
1 Các dữ liệu vào
2 Chương trình dịch để chuyển chương trình thành mã
máy.

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 4 / 19
Có 2 cách tiếp cận để đánh giá thời gian thực hiện của
một thuật toán: phương pháp thử nghiệm và phương
pháp lý thuyết.
Trong phương pháp thử nghiệm, ta viết chương trình và
cho chạy chương trình với các dữ liệu vào khác nhau trên
một máy tính nào đó. Thời gian chạy chương trình phụ
thuộc vào các nhân tố sau:
1 Các dữ liệu vào
2 Chương trình dịch để chuyển chương trình thành mã
máy.
3 Tốc độ thực hiện các phép toán của máy tính được sử
dụng để chạy chương trình.
TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 4 / 19
Vì thời gian chạy chương trình phụ thuộc vào nhiều nhân
tố nên ta không thể biểu diễn chính xác thời gian chạy là
bao nhiêu đơn vị thời gian chuẩn.

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 5 / 19
Vì thời gian chạy chương trình phụ thuộc vào nhiều nhân
tố nên ta không thể biểu diễn chính xác thời gian chạy là
bao nhiêu đơn vị thời gian chuẩn.
Trong phương pháp lý thuyết, ta sẽ coi thời gian thực
hiện thuật toán như là hàm số của cỡ dữ liệu vào. Cỡ của
dữ liệu vào là một tham số đặc trưng cho dữ liệu vào, có
ảnh hưởng quyết định đến thời gian thực hiện chương
trình. Thông thường cỡ của dữ liệu vào là một số nguyên
dương n. Ta sẽ sử dụng hàm số T (n), trong đó n là cỡ dữ
liệu vào, để biểu diễn thời gian thực hiện một thuật toán.

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 5 / 19
Chúng ta có thể xác định thời gian thực hiện T (n) là số phép toán sơ cấp
cần phải tiến hành khi thực hiện thuật toán. Ví dụ các phép toán số học
+,-,*,/, và các phép toán so sánh =,<,>,6, > là các phép toán sơ cấp.

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 6 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Định nghĩa
Giả sử n là số nguyên không âm. T (n) và f (n) là các hàm
thực không âm. Ta viết T (n) = O(f (n)) nếu và chỉ nếu
tồn tại các hằng số dương c, n0 sao cho
T (n) 6 c.f (n), ∀n > n0 .

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 7 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Định nghĩa
Giả sử n là số nguyên không âm. T (n) và f (n) là các hàm
thực không âm. Ta viết T (n) = O(f (n)) nếu và chỉ nếu
tồn tại các hằng số dương c, n0 sao cho
T (n) 6 c.f (n), ∀n > n0 .

Ví dụ
Giả sử T (n) = 3n2 + 4n + 5. Ta có
3n2 + 4n + 5 6 3n2 + 4n2 + 5n2 = 12n2 , ∀n > 1. Vậy
T (n) = O(n2 ).

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 7 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Thông thường f (n) là các hàm số sau:


f (n) = 1; f (n) = log n, f (n) = nα , f (n) = 2n , f (n) = n!.

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 8 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Thông thường f (n) là các hàm số sau:


f (n) = 1; f (n) = log n, f (n) = nα , f (n) = 2n , f (n) = n!.

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 8 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Thông thường f (n) là các hàm số sau:


f (n) = 1; f (n) = log n, f (n) = nα , f (n) = 2n , f (n) = n!.
Kí hiệu O(f (x)) của f (x) Độ phức tạp loại

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 8 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Thông thường f (n) là các hàm số sau:


f (n) = 1; f (n) = log n, f (n) = nα , f (n) = 2n , f (n) = n!.
Kí hiệu O(f (x)) của f (x) Độ phức tạp loại
O(1) Hằng

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 8 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Thông thường f (n) là các hàm số sau:


f (n) = 1; f (n) = log n, f (n) = nα , f (n) = 2n , f (n) = n!.
Kí hiệu O(f (x)) của f (x) Độ phức tạp loại
O(1) Hằng
O(log ) Logarit

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 8 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Thông thường f (n) là các hàm số sau:


f (n) = 1; f (n) = log n, f (n) = nα , f (n) = 2n , f (n) = n!.
Kí hiệu O(f (x)) của f (x) Độ phức tạp loại
O(1) Hằng
O(log ) Logarit
O(n) Tuyến tính

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 8 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Thông thường f (n) là các hàm số sau:


f (n) = 1; f (n) = log n, f (n) = nα , f (n) = 2n , f (n) = n!.
Kí hiệu O(f (x)) của f (x) Độ phức tạp loại
O(1) Hằng
O(log ) Logarit
O(n) Tuyến tính
O(n log n) n log n

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 8 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Thông thường f (n) là các hàm số sau:


f (n) = 1; f (n) = log n, f (n) = nα , f (n) = 2n , f (n) = n!.
Kí hiệu O(f (x)) của f (x) Độ phức tạp loại
O(1) Hằng
O(log ) Logarit
O(n) Tuyến tính
O(n log n) n log n
2
O(n ) Bình phương

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 8 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Thông thường f (n) là các hàm số sau:


f (n) = 1; f (n) = log n, f (n) = nα , f (n) = 2n , f (n) = n!.
Kí hiệu O(f (x)) của f (x) Độ phức tạp loại
O(1) Hằng
O(log ) Logarit
O(n) Tuyến tính
O(n log n) n log n
2
O(n ) Bình phương
3
O(n ) Lập phương

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 8 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Thông thường f (n) là các hàm số sau:


f (n) = 1; f (n) = log n, f (n) = nα , f (n) = 2n , f (n) = n!.
Kí hiệu O(f (x)) của f (x) Độ phức tạp loại
O(1) Hằng
O(log ) Logarit
O(n) Tuyến tính
O(n log n) n log n
2
O(n ) Bình phương
3
O(n ) Lập phương
n
O(2 ) Mũ

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 8 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Thông thường f (n) là các hàm số sau:


f (n) = 1; f (n) = log n, f (n) = nα , f (n) = 2n , f (n) = n!.
Kí hiệu O(f (x)) của f (x) Độ phức tạp loại
O(1) Hằng
O(log ) Logarit
O(n) Tuyến tính
O(n log n) n log n
2
O(n ) Bình phương
3
O(n ) Lập phương
n
O(2 ) Mũ
O(n!) Giai thừa

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 8 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Danh sách này sắp xếp theo thứ tự tăng dần của hàm thời gian thực hiện.
Ví dụ, giả sử thuật toán A có thời gian thực hiện là TA (n) = O(n2 ), thuật
toán B có thời gian thực hiện là TB (n) = O(n log2 n) thì với n = 1024
thuật toán A cần 1048576 phép toán sơ cấp, còn thuật toán B đòi hỏi
10240 phép toán sơ cấp. Với n càng lớn thì thuật toán A càng đòi hỏi thời
gian thực hiện nhiều hơn rất nhiều lần so với thuật toán B.

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 9 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Các quy tắc để đánh giá thời gian thực hiện thuật toán

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 10 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Các quy tắc để đánh giá thời gian thực hiện thuật toán

Tính chất của hàm thời gian

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 10 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Các quy tắc để đánh giá thời gian thực hiện thuật toán

Tính chất của hàm thời gian


1 Nếu T (n) = O(f (n)), f (n) = O(g (n)) thì T (n) = O(g (n)).

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 10 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Các quy tắc để đánh giá thời gian thực hiện thuật toán

Tính chất của hàm thời gian


1 Nếu T (n) = O(f (n)), f (n) = O(g (n)) thì T (n) = O(g (n)).
2 Nếu T1 (n) = O(f1 (n)), T2 (n) = O(f2 (n)) thì
T1 (n) + T2 (n) = O(max(f1 (n), f2 (n)))

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 10 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Các quy tắc cơ bản tính thời gian thực hiện thuật
toán

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 11 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Các quy tắc cơ bản tính thời gian thực hiện thuật
toán
Các phép gán, đọc, viết, goto là câu lệnh. Các lệnh
này là lệnh đơn và thời gian thực hiện là O(1).

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 11 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Các quy tắc cơ bản tính thời gian thực hiện thuật
toán
Các phép gán, đọc, viết, goto là câu lệnh. Các lệnh
này là lệnh đơn và thời gian thực hiện là O(1).
Nếu S1 , S2 , . . . , Sn là các câu lệnh thì Begin
S1 , S2 , . . . , Sn End là câu lệnh. Thời gian thực hiện
lệnh này được xác định bởi quy tắc tổng.

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 11 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Các quy tắc cơ bản tính thời gian thực hiện thuật
toán
Các phép gán, đọc, viết, goto là câu lệnh. Các lệnh
này là lệnh đơn và thời gian thực hiện là O(1).
Nếu S1 , S2 , . . . , Sn là các câu lệnh thì Begin
S1 , S2 , . . . , Sn End là câu lệnh. Thời gian thực hiện
lệnh này được xác định bởi quy tắc tổng.
Nếu S1 , S2 là các câu lệnh và E là biểu thức logic thì
If E then S1 và If E then S1 else S2 là câu lệnh. Giả sử
thời gian thực hiện lệnh S1 , S2 là O(f1 (n)) và O(f2 (n))
thì khi đó thời gian thực hiện lệnh If là
O(max(f1 (n), f2 (n))).
TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 11 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Nếu S1 , S2 , . . . , Sn là các câu lệnh, E là biểu thức có


kiểu thứ tự đếm được và v1 , v2 , . . . , vn là các giá trị có
cùng kiểu với E thì Case E of
v1 : S1 ; v2 : S2 ; . . . , vn : Sn ; End là câu lệnh. Đánh giá
thời gian thực hiện lệnh Case giống như lệnh If.

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 12 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Nếu S1 , S2 , . . . , Sn là các câu lệnh, E là biểu thức có


kiểu thứ tự đếm được và v1 , v2 , . . . , vn là các giá trị có
cùng kiểu với E thì Case E of
v1 : S1 ; v2 : S2 ; . . . , vn : Sn ; End là câu lệnh. Đánh giá
thời gian thực hiện lệnh Case giống như lệnh If.
Nếu S là câu lệnh, E là biểu thức logic thì While E do
S là câu lệnh. Thời gian thực hiện lệnh While được
đánh giá như sau: giả sử thời gian thực hiện lệnh S là
O(f (n)), giả sử g (n) là số tối đa các lần thực hiện
lệnh S khi thực hiện lệnh While. Khi đó thời gian thực
hiện lệnh While là O(f (n).g (n))

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 12 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Nếu S1 , S2 , . . . , Sn là các câu lệnh, E là biểu thức logic


thì Repeat S1 , S2 , . . . , Sn Until E là câu lệnh. Thời
gian thực hiện lệnh Repeat được đánh giá như sau: giả
sử thời gian thực hiện lệnh S là O(f (n)), giả sử g (n)
là số tối đa các lần thực hiện lệnh S khi thực hiện lệnh
Repeat. Khi đó thời gian thực hiện lệnh Repeat là
O(f (n).g (n)).

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 13 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Nếu S1 , S2 , . . . , Sn là các câu lệnh, E là biểu thức logic


thì Repeat S1 , S2 , . . . , Sn Until E là câu lệnh. Thời
gian thực hiện lệnh Repeat được đánh giá như sau: giả
sử thời gian thực hiện lệnh S là O(f (n)), giả sử g (n)
là số tối đa các lần thực hiện lệnh S khi thực hiện lệnh
Repeat. Khi đó thời gian thực hiện lệnh Repeat là
O(f (n).g (n)).
Với S là câu lệnh, E1 , E2 là biểu thức cùng một kiểu
thứ tự đếm được thì For i:=E1 to E2 do S, For i:=E2
downto E1 do S là câu lệnh. Thời gian thực hiện lệnh
For được đánh giá tương tự như thời gian thời gian
thực hiện lệnh While và lệnh Repeat.
TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 13 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Ví dụ. Đánh giá thời gian thực hiện của hàm đệ quy sau:
Function fact(n: integer): integer;
Begin
If n 6 1 then fact:=1 else fact:=n*fact(n-1); End;
Với n = 1 chỉ cần thực hiện lệnh gán fact:=1, do đó
T (1) = O(1). Với n > 1 cần thực hiện lệnh gán
fact:=n*fact(n-1). Do đó thời gian T (n) sẽ là O(1) để
thực hiện phép nhân và phép gán cộng với thời gian
T (n − 1) để thực hiện lời gọi đệ quy fact(n-1). Như vậy,
T(1)=O(1), T(n)=O(1)+T(n-1)=(n-1)O(1)+T(1) hay
T(n)=O(n).

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 14 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Các thuật toán cơ bản và độ phức tạp

Ví dụ
Xác định độ phức tạp của thuật toán của hàm tính dãy số
Fibonacci:

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 15 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Các thuật toán cơ bản và độ phức tạp

Ví dụ
Xác định độ phức tạp của thuật toán của hàm tính dãy số
Fibonacci:
Function Fibo(n: integer): integer;
var i,j,k: integer;
Begin
i:=1;j:=0;
For k:=1 to n do Begin j:=i+j; i:=j-i; End;
Fibo:=j; End;
Thời gian thực hiện của thuật toán trên là O(n).

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 15 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Một bài toán thường có nhiều thuật toán để giải, mỗi thuật toán khác
nhau có thể có độ phức tạp khác nhau. Đánh giá độ phức tạp thuật toán
là một trong những cách phân tích, so sánh và tìm ra trong những thuật
toán đó một thuật toán tối ưu.

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 16 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Một bài toán thường có nhiều thuật toán để giải, mỗi thuật toán khác
nhau có thể có độ phức tạp khác nhau. Đánh giá độ phức tạp thuật toán
là một trong những cách phân tích, so sánh và tìm ra trong những thuật
toán đó một thuật toán tối ưu.

Ví dụ
Xét bài toán tính giá trị đa thức

P(x) = an x n + an−1 x n−1 + . . . + a1 x + a0 , x = x0 ;

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 16 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Thuật toán 1. Tính giá trị từng hạng tử của đa thức


Với i=1 đến n tính ai x0i .
n
ai x0i + a0 = P(x0 ).
P
Tính
i=1

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 17 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Thuật toán 1. Tính giá trị từng hạng tử của đa thức


Với i=1 đến n tính ai x0i .
n
ai x0i + a0 = P(x0 ).
P
Tính
i=1
Thuật toán 2. Đa thức P(x) có thể viết dưới dạng
P(x) = (. . . ((an x + an−1 )x . . .)x + a0 .
P := an . Với i=1 đến n: P = Px0 + an−i . Như vậy, P(x0 ) = P.

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 17 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Thuật toán 1. Tính giá trị từng hạng tử của đa thức


Với i=1 đến n tính ai x0i .
n
ai x0i + a0 = P(x0 ).
P
Tính
i=1
Thuật toán 2. Đa thức P(x) có thể viết dưới dạng
P(x) = (. . . ((an x + an−1 )x . . .)x + a0 .
P := an . Với i=1 đến n: P = Px0 + an−i . Như vậy, P(x0 ) = P.
n(n + 1) n(n + 3)
Thuật toán 1 cần +n = phép tính.
2 2

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 17 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Thuật toán 1. Tính giá trị từng hạng tử của đa thức


Với i=1 đến n tính ai x0i .
n
ai x0i + a0 = P(x0 ).
P
Tính
i=1
Thuật toán 2. Đa thức P(x) có thể viết dưới dạng
P(x) = (. . . ((an x + an−1 )x . . .)x + a0 .
P := an . Với i=1 đến n: P = Px0 + an−i . Như vậy, P(x0 ) = P.
n(n + 1) n(n + 3)
Thuật toán 1 cần +n = phép tính. Thuật toán 2 cần
2 2
2n phép tính

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 17 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Ví dụ
Phân tích thuật toán Euclide tìm ước số chung lớn nhất
của 2 số nguyên dương a,b.
Input: a,b là 2 số nguyên dương
Output: ước số chung lớn nhất của hai số a,b.
Function USCLN(a,b)
Begin
x:=a; y:=b;
While y 6= 0 Begin r:=x mod y; x:=y; y:=r; End;
USCLN:=x; End;

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 18 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Ví dụ
Phân tích thuật toán Euclide tìm ước số chung lớn nhất
của 2 số nguyên dương a,b.
Input: a,b là 2 số nguyên dương
Output: ước số chung lớn nhất của hai số a,b.
Function USCLN(a,b)
Begin
x:=a; y:=b;
While y 6= 0 Begin r:=x mod y; x:=y; y:=r; End;
USCLN:=x; End;
Để đánh giá độ phức tạp của thuật toán trên, ta đếm số
phép chia thực hiện theo thuật toán.
TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 18 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Mệnh đề
Giả sử cặp số a, b(a > b) đòi hỏi n > 1 phép chia trong thuật toán
Euclide. Khi đó a > fn+1 , b > fn , trong đó {fn } là dãy Fibonacci, được xác
định bởi công thức truy hồifn+2 = fn + fn+1 , n > 2, f0 = f1 = 1 và có công
√ !n+1 √ !n+1
1 1+ 5 1− 5
thức tường minh fn = √  − 
5 2 2

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 19 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Mệnh đề
Đặt m = max{a, b}, khi đó thuật toán đòi hỏi không quá log3/2 (2m/3)
phép chia.

Vậy độ phức tạp của thuật toán Euclide là O(log3/2 (2m/3))

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 20 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Bài tập

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 21 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Bài tập

Đánh giá độ phức tạp của các thuật toán sau:


1 Thuật toán tìm phần tử lớn nhất của một dãy hữu hạn số thực.

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 21 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Bài tập

Đánh giá độ phức tạp của các thuật toán sau:


1 Thuật toán tìm phần tử lớn nhất của một dãy hữu hạn số thực.
2 Thuật toán tìm phần tử bé nhất của một tập con của tập hợp số tự
nhiên.

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 21 / 19
Dùng O(f (x)) để đánh giá thời gian thực hiện thuật toán

Bài tập

Đánh giá độ phức tạp của các thuật toán sau:


1 Thuật toán tìm phần tử lớn nhất của một dãy hữu hạn số thực.
2 Thuật toán tìm phần tử bé nhất của một tập con của tập hợp số tự
nhiên.
3 Thuật toán xếp lại một dãy theo thứ tự tăng dần.

TS. Huỳnh Thị Hồng Diễm (BK TPHCM) THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA NÓ TP. HCM tháng 2 năm 2021. 21 / 19

You might also like