Tải bản đầy đủ (.pdf) (40 trang)

Bài giảng cơ sở lập trình thuật toán (algorithm)

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 (663.56 KB, 40 trang )

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


×