Thuật Tốn
(Algorithm)
Trịnh Tấn Đạt
Khoa CNTT - Đại Học Sài Gịn
Email:
Website: />
Nội dung
Vấn đề, bài toán
Thuật toán
o Khái niệm
o Các đặc trưng của thuật toán
o Phương pháp biểu diễn thuật toán : mã giả, lưu đồ khối.
Giải bài tốn trên máy tính
Vấn đề, bài tốn
Vấn đề (issue/problem):
o Những vướng mắc, khó khăn trong cuộc sống mà ta cần giải quyết
Bài toán (problem):
o Một loại vấn đề mà để giải quyết, cần đến tính tốn (phép tốn số, luận lí, quan
hệ).
o Khi giải bài toán, cần quan tâm 02 yếu tố: đầu vào (input) và đầu ra (output)
Giải quyết vấn đề, bài toán
Bất kỳ vấn đề, bài tốn ngồi đời nào cũng có thể được chia thành trình tự nhiều
cơng việc nhỏ hơn.
Trình tự các công việc nhỏ này được gọi là giải thuật giải quyết cơng việc ngồi
đời.
Mỗi cơng việc nhỏ hơn cũng có thể được chia nhỏ hơn nữa nếu nó cịn phức tạp,...
Ví dụ: ???
Vấn đề mấu chốt của việc dùng máy tính giải quyết cơng việc ngồi đời là lập
trình.
Thuật toán
Thuật toán (Algorithm):
Là cách biểu diễn lời giải "bài tốn“ rõ ràng (khơng mập mờ), chi tiết để có thể
thực thi được trên máy tính.
Là một dãy hữu hạn các bước nhằm xác định các thao tác mà máy tính có thể thực
hiện được sao cho sau khoảng thời gian hữu hạn (có tính dừng) thì cho ra kết
quả.
Ví dụ: Bài tốn giải phương trình bậc 1 (1 ẩn ; ax + b = 0).
Ví dụ:
Thuật tốn giải PT bậc nhất: ax + b = 0
(a, b là các số thực).
Đầu vào: a, b thuộc R
Đầu ra: nghiệm phương trình ax + b = 0
• Nếu a = 0
• b = 0 thì phương trình có nghiệm bất kì.
• b ≠ 0 thì phương trình vơ nghiệm.
• Nếu a ≠ 0
• Phương trình có nghiệm duy nhất x = -b/a
Các đặc trưng của thuật tốn
Tính hữu hạn: có hữu hạn bước và phải dừng.
Tính xác định: các bước rõ ràng, thực thi được.
Tính đúng: q trình thực thi theo các bước đã chỉ ra phải đi đến kết quả như ý.
Tính hiệu quả: khối lượng, khơng gian, thời gian tính tốn khơng q “lớn”.
Tính tổng quát: áp dụng được cho mọi trường hợp của bài toán.
Ví dụ
– Một lớp học cần chọn lớp trưởng theo các bước:
1. Lập danh sách sinh viên
2. Sắp thứ tự
3. Chọn người đứng đầu làm lớp trưởng
– Danh sách cần gì?
– Sắp theo thứ tự nào? (tăng giảm, tiêu chí nào)
– Nếu trùng tiêu chí thì giải quyết ra sao?
Ví dụ
Sửa lại:
a) Lập danh sách theo: họ tên, ngày tháng năm sinh, điểm các mơn, điểm trung bình
cuối năm.
b) Sắp xếp theo ĐTB giảm. Nếu ĐTB bằng nhau cùng hạng.
c) Nếu có 01 HS đứng đầu chọn, ngược lại chọn người có điểm tốn cao nhất, nếu
khơng chọn được bốc thăm.
Phân biệt mập mờ và lựa chọn có quyết định:
– Mập mờ là thiếu thơng tin hoặc có nhiều lựa chọn nhưng khơng đủ điều kiện quyết
định, ví dụ: bước 1, 2.
– Lựa chọn có quyết định là hoàn toàn xác định duy nhất trong điều kiện cụ thể của
vấn đề, ví dụ bước c.
Ví dụ
Tính thực thi được, ví dụ:
– Tính 10 ?
– Chạy xe thẳng từ ĐHSG đến sân bay TSN?
Tính dừng, ví dụ:
– B1 nhập n;
– B2 s=0;
– B3 i=1;
– B4 nếu i=n+1 sang B8, ngược lại sang B5
– B5 cộng i vào s
– B6 cộng 2 vào i
– B7 quay lại B4
– B8 Tổng cần tính là s
Phương pháp biểu diễn thuật toán
Thuật toán thường được biểu diễn bằng các ngôn ngữ sau:
o Dùng ngôn ngữ tự nhiên (NNTN - natural language)
o Dùng mã giả (pseudocode): ngơn ngữ tự nhiên (NNTN) + ngơn ngữ
lập trình (NNLT)
o Dùng lưu đồ - sơ đồ khối (flowchart)
Biểu diễn bằng ngôn ngữ tự nhiên
Dùng ngôn ngữ thường ngày để liệt kê các bước của thuật toán.
Khơng thể hiện rõ cấu trúc của thuật tốn.
Dài dịng, có thể gây hiểu lầm hoặc khó hiểu
KHƠNG u cầu người viết hay đọc nắm quy tắc.
o
Khơng có một quy tắc cố định
Tính dễ đọc:
o
Viết các bước con lùi vào bên phải
o
Đánh số bước theo quy tắc phân cấp như 1, 1.1, ...
Biểu diễn bằng mã giả
Vay mượn các cú pháp của một ngơn ngữ lập trình
o dùng một phần ngơn ngữ tự nhiên
o bị phụ thuộc vào ngôn ngữ lập trình.
Mọi ngơn ngữ lập trình đều có những thao tác cơ bản
o xử lý, rẽ nhánh và lặp
o tận dụng được các khái niệm trong ngơn ngữ lập trình
Dễ dàng nắm bắt nội dung thuật toán
Biểu diễn bằng mã giả - Ví dụ
Một đoạn mã giả của thuật toán giải pt bậc hai
if Delta > 0 then
x1=(-b-sqrt(delta))/(2*a)
x2=(-b+sqrt(delta))/(2*a)
xuất kết quả : phương trình có hai nghiệm là x1 và x2
end
else
if delta = 0 then
xuất kết quả : phương trình có nghiệm kép là -b/(2*a)
else {trường hợp delta < 0 }
xuất kết quả : phương trình vơ nghiệm
Biểu diễn bằng lưu đồ
Các nhà lập trình đưa ra dạng
lưu đồ để minh họa từng bước
quá trình xử lý một vấn đề (bài
toán).
Biểu diễn bằng lưu đồ
Công cụ trực quan diễn đạt thuật tốn.
o Biểu diễn bằng mơ hình – hình vẽ
Theo dõi được:
o Sự phân cấp các trường hợp
o Q trình xử lý của thuật tốn
Phân biệt hai loại thao tác:
o Chọn lựa theo một điều kiện nào đó
o Xử lý, hành động
Biểu diễn bằng lưu đồ
Chọn lựa theo một điều kiện nào đó:
o Biểu diễn bằng một hình thoi, bên trong chứa biểu thức điều kiện.
Ví dụ: thao tác "nếu a = b thì thực hiện thao tác B2, ngược lại thực hiện
B4" là thao tác chọn lựa
Biểu diễn bằng lưu đồ
Thao tác chọn lựa: có thể có hai hướng đi
o một hướng ứng với điều kiện thỏa
o một hướng ứng với điều kiện không thỏa.
o 2 nhánh có nhãn
• Đ/Đúng,Y/Yes
• S/Sai,N /N o
Biểu diễn bằng lưu đồ
Xử lý, hành động:
o Biểu diễn bằng một hình chữ nhật, bên trong chứa nội dung xử lý.
Ví dụ: "Chọn một mơn học và in ra." là một thao tác thuộc loại hành
động.
Biểu diễn bằng lưu đồ
Quá trình thực hiện các thao tác:
o Đường đi – route
o Biểu diễn bằng cung có hướng
• nối giữa 2 thao tác: thực hiện lần lượt
Biểu diễn bằng lưu đồ
Ðiểm cuối (terminator)
o Biểu diễn bằng hình ovan
o Điểm khởi đầu
• chỉ có cung đi ra
• bên trong ovan ghi chữ: bắt đầu/start/begin
o Điểm kết thúc
• Chỉ có cung đi vào
• bên trong ovan ghi chữ: kết thúc/end
Mỗi lưu đồ chỉ có 1 điểm bắt đầu và 1 điểm kết thúc.
Biểu diễn bằng lưu đồ
Điểm nối (connector)
o Nối các phần khác nhau của một lưu đồ
o Nối sang trang
o Sử dụng với lưu đồ phức tạp
• Giảm độ rắc rối
• Đặt ký hiệu liên hệ giữa các điểm nối
Ví dụ: Sử dụng ngơn ngữ tự nhiên
Đầu vào: a, b thuộc R
Đầu ra: nghiệm phương trình ax + b = 0
1. Nhập 2 số thực a và b.
2. Nếu a = 0 thì
2.1. Nếu b = 0 thì
2.1.1. Phương trình vơ số nghiệm
2.1.2. Kết thúc thuật tốn.
2.2. Ngược lại
2.2.1. Phương trình vơ nghiệm.
2.2.2. Kết thúc thuật tốn.
3. Ngược lại
3.1. Phương trình có nghiệm.
3.2. Giá trị của nghiệm đó là x = -b/a
3.3. Kết thúc thuật toán.
Ví dụ: Sử dụng mã giả
Đầu vào: a, b thuộc R
Đầu ra: nghiệm phương trình ax + b = 0
If a = 0 Then
If b = 0 Then
Xuất “Phương trình vơ số nghiệm”
Else
Xuất “Phương trình vơ nghiệm”
End
Else
Xuất “Phương trình có nghiệm x = -b/a”
Ví dụ: Sử dụng sơ đồ khối
Bắt đầu
Đọc a,b
Đ
S
a=0
Đ
S
Tính
x = -b/a
b=0
Xuất
“VSN”
Xuất
“VN”
Kết thúc
Xuất x