Chương 2 cung cấp cho người học những kiến thức cơ bản liên quan đến thuật toán trong lập trình. Những nội dung chính được trình bày trong chương này gồm có: Khái niệm thuật toán, các tính chất của thuật toán, phát triển thuật toán, mô tả thuật toán, các dạng thuật toán cơ bản. Mời các bạn cùng tham khảo.
Trang 1v 1.0 - 10/2012
Thuật toán
Trang 2Lê Viết Mẫn - lvman@hce.edu.vn Thuật toán
Trang 3Giải bài toán trên máy tính
1 Xác định bài toán
2 Thiết kế thuật toán
3 Phân tích thuật toán
4 Cài đặt thuật toán
5 Kiểm tra / Bắt lỗi
6 [ Sửa lỗi ]
Trang 4Lê Viết Mẫn - lvman@hce.edu.vn Thuật toán
Nội dung
1 Thuật toán
1.1 Khái niệm
1.2 Các tính chất
1.3 Phát triển thuật toán
2 Mô tả thuật toán
3 Các dạng thuật toán cơ bản
4 Ví dụ
4
Trang 5Thuật toán
Trang 6Lê Viết Mẫn - lvman@hce.edu.vn Thuật toán
Thuật toán
• Một tập các chỉ thị / lệnh đơn giản được xác định rõ ràng để giải
quyết một bài toán nào đó
• Nhận một tập các giá trị ở đầu vào (input )
• Tính toán và trả ra một hoặc một tập các giá trị ở đầu ra (output )
gì ? Những yếu tố trong bài toán có quan hệ với nhau thế
nào ? ”
• Gồm các kiến thức chuyên môn mà bạn phải biết để có thể giải bài toán
• Để giải bài toán tính diện tích hình cầu, bạn phải biết công thức tính diện
tích hình cầu
6
Trang 7• Cấu trúc dữ liệu - Phương pháp tổ chức dữ liệu
Trang 8Lê Viết Mẫn - lvman@hce.edu.vn Thuật toán
Ví dụ - giải p.t bậc nhất
8
ax + b = 0
Trang 9Ví dụ - giải p.t bậc nhất
Nếu a ≠ 0: x = -b/a
Ngược lại, a = 0:
Nếu b = 0: pt có vô số nghiệm
Nếu b ≠ 0: pt vô nghiệm
ax + b = 0
Trang 10Lê Viết Mẫn - lvman@hce.edu.vn Thuật toán
Ví dụ - tìm số lớn nhất
10
Cho ba số a, b, c Tìm số lớn nhất trong ba số đó
Trang 11Ví dụ - tìm số lớn nhất
Bước 1 : Cho Max = a
Bước 2 : So sánh b với Max Nếu b > Max thì cho Max = b
Bước 3 : So sánh c với Max Nếu c > Max thì cho Max = c
Bước 4 : Trả ra Max là giá trị lớn nhất
Bước 5 : Dừng
Cho ba số a, b, c Tìm số lớn nhất trong ba số đó
Trang 12Lê Viết Mẫn - lvman@hce.edu.vn Thuật toán
Các câu hỏi về thuật toán
• Thuật toán đã giải quyết được bài toán được phát biểu ?
• Thuật toán đã được định nghĩa tốt ?
• Thuật toán đưa ra được một kết quả ?
• Thuật toán kết thúc sau thời gian tính toán hợp lý ?
12
Trang 13Tính chất
Tính kết thúc (tính dừng)
• quá trình thực hiện thuật toán phải kết thúc sau khi thực hiện
một số hữu hạn các bước công việc
Bước 1 : Cho s = 0, i = 1
Bước 2 : Cộng thêm i vào s ( s = s + i )
Bước 3 : Tăng i thêm 1 ( i = i + 1 )
Bước 4 : Quay lại bước 2
Bước 5 : Nhận s là kết quả giải bài toán
Thuật toán tính tổng các số tự nhiên
Trang 14Lê Viết Mẫn - lvman@hce.edu.vn Thuật toán
Tính chất
Tính xác định
• nếu trong những điều kiện như nhau thì kết quả thực hiện
không phụ thuộc vào đối tượng thực hiện thuật toán
• thuật toán phải rõ ràng, không nhập nhằng, không thể hiểu theo nhiều nghĩa
14
Thuật toán tìm giá trị lớn nhấtBước 1 : Cho Max = a
Bước 2 : So sánh b với Max Nếu b > Max thì cho Max = b
Bước 3 : So sánh c với Max Nếu c > Max thì cho Max = c
Bước 4 : Trả ra Max là giá trị lớn nhất
Bước 5 : Dừng
Trang 15Tính chất
Tính tổng quát
• nếu thuật toán được dùng để giải cả một lớp bài toán cùng loại
Thuật toán tìm giá trị lớn nhấtBước 1 : Cho Max = a
Bước 2 : So sánh b với Max Nếu b > Max thì cho Max = b
Bước 3 : So sánh c với Max Nếu c > Max thì cho Max = c
Bước 4 : Trả ra Max là giá trị lớn nhất
Trang 16Lê Viết Mẫn - lvman@hce.edu.vn Thuật toán
Tính chất
Tính xác định đầu vào - đầu ra
• nếu xác định rõ các dữ liệu đầu vào và các dữ liệu đầu ra
• đầu vào, đầu ra được xác định càng chính xác thì quá trình xây dựng thuật
toán càng thuận lợi và thuật toán càng có chất lượng cao hơn
16
Thuật toán tìm giá trị lớn nhấtBước 1 : Cho Max = a
Bước 2 : So sánh b với Max Nếu b > Max thì cho Max = b
Bước 3 : So sánh c với Max Nếu c > Max thì cho Max = c
Bước 4 : Trả ra Max là giá trị lớn nhất
Bước 5 : Dừng
Trang 17Bước 2 : So sánh b với Max Nếu b > Max thì cho Max = b
Bước 3 : So sánh c với Max Nếu c > Max thì cho Max = c
Bước 4 : Trả ra Max là giá trị lớn nhất
Trang 18Lê Viết Mẫn - lvman@hce.edu.vn Thuật toán
Phát triển thuật toán
• Xác định đầu vào (Input)
Trang 19Xác định đầu vào
• Chúng ta cần dữ liệu gì ?
• Chúng ta lấy dữ liệu đó như thế nào ?
• Dữ liệu tồn tại ở dạng nào ?
Trang 20Lê Viết Mẫn - lvman@hce.edu.vn Thuật toán
Trang 21Xác định các bước xử lý
• Cách xử lý dữ liệu để đạt được kết quả có ý nghĩa ?
• Áp dụng công thức gì ?
Trang 22Lê Viết Mẫn - lvman@hce.edu.vn Thuật toán
Vẽ biểu đồ HIPO
22
Hierarchy of Inputs Processes & Outputs
Bài toán
C.t con C.t con C.t con C.t con C.t con C.t con
Trang 23Xác định các c.t con
• Cách nào để chia các vấn đề lớn thành các vấn đề nhỏ hơn, dễ
quản lý hơn ?
• Các chương trình con cần những đầu vào nào ?
• Các xử lý nào là cần thiết cho mỗi chương trình con ?
• Đầu ra nào là được chờ đợi tại mỗi chương trình con ?
Trang 24Lê Viết Mẫn - lvman@hce.edu.vn Thuật toán
Mô tả thuật toán
24
Trang 25Nếu a ≠ 0: x = -b/a
Ngược lại, a = 0:
Nếu b = 0: pt có vô số nghiệm
Nếu b ≠ 0: pt vô nghiệm
Trang 26Lê Viết Mẫn - lvman@hce.edu.vn
If a ≠ 0 then x = -b/a
else a = 0:
If b = 0 then pt có vô số nghiệm
If b ≠ 0 then pt vô nghiệm
• Phụ thuộc vào ngôn ngữ lập trình
ax + b = 0
Trang 27Lưu đồ
• Còn được gọi là sơ đồ khối
• Sử dụng các khối hình để thể hiện một bước công việc / thao
tác nào đó
• Thứ tự thực hiện các công việc được chỉ định bằng các cạnh có
và dễ thấy được tổng thể của thuật toán
Trang 28Lê Viết Mẫn - lvman@hce.edu.vn Thuật toán
Ví dụ - lưu đồ p.t bậc nhất
28
Trang 29Ngôn ngữ lưu đồ
Thực hiện công việc A Vào / ra dữ liệu
Một phép kiểm tra B, tùy thuộc vào trạng thái của B là đúng hay Bắt đầu hay kết thúc một thuật toán
Trang 30Lê Viết Mẫn - lvman@hce.edu.vn Thuật toán
Các dạng thuật toán
cơ bản
30
Trang 31Thuật toán tuần tự
statement 1 ;
entry
statement 2 statement 3
Trang 32Lê Viết Mẫn - lvman@hce.edu.vn Thuật toán
Ví dụ 1
32
Tính tiền lương công nhân nếu biết lương căn bản và số ngày công
Trang 33Ví dụ 1
Đầu vào : lương căn bản, số ngày công
Đầu ra : tiền lương công nhân
Xử lý : tính theo công thức Lương = Lương căn bản * Ngày công
Tính tiền lương công nhân nếu biết lương căn bản và số ngày công
Trang 34Lê Viết Mẫn - lvman@hce.edu.vn Thuật toán
Trang 35Thuật toán lựa chọn
statement expression true
exit
Trang 36Lê Viết Mẫn - lvman@hce.edu.vn Thuật toán
Ví dụ 2
36
Bước 1 : Cho Max = a
Bước 2 : So sánh b với Max Nếu b > Max thì cho Max = b
Bước 3 : So sánh c với Max Nếu c > Max thì cho Max = c
Bước 4 : Trả ra Max là giá trị lớn nhất
Bước 5 : Dừng
Cho ba số a, b, c Tìm số lớn nhất trong ba số đó
Trang 37Nhập a, b, c Begin
Trang 38Lê Viết Mẫn - lvman@hce.edu.vn Thuật toán
Ví dụ 3
38
Nhập vào số nguyên n Kiểm tra nếu n > 0 thì tăng n lên 1 đơn vị
Xuất kết quả ra màn hình
Đầu vào : số nguyên n
Đầu ra : giá trị của n
Xử lý : kiểm tra n > 0, nếu đúng tăng n lên 1
Trang 39Ví dụ 3
Nhập vào số nguyên n Kiểm tra nếu n > 0 thì tăng n lên 1 đơn vị
Xuất kết quả ra màn hình
Nhập n Begin
n > 0
n = n + 1
In n true
false
Trang 40Lê Viết Mẫn - lvman@hce.edu.vn Thuật toán
Ví dụ 4
40
Nhập vào số nguyên n Kiểm tra nếu n chẵn xuất ra màn hình câu
“n chẵn”, ngược lại xuất “n lẻ”
Đầu vào : số nguyên n
Đầu ra : giá trị của n
Xử lý : kiểm tra n chẵn hoặc lẻ thì xuất ra dòng tương ứng
Trang 41Ví dụ 4
Nhập vào số nguyên n Kiểm tra nếu n chẵn xuất ra màn hình câu
“n chẵn”, ngược lại xuất “n lẻ”
Nhập n Begin
n % 2 = 0
In “n chẵn”
In “n lẻ”
Trang 42Lê Viết Mẫn - lvman@hce.edu.vn Thuật toán
Trang 43Ví dụ 5
Nhập vào điểm thi ( ∈ [0 10]) Nếu nhập sai thì yêu cầu nhập lại
Đầu vào : số nguyên n ∈ [0 10]
Đầu ra :
Xử lý : nếu n ∉ [0 10] thì yêu cầu nhập lại
Trang 44Lê Viết Mẫn - lvman@hce.edu.vn Thuật toán
Ví dụ 5
44
Nhập vào điểm thi ( ∈ [0 10]) Nếu nhập sai thì yêu cầu nhập lại
Nhập n Begin
n ∉ [0 10]
End true
false
Trang 46Lê Viết Mẫn - lvman@hce.edu.vn 46 Thuật toán
Nhập n Begin
Trang 47Cảm ơn sự chú ý
Câu hỏi ?