Tải bản đầy đủ (.doc) (4 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (128.58 KB, 4 trang )

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


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.
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.
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:

×