
Độ phức tạp của thuật toán
Thông tin tài liệu:
Nội dung trích xuất từ tài liệu:
Độ phức tạp của thuật toán ĐỘ PHỨC TẠP CỦA THUẬT TOÁN Một chương trình máy tính thường được cài đặt dựa trên một thu ật toánđúng để giải quyết bài toán hay vấn đề. Tuy nhiên, ngay cả khi thu ật toánđúng, chương trình vẫn có thể không sử dụng được đối với một d ữ li ệu đ ầuvào nào đó vì thời gian để cho ra kết quả là quá lâu hoặc sử dụng quá nhiềubộ nhớ (vượt quá khả năng đáp ứng của máy tính). Khi tiến hành phân tích thuật toán nghĩa là chúng ta tìm ra một đánh giávề thời gian và không gian cần thiết để thực hiện thu ật toán. Không gian ởđây được hiểu là các yêu cầu về bộ nhớ, thiết bị lưu trữ, ... của máy tính đ ểthuật toán có thể làm việc. Việc xem xét về không gian của thuật toán ph ụthuộc phần lớn vào cách tổ chức dữ liệu của thuật toán. Trong ph ần này, khinói đến độ phức tạp của thuật toán, chúng ta chỉ đề cập đến nh ững đánh giávề mặt thời gian mà thôi. Phân tích thuật toán là một công việc rất khó khăn, đòi hỏi phải có nhữnghiểu biết sâu sắc về thuật toán và nhiều kiến thức toán học khác. Ðây là côngviệc mà không phải bất cứ người nào cũng làm được. Rất may mắn là cácnhà toán học đã phân tích cho chúng ta độ phức tạp của hầu hết các thuật toáncơ sở (sắp xếp, tìm kiếm, các thuật toán số h ọc, ...). Chính vì v ậy, nhi ệm v ụcòn lại của chúng ta là hiểu được các khái niệm liên quan đến độ ph ức t ạpcủa thuật toán. Ðánh giá về thời gian của thuật toán không phải là xác định thời giantuyệt đối (chạy thuật toán mất bao nhiêu giây, bao nhiêu phút,...) để thực hiệnthuật toán mà là xác định mối liên quan giữa dữ liệu đầu vào (input) của thuậttoán và chi phí (số thao tác, số phép tính cộng,trừ, nhân, chia, rút căn,...) đ ểthực hiện thuật toán. Sở dĩ người ta không quan tâm đến th ời gian tuyệt đốicủa thuật toán vì yếu tố này phụ thuộc vào tốc độ của máy tính, mà các máytính khác nhau thì có tốc độ rất khác nhau. Một cách tổng quát, chi phí thựchiện thuật toán là một hàm số phụ thuộc vào dữ liệu đầu vào : T = f(input) Tuy vậy, khi phân tích thuật toán, người ta thường chỉ chú ý đến mối liênquan giữa độ lớn của dữ liệu đầu vào và chi phí. Trong các thuật toán, độ lớncủa dữ liệu đầu vào thường được thể hiện bằng một con số nguyên n. Chẳnghạn : sắp xếp n con số nguyên, tìm con số lớn nhất trong n số, tính đi ểmtrung bình của n học sinh, ... Lúc này, người ta thể hiện chi phí thực hiệnthuật toán bằng một hàm số phụ thuộc vào n : T = f(n) Việc xây dựng một hàm T tổng quát như trên trong mọi trường h ợp c ủathuật toán là một việc rất khó khăn, nhiều lúc không thể thực hiện được.Chính vì vậy mà người ta chỉ xây dựng hàm T cho một số trường hợp đángchú ý nhất của thuật toán, thường là trường hợp tốt nhất và xấu nhất. Chúng ta trở lại ví dụ về thuật toán tìm hộp nặng nhất trong n hộp chotrước, nhưng lần này ta làm việc trên một thể hiện khác của vấn đề. Ðây làmột thuật toán tương đối đơn giản nên chúng ta có thể ti ến hành phân tíchđược độ phức tạp. Trước khi phân tích độ phức tạp, ta nhắc lại đôi điều vềthuật toán này. Tìm số lớn nhất trong một dãy số Bài toán : Cho một dãy số a có n phần tử a 1, a2, ...an. Hãy xây dựng thuậttoán để tìm con số lớn nhất trong dãy a. Nhận xét 1. Nếu dãy chỉ có 1 phần tử thì phần tử đó là số lớn nhất. 2. Giả sử dãy có n phần tử và ta đã xác định được phần tử lớn nhất là amax. Nếu bổ sung thêm phần tử thứ an+1 vào dãy mà an+1 > amax thì an+1 chínhlà phần tử lớn nhất của dãy có n+1 phần tử. Trường h ợp ngược lại, nghĩa làan+1 ? amax thì amax vẫn là phần tử lớn nhất của dãy có n+1 phần tử. Thuật toán 1. Ghi nhớ amax = a1. 2. i = 2. 3. Nếu (i ? n) thì thực hiện các bước sau, ngược lại sang bước 5. 3.1. Nếu (ai > amax ) thì 3.1.1. Ghi nhớ amax = ai . 3.2. Tăng i lên 1. 4. Trở lại bước 3. 5. Phần tử lớn nhất dãy a chính là amax .Kết thúc. Trong thuật toán trên, để đơn giản, ta chỉ xem chi phí là số lần so sánh ởbước 3.1 và số lần ghi nhớ trong bước 3.1.1. Trường hợp tốt nhất của thuậttoán này xảy ra khi con số lớn nhất nằm đầu dãy (a max= a1); trường hợp xấunhất xảy ra khi con số lớn nhất nằm ở cuối dãy (a max=an) và dãy được sắpxếp theo thứ tự tăng dần. Dựa theo sơ đồ khối của thuật toán, ta nhận thấy rằng, trong mọi trườnghợp của bài toán, phép ghi nhớ ở bước 3.1 luôn được thực hiện và số lầnthực hiện là n-1 (ứng với việc xét từ phần tử a 2 đến an). Ta gọi đây là chi phícố định hoặc bất biến của thuật toán. Trường hợp tốt nhất : do amax = a1 suy ra, với mọi i > 2, a i< amax. Do đó,điều kiện ai>amax ở bước 3.1 luôn không thỏa nên bước 3.1.1 không bao giờđược thực hiện. Như vậy, chi phí chung cho trường hợp này chính là chi phícố định của bài toán. T = f(n) = n-1 Trường hợp xấu nhất : Ta có : với mọi i>1, ai-1< ai (do định nghĩa dãy được sắp xếp tăng dần)nên điều kiện ai>amax ở bước 3.1 luôn thỏa, bước 3.1.1 luôn được thực hiện.Như vậy, ngoài chi phí chung là n-1 phép so sánh, ta cần ph ải dùng thêm n-1phép ghi nhớ ở bước 3.1.1. Như vậy, tổng chi phí của trường hợp này là T = f(n) = 2(n-1)=2n-2 Ðịnh nghĩa Cho hai hàm f và g có miền xác định trong tập số tự nhiên . Ta viết f(n) = O(g(n)) và nói f(n) có cấp cao nhất là g(n) khi tồn tại hằng số C và k sao cho | f(n) | ? C.g(n) với mọi n > k Tuy chi phí của thuật toán trong trường hợp tốt nh ất và x ấu nh ất có th ểnói lên nhiều điều nhưng vẫn chưa đưa ra được một hình dung tốt nhất về độphức tạp của thuật toán. Ðể có thể hình dung chính xác về độ phức tạp củathuật toán, ta xét đến một yếu tố khác là độ tăng của chi phí khi độ lớn n củadữ liệu đầu vào tăng. Theo định nghĩa ở trên, ta nhận thấy chi phí thấp nhất và lớn nhất củathuật toán tìm số lớn nhất đều bị chặn bởi O(n) (tồn tại hằng s ố C=10, k=1để 2n-2 < 10n với mọi n>1). Một cách tổng quát, nếu hàm chi phí của thuật toán (xét trong mộttrường hợp nào đó) bị chặn bởi O(f(n)) thì ta nói rằng thuật toán có độ ph ức ...
Tìm kiếm theo từ khóa liên quan:
tìm số lớn nhất trong một dãy số trường hợp tốt nhất trường hợp xấu nhất phân tích thuật toán tài liệu học đại họcTài liệu có liên quan:
-
25 trang 352 0 0
-
Bài giảng chuyên đề Phân tích và thiết kế thuật toán: Chia để trị
27 trang 239 0 0 -
122 trang 222 0 0
-
NHỮNG VẤN ĐỀ CƠ BẢN VỀ TIỀN TỆ, TÍN DỤNG
68 trang 192 0 0 -
Đề tài: Quản lý điểm sinh viên
25 trang 189 0 0 -
116 trang 183 0 0
-
Thảo luận về Tư Tưởng Hồ Chí Minh
34 trang 174 0 0 -
Tuyển Các bài Tập Nguyên lý Kế toán
64 trang 164 0 0 -
Phân tích yếu tố giới trong các dự án phát triển ở nông thôn Việt Nam
9 trang 147 0 0 -
CHƯƠNG II. CÂU CUNG VÀ GIÁ CẢ THỊ TRƯỜNG
16 trang 132 0 0 -
Tiểu luận ngành Khoa học máy tính: Thiết kế và phân tích thuật toán
36 trang 131 0 0 -
Ngân hàng Đề thi hệ thống thông tin kinh quản lý
0 trang 128 0 0 -
Bài thuyết trình: 3G CỦA VIETTEL
38 trang 126 0 0 -
Các dạng bài tập mẫu báo hiểm
5 trang 124 0 0 -
Ngân hàng câu hỏi và đáp án Đường lối Cách Mạng Đảng cộng sản Việt Nam
27 trang 118 0 0 -
Bài giảng Phân tích thiết kế thuật toán: Chương 3 - Nguyễn Văn Linh
87 trang 115 0 0 -
GIÁO TRÌNH: TÍNH TOÁN SONG SONG
112 trang 109 0 0 -
62 trang 108 0 0
-
TÀI LIỆU HƯỚNG DẪN THỰC HIỆN QUYẾT TOÁN THUẾ TNCN CHO NGƯỜI NỘP THUẾ
159 trang 103 0 0 -
Hướng dẫn sử dụng Mapinfo Professional-Phần cơ bản
57 trang 100 0 0