• Các bước của thuật toán phải được xác định thứ tự, tức là xác định rõ bước nào thực hiện trước, bước nào thực hiện sau.. • Mặc dù vậy, không nhất thiết yêu cầu phải thực hiện các dãy b[r]
(1)TIN HỌC CƠ SỞ
Bài - Thuật tốn
Bộ mơn Tin học ( c BMTH 2019)
Khoa Toán - Cơ - Tin học
(2)Nội dung
1 Khái niệm thuật toán Khái niệm thuật toán
Các đặc trưng thuật toán Bản chất trừu tượng thuật toán Phát thuật tốn
3 Tính hiệu tính thuật tốn Biểu diễn thuật tốn
(3)Nội dung
1 Khái niệm thuật toán Khái niệm thuật toán
Các đặc trưng thuật toán Bản chất trừu tượng thuật toán Phát thuật tốn
3 Tính hiệu tính thuật tốn Biểu diễn thuật toán
(4)Nội dung
1 Khái niệm thuật toán Khái niệm thuật toán
Các đặc trưng thuật toán Bản chất trừu tượng thuật tốn Phát thuật tốn
3 Tính hiệu tính thuật tốn Biểu diễn thuật toán
(5)Nội dung
1 Khái niệm thuật toán Khái niệm thuật toán
Các đặc trưng thuật toán Bản chất trừu tượng thuật tốn Phát thuật tốn
3 Tính hiệu tính thuật tốn Biểu diễn thuật toán
(6)Khái niệm thuật toán
Nội dung
1 Khái niệm thuật toán Khái niệm thuật toán
Các đặc trưng thuật toán Bản chất trừu tượng thuật toán Phát thuật tốn
3 Tính hiệu tính thuật toán Biểu diễn thuật toán
(7)Khái niệm thuật toán Khái niệm thuật toán
Khái niệm thuật toán (Algorithm)
Định nghĩa
Thuật tốn (thuật giải) tập có thứ tự bước (cơng việc) có thể thực được, khơng nhập nhằng, xác định q trình có kết thúc.
Ví dụ:
(8)Khái niệm thuật toán Các đặc trưng thuật toán
Các đặc trưng thuật tốn
• Các bước thuật toán phải xác định thứ tự, tức xác định rõ bước thực trước, bước thực sau
• Mặc dù vậy, khơng thiết yêu cầu phải thực dãy bước bước 1, bước 2, (ví dụ, thuật tốn song song)
• Các bước thuật tốn phải thực được, cịn gọi hiệu quả. • Ví dụ, thuật tốn khơng thể chứa bước có dạng “Tạo dãy
gồm tất số nguyên dương”, dãy số nguyên dương vơ hạn, bước khơng thực
• Các bước thuật tốn phải khơng nhập nhằng.
• Thơng tin trạng thái q trình thực thuật tốn phải
xác định hồn tồn hành động bước thuật toán
(9)Khái niệm thuật toán Các đặc trưng thuật toán
Các đặc trưng thuật tốn
• Các bước thuật tốn phải xác định thứ tự, tức xác định rõ bước thực trước, bước thực sau
• Mặc dù vậy, khơng thiết u cầu phải thực dãy bước bước 1, bước 2, (ví dụ, thuật tốn song song)
• Các bước thuật tốn phải thực được, cịn gọi hiệu quả. • Ví dụ, thuật tốn khơng thể chứa bước có dạng “Tạo dãy
gồm tất số ngun dương”, dãy số ngun dương vơ hạn, bước khơng thực
• Các bước thuật tốn phải khơng nhập nhằng.
• Thơng tin trạng thái trình thực thuật tốn phải
xác định hồn tồn hành động bước thuật toán
(10)Khái niệm thuật toán Các đặc trưng thuật toán
Các đặc trưng thuật tốn
• Các bước thuật tốn phải xác định thứ tự, tức xác định rõ bước thực trước, bước thực sau
• Mặc dù vậy, khơng thiết u cầu phải thực dãy bước bước 1, bước 2, (ví dụ, thuật tốn song song)
• Các bước thuật tốn phải thực được, cịn gọi hiệu quả. • Ví dụ, thuật tốn khơng thể chứa bước có dạng “Tạo dãy
gồm tất số nguyên dương”, dãy số ngun dương vơ hạn, bước khơng thực
• Các bước thuật tốn phải khơng nhập nhằng.
• Thơng tin trạng thái q trình thực thuật tốn phải xác định hoàn toàn hành động bước thuật toán
(11)Khái niệm thuật toán Các đặc trưng thuật tốn
Các đặc trưng thuật tốn
• Các bước thuật toán phải xác định thứ tự, tức xác định rõ bước thực trước, bước thực sau
• Mặc dù vậy, không thiết yêu cầu phải thực dãy bước bước 1, bước 2, (ví dụ, thuật tốn song song)
• Các bước thuật tốn phải thực được, cịn gọi hiệu quả. • Ví dụ, thuật tốn khơng thể chứa bước có dạng “Tạo dãy
gồm tất số nguyên dương”, dãy số nguyên dương vô hạn, bước không thực
• Các bước thuật tốn phải khơng nhập nhằng.
• Thơng tin trạng thái q trình thực thuật tốn phải xác định hoàn toàn hành động bước thuật toán
(12)Khái niệm thuật toán Bản chất trừu tượng thuật toán
Thuật toán Biểu diễn thuật toán
Cần nhấn mạnh khác thuật toán biểu diễn Tương tự cốt truyện sách
• Cốt truyện : trừu tượng, mang tính khái niệm;
• Cuốn sách : biểu diễn vật lí cốt truyện Khi truyện dịch sang thứ tiếng khác, xuất dạng khác phần biểu diễn thay đổi, cốt truyện khơng đổi
Thuật tốn biểu diễn nhiều dạng khác Ví dụ, thuật toán chuyển từ nhiệt độ C sang nhiệt độ F :
• Biểu diễn cơng thức đại số : F =
5C + 32 ;
(13)Khái niệm thuật toán Bản chất trừu tượng thuật toán
Thuật toán Biểu diễn thuật toán
Cần nhấn mạnh khác thuật toán biểu diễn Tương tự cốt truyện sách
• Cốt truyện : trừu tượng, mang tính khái niệm;
• Cuốn sách : biểu diễn vật lí cốt truyện Khi truyện dịch sang thứ tiếng khác, xuất dạng khác phần biểu diễn thay đổi, cốt truyện khơng đổi
Thuật tốn biểu diễn nhiều dạng khác Ví dụ, thuật tốn chuyển từ nhiệt độ C sang nhiệt độ F :
• Biểu diễn cơng thức đại số : F =
5C + 32 ;
(14)Khái niệm thuật toán Bản chất trừu tượng thuật toán
Thuật toán Biểu diễn thuật tốn Cần phân biệt khái niệm chương trình q trình
• Mỗi chương trình (program) biểu diễn thuật tốn dùng cho máy tính
(15)Khái niệm thuật toán Bản chất trừu tượng thuật toán
Câu hỏi/Bài tập
1 Giải thích bước mơ tả khơng tạo thành thuật tốn:
(16)Phát thuật toán
Nội dung
1 Khái niệm thuật toán Khái niệm thuật toán
Các đặc trưng thuật toán Bản chất trừu tượng thuật tốn Phát thuật tốn
3 Tính hiệu tính thuật tốn Biểu diễn thuật toán
(17)Phát thuật toán
Phát thuật toán
Phát triển thuật tốn gồm giai đoạn: • Phát thuật tốn
• Biểu diễn thuật tốn dạng chương trình
Phương pháp phát thuật tốn?Vấn đề q trình phát triển phần mềm
Nhà tốn học G Polya, 1945, phương pháp giải toán: Bước Hiểu toán
Bước Đặt kế hoạch giải toán Bước Thực kế hoạch
(18)Phát thuật toán
Phát thuật toán
Phát triển thuật tốn gồm giai đoạn: • Phát thuật tốn
• Biểu diễn thuật tốn dạng chương trình
Phương pháp phát thuật tốn?Vấn đề q trình phát triển phần mềm
Nhà tốn học G Polya, 1945, phương pháp giải toán: Bước Hiểu toán
Bước Đặt kế hoạch giải toán Bước Thực kế hoạch
(19)Phát thuật toán
Phát thuật toán
Trong ngữ cảnh phát triển phần mềm, bước trở thành Bước Hiểu toán
Bước Đưa ý tưởng thuật tốn có khả giải tốn
Bước Trình bày rõ thuật tốn biểu diễn dạng chương trình
Bước Đánh giá tính chương trình khả dùng cơng cụ để giải tốn khác
Chú ý:
• Cần hạn chế q trình thử-và-sai q trình xây dựng thuật tốn
(20)Tính hiệu tính thuật toán
Nội dung
1 Khái niệm thuật toán Khái niệm thuật toán
Các đặc trưng thuật toán Bản chất trừu tượng thuật toán Phát thuật tốn
3 Tính hiệu tính thuật tốn Biểu diễn thuật tốn
(21)Tính hiệu tính thuật tốn
Tính hiệu thuật tốn
• Sử dụng kỹ thuật phân tích độ phức tạp thuật tốn • So sánh độ phức tạp thời gian nhớ
• Các kiểu phân tích độ phức tạp thuật tốn • Phân tích trường hợp xấu
• Phân tích trường hợp trung bình • Phân tích xác suất
(22)Tính hiệu tính thuật tốn
Tính thuật tốn
Làm để biết thuật toán đúng?
• Phương pháp kiểm thử (testing) : thử chạy thuật tốn dữ liệu mẫu
• Phương pháp chứng minh tính (correctness proof) : chứng minh toán học
(23)Biểu diễn thuật toán
Nội dung
1 Khái niệm thuật toán Khái niệm thuật toán
Các đặc trưng thuật toán Bản chất trừu tượng thuật toán Phát thuật tốn
3 Tính hiệu tính thuật toán Biểu diễn thuật toán
(24)Biểu diễn thuật toán Các cách biểu diễn thuật toán
Các cách biểu diễn thuật toán thường dùng
• Ngơn ngữ tự nhiên • Sơ đồ khối
• Mã giả
(25)Biểu diễn thuật toán Các cách biểu diễn thuật toán
Dùng ngơn ngữ tự nhiên
Ví dụ:
• Thuật tốn Euclid tìm ước chung lớn hai số nguyên dương x y diễn đạt sau:
(26)Biểu diễn thuật toán Các cách biểu diễn thuật toán
Dùng sơ đồ khối
(27)Biểu diễn thuật toán Các cách biểu diễn thuật toán
Dùng mã giả
• Mã giả (pseudo-code) hệ thống kí hiệu, thuật ngữ dùng để biểu diễn thuật toán
• Là trừu tượng hóa ngơn ngữ lập trình, khơng phụ thuộc vào ngơn ngữ lập trình cụ thể
(28)Biểu diễn thuật toán Các cách biểu diễn thuật tốn
Dùng ngơn ngữ lập trình
(29)Biểu diễn thuật tốn Các cấu trúc ngữ nghĩa
Gán giá trị cho đối tượng (biến)
• Diễn tả việc gắn giá trị cho đối tượng: name ← expression;
trong name tên đối tượng, expression giá trị gán cho name ⇒ vùng nhớ cấp phát cho name ghi giá trị expression • Ví dụ: hốn đổi giá trị biến a b
(30)Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
Gán giá trị cho đối tượng (biến)
• Diễn tả việc gắn giá trị cho đối tượng: name ← expression;
trong name tên đối tượng, expression giá trị gán cho name ⇒ vùng nhớ cấp phát cho name ghi giá trị expression • Ví dụ: hoán đổi giá trị biến a b
(31)Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
Cấu trúc rẽ nhánh
• Chọn khả dựa theo điều kiện if (điều kiện) then
(hành động A) else
(hành động B) end if
• Dạng thiếu cấu trúc rẽ nhánh
if (điều kiện) then
(hành động)
end if
(32)Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
Cấu trúc rẽ nhánh
• Chọn khả dựa theo điều kiện if (điều kiện) then
(hành động A) else
(hành động B) end if
• Dạng thiếu cấu trúc rẽ nhánh if (điều kiện) then
(hành động) end if
(33)Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
Cấu trúc rẽ nhánh
• Chọn khả dựa theo điều kiện if (điều kiện) then
(hành động A) else
(hành động B) end if
• Dạng thiếu cấu trúc rẽ nhánh if (điều kiện) then
(hành động) end if
(34)Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
Cấu trúc rẽ nhánh - Sơ đồ khối
Ki m tra i u ki n
Hành ng
úng Sai
Ki m tra
i u ki n
Hành ng A Hành ng B
úng Sai
(35)
Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
Cấu trúc lặp với điều kiện trước while
• Thực thi lặp lặp lại lệnh hay dãy lệnh điều kiện cịn
• Mã giả:
while (điều kiện) do (hành động) end while • Sơ đồ khối:
Các cấu trúc lặp
Cấu trúc lặp while
Cú pháp : while (điều kiện) (hành động) ; Sơ đồ khối :
(36)Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
Cấu trúc lặp với điều kiện trước while: Ví dụ
• Ngơn ngữ tự nhiên: Trong cịn vé để bán tiếp tục bán vé • Mã giả:
while (còn vé để bán) do
(bán vé tiếp theo)
end while
(37)Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
Cấu trúc lặp với điều kiện trước while: Ví dụ
• Ngơn ngữ tự nhiên: Trong cịn vé để bán tiếp tục bán vé • Mã giả:
while (còn vé để bán) do (bán vé tiếp theo) end while
(38)Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
Cấu trúc lặp với điều kiện trước while: Ví dụ
• Ngơn ngữ tự nhiên: Trong cịn vé để bán tiếp tục bán vé • Mã giả:
while (còn vé để bán) do (bán vé tiếp theo) end while
(39)Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
Các thành phần cấu trúc lặp
Khởi tạo: Lập trạng thái khởi đầu, trạng thái thay đổi để hướng tới điều kiện kết thúc lặp
Kiểm tra: So sánh trạng thái với điều kiện kết thúc lặp dừng trình lặp chúng trùng
Thay đổi: Thay đổi trạng thái theo hướng dịch chuyển điều kiện kết thúc
Cần nhấn mạnh: Quá trình thay đổi trạng thái bước lặp cần hướng tới điều kiện kết thúc lặp, không dẫn tới lỗi lặp vơ hạn (vịng lặp chết) Ví dụ:
number ← 1;
(40)Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
Cấu trúc lặp với điều kiện sau repeat
• Thực thi lặp lặp lại lệnh hay dãy lệnh thoả mãn điều kiện
• Mã giả: repeat
(hành động) until (điều kiện); • Sơ đồ khối:
Các cấu trúc lặp Cấu trúc lặp repeat
(41)Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
Thủ tục hàm
• Chương trình tổ chức thành đơn vị nhỏ hơn: chương trình con, thủ tục, mô-đun, hàm, gọi chung thủ tục ⇒ Lập trình hướng thủ tục
• Mã giả: Phân biệt khái niệm thủ tục (procedure) hàm (func-tion).
• Thủ tục hàm có đối khơng. • Thủ tục khơng trả lại giá trị, hàm có trả lại giá trị. • Cú pháp thủ tục:
procedure procName(procArguments)
(hành động);
end procedure
• Cú pháp hàm:
function funcName(funcArguments)
(hành động);
return funcValue; câu lệnh thường cuối hàm
(42)Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
Thủ tục hàm
• Chương trình tổ chức thành đơn vị nhỏ hơn: chương trình con, thủ tục, mơ-đun, hàm, gọi chung thủ tục ⇒ Lập trình hướng thủ tục
• Mã giả: Phân biệt khái niệm thủ tục (procedure) hàm (func-tion).
• Thủ tục hàm có đối khơng. • Thủ tục khơng trả lại giá trị, hàm có trả lại giá trị. • Cú pháp thủ tục:
procedure procName(procArguments)
(hành động);
end procedure
• Cú pháp hàm:
function funcName(funcArguments)
(hành động);
(43)Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
Thủ tục: Ví dụ
• Thủ tụcGREETINGSin lời chào “Xin chào” procedureGREETINGS
count ← 3;
while (count > 0) do In “Xin chào”; count ← count −1; end while
(44)Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
Hàm: Ví dụ
Thuật tốn nhân hai số tự nhiên x = y ∗ z
• Nguyên tắc: Chia z cho z = 0, tương ứng nhân y với 2, bước lặp, z lẻ cộng y vào x.
• Do vai trị y z nhau, chọn z số nhỏ để giảm thiểu số bước lặp
Thuật toánMULTIPLYnhân hai số 18 34
No z y
0 18 34
1 68
2 136
3 272
4 544
(45)Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
Thuật toán nhân hai số tự nhiên: mã giả
1: functionMULTIPLY(y, z) tính x = yz
2: x ← 0;
3: while z > do 4: if (z lẻ) then
5: x ← x + y;
6: end if
7: y ← y ∗ 2; 8: z ← [z/2]; 9: end while 10: return x;
11: end function
(46)Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
Thuật toán nhân hai số tự nhiên: mã giả
1: functionMULTIPLY(y, z) tính x = yz
2: x ← 0;
3: while z > do 4: if (z lẻ) then
5: x ← x + y;
6: end if
7: y ← y ∗ 2; 8: z ← [z/2]; 9: end while 10: return x;
11: end function
(47)Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
Bài tập
1 Thuật tốn Euclid tìm ước chung lớn hai số nguyên dương X Y diễn đạt sau:
Chừng X Y khác 0, chia giá trị lớn cho giá trị nhỏ hơn thay X , Y tương ứng số chia phần dư Giá trị cuối cùng X ước chung lớn nhất.
Hãy mô tả thuật toán dạng sơ đồ khối, mã giả (dạng hàm)
2 Xây dựng thuật toán giải tốn tính số tiền thu tài khoản tiết kiệm, biết số vốn ban đầu gửi vào n, số tháng gửi t, lãi suất hàng tháng k%, tiền lãi tháng được cộng dồn vào số tiền có để tính lãi cho tháng Biểu diễn thuật toán dạng sơ đồ khối, mã giả (dạng hàm)
(48)Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
Chương trình chương trình con
procedure CHUONGTRINHCHINH
Nhap n;
NhapDuLieu(a[1 n]); In max(a[1 n]); end procedure
procedure NHAPDULIEU(a[1 n]) count ← 0;
while (count < n) do Nhap a[count+1]; count ← count +1; end while
(49)Biểu diễn thuật toán Cấu trúc đệ quy
Giới thiệu
• Đệ quy phương án để cài đặt hành động có tính lặp lại
• Đệ quy xử lí hành động lặp lại có cấu trúc tương tự • Đệ quy phương pháp xây dựng phương pháp chia để
trị Để giải toán:
1 Chia toán cần giải thành tốn nhỏ có cấu trúc tương tự;
2 Giải toán nhỏ;
(50)Biểu diễn thuật toán Cấu trúc đệ quy
Giới thiệu
• Đệ quy phương án để cài đặt hành động có tính lặp lại
• Đệ quy xử lí hành động lặp lại có cấu trúc tương tự • Đệ quy phương pháp xây dựng phương pháp chia để
trị Để giải toán:
1 Chia toán cần giải thành tốn nhỏ có cấu trúc tương tự; Giải toán nhỏ;
(51)Biểu diễn thuật toán Cấu trúc đệ quy
Thuật toán săn sư tử sa mạc
1 Chia sa mạc làm nửa A B Sư tử phải nằm 2 nửa, ví dụ A
2 Lại chia tiếp nửa A làm 2, ví dụ A1và A2 Sư tử lại phải nằm
một nửa
(52)Biểu diễn thuật toán Cấu trúc đệ quy
Thuật toán săn sư tử sa mạc
1 Chia sa mạc làm nửa A B Sư tử phải nằm 2 nửa, ví dụ A
2 Lại chia tiếp nửa A làm 2, ví dụ A1và A2 Sư tử lại phải nằm nửa
(53)Biểu diễn thuật toán Cấu trúc đệ quy
Thuật toán săn sư tử sa mạc
1 Chia sa mạc làm nửa A B Sư tử phải nằm 2 nửa, ví dụ A
2 Lại chia tiếp nửa A làm 2, ví dụ A1và A2 Sư tử lại phải nằm nửa
(54)Biểu diễn thuật toán Cấu trúc đệ quy
Tớnh giai tha
ã n! = n ì (n − 1)!, 0! =
• Nếu gọiFACTORIAL(n) hàm tính n! thì
FACTORIAL(n) =
(
1 nếu n = 0
n ×FACTORIAL(n − 1) nếu n > 0
• Thuật tốn đệ quy tính n!, n > 0:
functionFACTORIAL(n) tính n!
if (n = 0) then return(1); else
return(n ×FACTORIAL(n − 1));
(55)Biểu diễn thuật tốn Cấu trúc đệ quy
Tính giai thừa
ã n! = n ì (n 1)!, 0! =
• Nếu gọiFACTORIAL(n) hàm tính n! thì
FACTORIAL(n) = (
1 nếu n = 0
n ìFACTORIAL(n 1) nu n > 0 ã Thuật tốn đệ quy tính n!, n > 0:
functionFACTORIAL(n) tính n!
if (n = 0) then return(1); else
return(n ×FACTORIAL(n − 1));
(56)Biểu diễn thuật tốn Cấu trúc đệ quy
Tính giai tha
ã n! = n ì (n 1)!, 0! =
• Nếu gọiFACTORIAL(n) hàm tính n! thì
FACTORIAL(n) = (
1 nếu n = 0
n ×FACTORIAL(n − 1) nếu n > 0 • Thuật tốn đệ quy tính n!, n > 0:
functionFACTORIAL(n) tính n!
if (n = 0) then return(1); else
return(n ×FACTORIAL(n − 1)); end if
(57)Biểu diễn thuật toán Cấu trúc đệ quy
Thuật toán đệ quy: điều kiện kết thúc
(58)Biểu diễn thuật toán Cấu trúc đệ quy
Bài tập nhà
1 Số Fibonacci thứ n định nghĩa sau
F (n) =
0, nếu n = 0;
1, nếu n = 1;
(59)Biểu diễn thuật toán Cấu trúc đệ quy
Bài tập
2 Thuật tốn sau tính tích số ngun khơng âm y z cách tính tổng tích lũy y lần z Thuật tốn có khơng?
x ← z; count ← 1;
while (count < y) do x ← x + z;
count ← count +1; end while
(60)Phụ lục Tài liệu tham khảo
Tài liệu tham khảo chính
J Glenn Brookshear
Computer Science An Overview, Chapter 5
Pearson, Addison Wesley, Edition 8, 2005 I Parberry and W Gasarch
Problems on Algorithms
Prentice Hall, Inc., 1998 R Sedgewick
Algorithms
Addition Wesley, 1984 A R Mayer
Mathematics for Computer Science