1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

4 337 0
Tài liệu đã được kiểm tra trùng lặp

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 4
Dung lượng 9,28 MB

Nội dung

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ì?,

Trang 1

Chương 1: THUẬT TOÁN VÀ 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 và 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 và 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 và 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ồ và hình thức, ta phải phát biểu lại một cách chính xác

và 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 và 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 và thấy được các thao tác cần phải tiến hành Đối với những bài

Trang 2

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 và 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 và 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 và 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 và r được gọi là phần dư

Cho trước a và b, ta cần tìm q và r Ta có:

C Input: Hai số nguyên dương a và b;

C Output: Đưa ra thương số q và số dư r.

Ý tưởng: Nếu a < b thì q = 0 và r = a Còn nếu a > b thì a giảm đi một giá

trị bằng b và 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 và 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

Trang 3

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 và 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

Trang 4

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 và 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 và 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 và 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 và 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ÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w