THUẬT TOÁN VÀ PHÂN TÍCH THUẬT TOÁN

4 337 0
THUẬT TOÁN VÀ PHÂN TÍCH THUẬT TOÁN

Đang tải... (xem toàn văn)

Thông tin tài liệu

Việc xác định bài toán tức là phải xác định xem ta phải giải quyết vấn đề gì?,

Chương 1: THUẬT TOÁN PHÂN TÍCH THUẬT TOÁN 1. Giải bài toán trên máy tính Xác định bài toán Việc xác định bài toán tức là phải xác định xem ta phải giải quyết vấn đề gì?, với giả thiết nào đã cho lời giải cần phải đạt những yêu cầu nào. Input → Process → Output (Dữ liệu vào → Xử lý → Kết quả ra) Đối với những bài toán tin học ứng dụng trong thực tế, lời giải cần tìm chỉ cần tốt tới mức nào đó, thậm chí là tồi ở mức chấp nhận được. Bởi lời giải tốt nhất đòi hỏi quá nhiều thời gian chi phí. Ví dụ: Khi cài đặt các hàm số phức tạp trên máy tính. Nếu tính bằng cách khai triển chuỗi vô hạn thì độ chính xác cao hơn nhưng thời gian chậm hơn hàng tỉ lần so với phương pháp xấp xỉ. Trên thực tế việc tính toán luôn luôn cho phép chấp nhận một sai số nào đó nên các hàm số trong máy tính đều được tính bằng phương pháp xấp xỉ của giải tích số Xác định đúng yêu cầu bài toán là rất quan trọng bởi nó ảnh hưởng tới cách thức giải quyết chất lượng của lời giải. Một bài toán thực tế thường cho bởi những thông tin khá mơ hồ hình thức, ta phải phát biểu lại một cách chính xác chặt chẽ để hiểu đúng bài toán. Ví dụ: • Bài toán: Một dự án có n người tham gia thảo luận, họ muốn chia thành các nhóm mỗi nhóm thảo luận riêng về một phần của dự án. Nhóm có bao nhiêu người thì được trình lên bấy nhiêu ý kiến. Nếu lấy ở mỗi nhóm một ý kiến đem ghép lại thì được một bộ ý kiến triển khai dự án. Hãy tìm cách chia để số bộ ý kiến cuối cùng thu được là lớn nhất. • Phát biểu lại: Cho một số nguyên dương n, tìm các phân tích n thành tổng các số nguyên dương sao cho tích của các số đó là lớn nhất. Trên thực tế, ta nên xét một vài trường hợp cụ thể để thông qua đó hiểu được bài toán rõ hơn thấy được các thao tác cần phải tiến hành. Đối với những bài toán đơn giản, đôi khi chỉ cần qua ví dụ là ta đã có thể đưa về một bài toán quen thuộc để giải. Lựa chọn hoặc thiết kế thuật toán a. Lựa chọn thuật toán Chúng ta biết rằng mỗi thuật toán chỉ giải một bài toán, một bài toán có nhiều thuật toán để giải. Vì vậy cần phải chọn một giải thuật phù hợp để giải bài toán đã đặt ra sao cho đạt hiệu quả nhất. Việc chọn một thuật toán để giải bài toàn ta thường quan tâm đến các yếu tố sau: yếu tố không gian để biểu diễn bài toán, lưu trữ các kết quá tính toán trung gian, kết quả của bài toán, yếu tố về mặt thời gian chạy của chương trình yếu tố thuật tiện cho việc cài đặt thuật toán. Ngoài ra, ta còn phải căn cứ vào lượng tài nguyên mà thuật toán đòi hỏi lượng tài nguyên thực tế cho phép của hệ thống. b) Diễn tả thuật toán Việc diễn tả một thuật toán có thể bằng cách liệt kê, sơ đồ khối hoặc bằng một ngôn ngữ điều khiển Vi dụ. Thuật chia Ơ-clit Sẽ tồn tại duy nhất hai số nguyên q r sao cho a = q.b + r với 0 ≤ r < b, trong đó q được gọi là thương của phép chia a cho b r được gọi là phần dư. Cho trước a b, ta cần tìm q r. Ta có: C Input: Hai số nguyên dương a b; C Output: Đưa ra thương số q số dư r. ♠ Ý tưởng: Nếu a < b thì q = 0 r = a. Còn nếu a > b thì a giảm đi một giá trị bằng b q tăng lên 1. Quay trở lại lặp cho đến khi a < b thì kết thúc. Bước 3: Viết chương trình Việc viết chương trình là một tổng hợp hữu cơ giữa việc lựa chọn cấu trúc dữ liệu ngôn ngữ lập trình để diễn đạt đúng thuật toán. Bên cạnh là thuật chia Ơ-clit viết bằng ngôn ngữ Pascal. Bước 4: Hiệu chỉnh Sau khi được viết xong, chương trình vẫn còn có thể có nhiều lỗi khác nhau chưa phát hiện được.Vì vậy, cần phải thử chương trình bằng cách thực hiện nó với một số bộ Input tiêu biểu phụ thuộc vào đặc thù của bài toán. Các bộ Input này được gọi là các test. Bước 5: Viết tài liệu Tài liệu phải mô tả chi tiết bài toán, thiết kế thuật toán, chương trình, kết quả thử nghiệm hướng dẫn sử dụng. Các bước trên có thể lặp đi lặp lại nhiều lần cho đến khi mà ta cho là chương trình đó làm việc đúng đắn. 2. Mô hình dữ liệu (Data Model) Mô hình dữ liệu là các trừu tượng dùng để mô tả bài toán: Mô hình toán học, ví dụ đồ thị, tập hợp, danh sách, cây . Một mô hình dữ liệu thường có hai khía cạnh: - Giá trị mà đối tượng có thể nhận được, ví dụ đối tượng nhận giá trị nguyên, thực,… Đó là khía cạnh tĩnh (static) của mô hình dữ liệu, nó cho biết những giá trị mà một đối tượng có thể nhận được. Thành phần tĩnh này gọi là kiểu dữ liệu (type data). - Các phép toán ( operation) trên mô hình đó, ví dụ: các phép cộng trừ số nguyên, số thực chẳng hạn. Đây là khía cạnh động ( dynamic) của mô hình, cho biết cách thức thay đổi giá trị để thu được giá trị mới. Mô hình dữ liệu của các ngôn ngữ lập trình Mỗi chương trình có quyền truy/xuất đến các “ hộp” có thể xem như những vùng lưu trữ. Một hộp có một kiểu (type), chẳng hạn như Int hoặc Char. Thường ta gọi những giá trị được lưu trong hộp là các đối tượng dữ liệu (data object). Ta hoàn toàn có thể đặt tên cho các hộp này. 3. Kiểu dữ liệu có cấu trúc Trong thực tế chỉ với các kiểu dữ liệu cơ sở không đủ biểu diễn các bài, dẫn đến nhu cầu phải xây dựng các kiểu dữ liệu mới dựa trên việc tổ chức, liên kết các thành phần dữ liệu có kiểu dữ liệu đã được định nghĩa. Những kiểu dữ liệu được xây dựng như thế gọi là kiểu dữ liệu có cấu trúc (hay còn gọi là cấu trúc dữ liệu). Đa số các ngôn ngữ lập trình đều cài đặt sẵn một số kiểu có cấu trúc cơ bản như mảng, chuỗi, tập tin, bản ghi .và cung cấp cơ chế cho lập trình viên tự định nghĩa kiểu dữ liệu mới. Giả sử đã có cấu trúc phù hợp để lưu trữ một sinh viên, nhưng thực tế lại cần quản lý nhiều sinh viên, lúc đó nảy sinh nhu cầu xây dựng kiểu dữ liệu mới .Mục tiêu của việc nghiên cứu cấu trúc dữ liệu chính là tìm những phương cách thích hợp để tổ chức, liên kết dữ liệu, hình thành các kiểu dữ liệu có cấu trúc từ những kiểu dữ liệu đã được định nghĩa. 4. Khái niệm thuật toán 4.1. Khái niệm thuật toán Thuật toán để giải một bài toán là một dãy hữu hạn các thao tác được sắp xếp theo một trình tự xác định sao cho sau khi thực hiện dãy thao tác đó, từ Input của bài toán này ta nhận được Output cần tìm. Ví dụ: Cần tìm giá trị lớn nhất của dãy số a1, a2, …,an, Ta xác định bài toán gồm: - Input : Số nguyên dương N dãy số a1, a2, , ., aN. - Output : Tìm Max là giá trị lớn nhất của dãy đã cho. Ý t ưởng thuật toán: Giả thiết Max=a1.Bắt đầu từ số hạng thứ 2 đến số hạng thứ N, lần lượt đối sánh ai với Max. Với mỗi i, nếu ai > Max thì thay giá trị Max hiện thời bằng ai. 4.2. Mô tả thuật toán a) Cách liệt kê Cách này sử dụng ngôn ngữ tự nhiên, kết hợp với ngôn ngữ toán học thông thường để liệt kê các bước các thao tác của thuật toán. Trong mỗi bước xác định các thao tác cần thực hiện thứ tự thực hiện các bước tiếp theo. Ví dụ, với bài toán đã xác định ở trên, ta có thể mô tả thuật toán giải bằng cách liệt kê như sau: Bước 1. Nhập N dãy a1, ., aN Bước 2. Đặt Max = a1, i = 2. Bước 3. Nếu i > N thì chuyển đến bước 5. Bước 4. 4.1. N ếu ai > Max thì đ ặt Max = ai. 4.2. Đ ặt i=i+1 ( T ăng i lên 1) rồi quay lại bước 3. Bước 5. Đưa ra Max rồi kết thúc. b) Sơ đồ khối - Để có thể mô tả thuật toán một cách trực quan, người ta dùng một số hình vẽ kết hợp chú thích bằng lời. Thường hay dùng các hình vẽ chủ yếu sau:

Ngày đăng: 25/04/2013, 12:01

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan