Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 71 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
71
Dung lượng
5,27 MB
Nội dung
PHẦN CÁC KHÁI NIỆM CƠ BẢN Phần nhắc lại khái niệm liên quan tới thuật toán số thuật toán sơ cấp quen thuộc thường dùng THUẬT TỐN VÀ ĐỘ PHỨC TẠP TÍNH TỐN 1.1 Thuật tốn, đặc trưng, mơ tả thuật tốn Khái niệm thuật tốn Tùy theo góc độ mà khái niệm thuật tốn hiểu theo nhiều cách khác nhau, chẳng hạn: Thuật toán phương pháp giải vấn đề theo bước Thuật tốn quy tắc để tính tốn Thuật tốn phương pháp giải vấn đề thích hợp cho cài đặt máy tính Trong tài liệu khái niệm thuật toán định nghĩa sau: Thuật toán dãy hữu hạn bước hành động xác định để giải vấn đề, trình thực bước hành động phải dừng cho kết mong muốn Các đặc trưng thuật toán Đầu vào đầu ra: Một thuật toán phải nhận liệu đầu vào để xử lý cho kết đầu Tính hữu hạn (hay cịn gọi tính dừng): Một áp dụng thuật toán phải cho kết sau số hữu hạn hành động Tính đơn trị: Kết hành động phụ thuộc vào kết hành động thực trước liệu đầu vào Nói cách khác, với đầu vào thuật toán cho đầu Tính xác định: Mỗi bước hành động phải rõ ràng, không nhập nhằng (người máy) thực Tính tổng qt: Thuật toán phải áp dụng cho lớp toán loại toán với đầu vào cụ thể khác Ngoài thuật tốn cịn có u cầu tính đắn tính hiệu Mơ tả thuật tốn Mơ tả thuật toán việc nêu bước hành động trình tự thực bước Mơ tả thuật tốn cơng việc quan trọng Một mơ tả tốt giúp người lập trình hình dung rõ ràng đắn việc phải làm Để mơ tả thuật tốn ta áp dụng cách sau: Dùng lưu đồ: Sử dụng hình vẽ mơ tả tiến trình hoạt động thuật tốn Cách mơ tả có tính trực quan thích hợp với thuật tốn đơn giản Dùng ngôn ngữ tự nhiên: Liệt kê lời trình tự bước cần thực Thơng thường cách mơ tả giúp hình dung thuật tốn mức bao quát Dùng giả mã (hay tựa Ngôn ngữ lập trình): Sử dụng từ khóa cấu trúc điều khiển ngơn ngữ lập trình (Pascal C chẳng hạn) để mô tả Trong cách mơ tả ta sử dụng từ khóa cấu trúc với ý nghĩa biết ngôn ngữ lập trình tương ứng khơng hồn tồn tn thủ cú pháp ngôn ngữ Cách mô tả cho phép diễn đạt hành động cách chi tiết, cụ thể Khi dùng giả mã, để mô tả gọn ta bỏ qua số thao tác khơng cần thiết, chẳng hạn dùng biến mà khơng cần khai báo Ví dụ để mơ tả thuật tốn tìm số lớn dãy số ta có mơ tả sau: - Mô tả 1: Đầu vào: dãy a1, a2, , an Đầu ra: x giá trị lớn dãy Thuật toán: Xét phần tử dãy kể từ đầu đến cuối dãy, với phần tử dãy xác định x giá trị lớn (tạm thời) phần tử xét thời điểm - Mơ tả 2: Đầu vào: dãy a[1], a[2], , a[n] Đầu ra: x giá trị lớn dãy Thuật toán: float max(float a[],int n) { int i; float max; // bỏ qua khai báo max=a[0]; for(i=1;i k Khi C>(3/2)n với n>k Nhưng ta biết (3/2)n tiến vô n vô Mâu thuẫn Khi sử dụng ký pháp O ta bỏ qua số bậc, điều ám ta quan tâm tới trường hợp mà kích thước đầu vào đủ lớn Giả sử ta có thuật tốn với hàm thời gian chạ y f1 f2 tương ứng, f1(n)=100n, f2(n)=2n Cả hai thuật toán giải trường hợp cụ thể 104 giây Giả sử nhờ cải thiện phần cứng ta tăng tốc độ máy lên 10 lần Khi với thuật tốn f2 ta giải tốn với kích thước đầu vào tăng 30% với thời gian cũ, với thuật toán f1 ta giải tốn với kích thước đầu vào tăng 1000% với thời gian cũ Thực tế máy tính ngày rẻ nhanh hơn, nhu cầu thực tế giải tốn với kích thước ngày lớn phức tạp tăng lên Vì việc tìm sử dụng thuật tốn có độ phức tạp tăng chậm ngày trở nên quan trọng Một số tính chất ký pháp O: Quy tắc cộng: Giả sử T1(n) T2(n) thời gian chạy thuật toán P1 P2, T1(n)=O(f(n)) T2(n)=O(g(n)) Khi thời gian chạy thuật tốn P1 P2 T1(n)+T2(n) = O(max( f(n),g(n))) Thật giả sử C1, k1, C2, k2 số cho với n>k1 ta có T1(n)k2 có T2(n)k0 ta có T1(n)