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 (463.6 KB, 60 trang )
<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>
Bài 2 - Thuật tốn
Bộ mơn Tin học ( c
BMTH 2019)
Khoa Tốn - Cơ - Tin học
1 <sub>Khái niệm thuật toán</sub>
Khái niệm thuật toán
Các đặc trưng của thuật toán
Bản chất trừu tượng của thuật tốn
2 <sub>Phát hiện thuật tốn</sub>
3 Tính hiệu quả và tính đúng của thuật tốn
4 Biểu diễn thuật toán
1 <sub>Khái niệm thuật toán</sub>
Khái niệm thuật toán
Các đặc trưng của thuật toán
Bản chất trừu tượng của thuật tốn
2 <sub>Phát hiện thuật tốn</sub>
3 Tính hiệu quả và tính đúng của thuật tốn
1 <sub>Khái niệm thuật toán</sub>
Khái niệm thuật toán
Các đặc trưng của thuật toán
Bản chất trừu tượng của thuật tốn
2 <sub>Phát hiện thuật tốn</sub>
3 Tính hiệu quả và tính đúng của thuật tốn
4 Biểu diễn thuật tốn
1 <sub>Khái niệm thuật toán</sub>
Khái niệm thuật toán
Các đặc trưng của thuật toán
Bản chất trừu tượng của thuật tốn
2 <sub>Phát hiện thuật tốn</sub>
3 Tính hiệu quả và tính đúng của thuật tốn
4 Biểu diễn thuật tốn
Khái niệm thuật toán
1 <sub>Khái niệm thuật toán</sub>
Khái niệm thuật toán
Các đặc trưng của thuật toán
Bản chất trừu tượng của thuật tốn
2 <sub>Phát hiện thuật tốn</sub>
3 Tính hiệu quả và tính đúng của thuật tốn
4 Biểu diễn thuật toán
Khái niệm thuật toán Khái niệm thuật toán
Định nghĩa
<i>Thuật toán (thuật giải) là một tập có thứ tự các bước (cơng việc) có thể</i>
<i>thực hiện được, không nhập nhằng, xác định một quá trình có kết thúc.</i>
Ví dụ:
Khái niệm thuật toán Các đặc trưng của thuật toán
• <i><sub>Các bước của thuật tốn phải được xác định thứ tự, tức là xác định</sub></i>
rõ bước nào thực hiện trước, bước nào thực hiện sau.
• <sub>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ước</sub>
tuần tự bước 1, bước 2,. . . (ví dụ, các thuật tốn song song)
• <i>Các bước của thuật tốn phải thực hiện được, cịn gọi là hiệu quả.</i>
• <i><sub>Ví dụ, thuật tốn khơng thể chứa bước nào đó có dạng “Tạo một dãy</sub></i>
<i>gồm tất cả các số nguyên dương”, vì dãy số ngun dương là vơ</i>
hạn, bước này khơng thực hiện được.
• <i><sub>Các bước của thuật tốn phải khơng nhập nhằng.</sub></i>
• <sub>Thơng tin ở mỗi trạng thái của q trình thực hiện thuật tốn phải</sub>
xác định hồn tồn và duy nhất các hành động tại mỗi bước của
thuật toán.
Khái niệm thuật toán Các đặc trưng của thuật tốn
• <i><sub>Các bước của thuật toán phải được xác định thứ tự, tức là xác định</sub></i>
rõ bước nào thực hiện trước, bước nào thực hiện sau.
• <sub>Mặc dù vậy, khơng nhất thiết u cầu phải thực hiện các dãy bước</sub>
tuần tự bước 1, bước 2,. . . (ví dụ, các thuật tốn song song)
• <i>Các bước của thuật tốn phải thực hiện được, cịn gọi là hiệu quả.</i>
• <i><sub>Ví dụ, thuật tốn khơng thể chứa bước nào đó có dạng “Tạo một dãy</sub></i>
<i>gồm tất cả các số nguyên dương”, vì dãy số nguyên dương là vơ</i>
hạn, bước này khơng thực hiện được.
• <i><sub>Các bước của thuật tốn phải khơng nhập nhằng.</sub></i>
• <sub>Thơng tin ở mỗi trạng thái của q trình thực hiện thuật tốn phải</sub>
xác định hoàn toàn và duy nhất các hành động tại mỗi bước của
thuật toán.
Khái niệm thuật toán Các đặc trưng của thuật toán
• <i><sub>Các bước của thuật tốn phải được xác định thứ tự, tức là xác định</sub></i>
rõ bước nào thực hiện trước, bước nào thực hiện sau.
• <sub>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ước</sub>
tuần tự bước 1, bước 2,. . . (ví dụ, các thuật tốn song song)
• <i>Các bước của thuật tốn phải thực hiện được, cịn gọi là hiệu quả.</i>
• <i><sub>Ví dụ, thuật tốn khơng thể chứa bước nào đó có dạng “Tạo một dãy</sub></i>
<i>gồm tất cả các số nguyên dương”, vì dãy số ngun dương là vơ</i>
hạn, bước này khơng thực hiện được.
• <i><sub>Các bước của thuật tốn phải khơng nhập nhằng.</sub></i>
• <sub>Thơng tin ở mỗi trạng thái của q trình thực hiện thuật tốn phải</sub>
xác định hồn tồn và duy nhất các hành động tại mỗi bước của
thuật toán.
Khái niệm thuật toán Các đặc trưng của thuật tốn
• <i><sub>Các bước của thuật toán phải được xác định thứ tự, tức là xác định</sub></i>
rõ bước nào thực hiện trước, bước nào thực hiện sau.
• <sub>Mặc dù vậy, khơng nhất thiết u cầu phải thực hiện các dãy bước</sub>
tuần tự bước 1, bước 2,. . . (ví dụ, các thuật tốn song song)
• <i>Các bước của thuật tốn phải thực hiện được, cịn gọi là hiệu quả.</i>
• <i><sub>Ví dụ, thuật tốn khơng thể chứa bước nào đó có dạng “Tạo một dãy</sub></i>
<i>gồm tất cả các số nguyên dương”, vì dãy số nguyên dương là vơ</i>
hạn, bước này khơng thực hiện được.
• <i><sub>Các bước của thuật tốn phải khơng nhập nhằng.</sub></i>
• <sub>Thơng tin ở mỗi trạng thái của q trình thực hiện thuật tốn phải</sub>
xác định hoàn toàn và duy nhất các hành động tại mỗi bước của
thuật toán.
Khái niệm thuật toán Bản chất trừu tượng của thuật toán
Cần nhấn mạnh sự khác nhau giữa một thuật tốn và biểu diễn của
nó. Tương tự như giữa một cốt truyện và một cuốn sách.
• <sub>Cốt truyện : trừu tượng, mang tính khái niệm;</sub>
• <sub>Cuốn sách : là biểu diễn vật lí của cốt truyện. Khi truyện được dịch</sub>
sang thứ tiếng khác, hoặc xuất bản dưới dạng khác thì chỉ phần
biểu diễn là thay đổi, cốt truyện vẫn khơng đổi.
Thuật tốn có thể được biểu diễn dưới nhiều dạng khác nhau. Ví dụ,
thuật tốn chuyển từ nhiệt độ C sang nhiệt độ F :
• <i><sub>Biểu diễn bằng công thức đại số : F =</sub></i> 9
5<i>C + 32 ;</i>
Khái niệm thuật toán Bản chất trừu tượng của thuật toán
Cần nhấn mạnh sự khác nhau giữa một thuật tốn và biểu diễn của
nó. Tương tự như giữa một cốt truyện và một cuốn sách.
• <sub>Cốt truyện : trừu tượng, mang tính khái niệm;</sub>
• <sub>Cuốn sách : là biểu diễn vật lí của cốt truyện. Khi truyện được dịch</sub>
sang thứ tiếng khác, hoặc xuất bản dưới dạng khác thì chỉ phần
biểu diễn là thay đổi, cốt truyện vẫn không đổi.
Thuật tốn có thể được biểu diễn dưới nhiều dạng khác nhau. Ví dụ,
thuật tốn chuyển từ nhiệt độ C sang nhiệt độ F :
• <i><sub>Biểu diễn bằng cơng thức đại số : F =</sub></i> 9
5<i>C + 32 ;</i>
Khái niệm thuật toán Bản chất trừu tượng của thuật toán
• <i>Mỗi chương trình (program) là biểu diễn của một thuật tốn dùng</i>
cho máy tính.
Khái niệm thuật tốn Bản chất trừu tượng của thuật tốn
1. Giải thích vì sao các bước mơ tả dưới đây khơng tạo thành một
thuật toán:
Phát hiện thuật toán
1 <sub>Khái niệm thuật toán</sub>
Khái niệm thuật toán
Các đặc trưng của thuật toán
Bản chất trừu tượng của thuật toán
2 <sub>Phát hiện thuật tốn</sub>
3 Tính hiệu quả và tính đúng của thuật toán
4 Biểu diễn thuật toán
Phát hiện thuật toán
Phát triển một thuật toán gồm 2 giai đoạn:
• Phát hiện thuật tốn
• Biểu diễn thuật tốn dưới dạng chương trình
Phương pháp phát hiện thuật tốn?Vấn đề chính trong 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 quyết bài toán:
Bước 1. Hiểu bài toán.
Bước 2. Đặt ra kế hoạch giải quyết bài toán.
Bước 3. Thực hiện kế hoạch.
Phát hiện thuật toán
Phát triển một thuật toán gồm 2 giai đoạn:
• Phát hiện thuật tốn
• Biểu diễn thuật tốn dưới dạng chương trình
Phương pháp phát hiện thuật tốn?Vấn đề chính trong 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 quyết bài toán:
Bước 1. Hiểu bài toán.
Bước 2. Đặt ra kế hoạch giải quyết bài toán.
Bước 3. Thực hiện kế hoạch.
Phát hiện thuật toán
Trong ngữ cảnh phát triển phần mềm, các bước này trở thành
Bước 1. Hiểu bài toán.
Bước 2. Đưa ra ý tưởng về một thuật toán có khả năng giải quyết
bài tốn.
Bước 3. Trình bày rõ thuật tốn và biểu diễn nó dưới dạng một
chương trình.
Bước 4. Đánh giá tính đúng của chương trình và khả năng dùng
nó như là cơng cụ để giải các bài tốn khác.
<i>Chú ý:</i>
• Cần hạn chế q trình thử-và-sai trong q trình xây dựng thuật
tốn
Tính hiệu quả và tính đúng của thuật tốn
1 <sub>Khái niệm thuật toán</sub>
Khái niệm thuật toán
Các đặc trưng của thuật toán
Bản chất trừu tượng của thuật tốn
2 <sub>Phát hiện thuật tốn</sub>
3 Tính hiệu quả và tính đúng của thuật tốn
4 Biểu diễn thuật tốn
Tính hiệu quả và tính đúng của thuật tốn
• Sử dụng các kỹ thuật phân tích độ phức tạp của các thuật tốn
• <sub>So sánh độ phức tạp về thời gian và bộ nhớ</sub>
• Các kiểu phân tích độ phức tạp của thuật tốn
• Phân tích trường hợp xấu nhất
• <sub>Phân tích trường hợp trung bình</sub>
• <sub>Phân tích xác suất</sub>
Tính hiệu quả và tính đúng của thuật tốn
<i>Làm thế nào để biết thuật toán là đúng?</i>
• <i>Phương pháp kiểm thử (testing) : thử chạy thuật tốn trên các dữ</i>
liệu mẫu.
• <i><sub>Phương pháp chứng minh tính đúng (correctness proof) : chứng</sub></i>
minh bằng tốn học.
Biểu diễn thuật toán
1 <sub>Khái niệm thuật toán</sub>
Khái niệm thuật toán
Các đặc trưng của thuật toán
Bản chất trừu tượng của thuật tốn
2 <sub>Phát hiện thuật tốn</sub>
3 Tính hiệu quả và tính đúng của thuật tốn
4 Biểu diễn thuật toán
Biểu diễn thuật toán Các cách biểu diễn thuật tốn
• <sub>Ngơn ngữ tự nhiên</sub>
• <sub>Sơ đồ khối</sub>
• <sub>Mã giả</sub>
Biểu diễn thuật toán Các cách biểu diễn thuật tốn
Ví dụ:
• <sub>Thuật tốn Euclid tìm ước chung lớn nhất của hai số nguyên dương</sub>
<i>x và y được diễn đạt như sau:</i>
Biểu diễn thuật toán Các cách biểu diễn thuật toán
Biểu diễn thuật toán Các cách biểu diễn thuật tốn
• <i>Mã giả (pseudo-code) là một hệ thống các kí hiệu, thuật ngữ dùng</i>
để biểu diễn thuật tốn.
• <sub>Là sự trừu tượng hóa của ngơn ngữ lập trình, khơng phụ thuộc vào</sub>
ngơn ngữ lập trình cụ thể nào.
Biểu diễn thuật toán Các cách biểu diễn thuật tốn
Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
• Diễn tả việc gắn một giá trị cho một đối tượng:
name ← expression;
trong đó name là tên đối tượng, expression là giá trị gán cho name.
⇒ vùng nhớ được cấp phát cho name sẽ được ghi giá trị expression
• <i>Ví dụ: hốn đổi giá trị 2 biến a và b</i>
Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
• Diễn tả việc gắn một giá trị cho một đối tượng:
name ← expression;
trong đó name là tên đối tượng, expression là giá trị gán cho name.
⇒ vùng nhớ được cấp phát cho name sẽ được ghi giá trị expression
• <i>Ví dụ: hốn đổi giá trị 2 biến a và b</i>
Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
• Chọn 1 trong 2 khả năng dựa theo một điều kiện nào đó.
<b>if (điều kiện) then</b>
(hành động A)
<b>else</b>
(hành động B)
<b>end if</b>
• <sub>Dạng thiếu của cấu trúc rẽ nhánh</sub>
<b>if (điều kiện) then</b>
(hành động)
<b>end if</b>
Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
• Chọn 1 trong 2 khả năng dựa theo một điều kiện nào đó.
<b>if (điều kiện) then</b>
(hành động A)
<b>else</b>
(hành động B)
<b>end if</b>
• <sub>Dạng thiếu của cấu trúc rẽ nhánh</sub>
<b>if (điều kiện) then</b>
(hành động)
<b>end if</b>
Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
• Chọn 1 trong 2 khả năng dựa theo một điều kiện nào đó.
<b>if (điều kiện) then</b>
(hành động A)
<b>else</b>
(hành động B)
<b>end if</b>
• <sub>Dạng thiếu của cấu trúc rẽ nhánh</sub>
<b>if (điều kiện) then</b>
(hành động)
<b>end if</b>
Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
Ki m tra
i u ki n
...
Hành ng
úng <sub>Sai</sub>
...
Ki m tra
i u ki n
...
Hành ng A Hành ng B
úng Sai
...
Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
• Thực thi lặp đi lặp lại một lệnh hay một dãy lệnh khi điều kiện nào
đó cịn đúng.
• Mã giả:
<b>while (điều kiện) do</b>
(hành động)
<b>end while</b>
• 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) do (hành động) ;
Sơ đồ khối :
Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
• Ngơn ngữ tự nhiên: Trong khi cịn vé để bán thì tiếp tục bán vé.
• <sub>Mã giả:</sub>
<b>while (cịn vé để bán) do</b>
(bán vé tiếp theo)
<b>end while</b>
Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
• Ngơn ngữ tự nhiên: Trong khi cịn vé để bán thì tiếp tục bán vé.
• <sub>Mã giả:</sub>
<b>while (còn vé để bán) do</b>
(bán vé tiếp theo)
<b>end while</b>
Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
• Ngơn ngữ tự nhiên: Trong khi cịn vé để bán thì tiếp tục bán vé.
• <sub>Mã giả:</sub>
<b>while (cịn vé để bán) do</b>
(bán vé tiếp theo)
<b>end while</b>
Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
Khởi tạo: Lập trạng thái khởi đầu, trạng thái này sẽ được 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 hiện tại với điều kiện kết thúc lặp và
dừng quá trình lặp nếu chúng trùng nhau.
Thay đổi: Thay đổi trạng thái theo hướng dịch chuyển về điều kiện
kết thúc.
<i>Cần nhấn mạnh: Quá trình thay đổi trạng thái trong mỗi bước lặp cần</i>
hướng tới điều kiện kết thúc lặp, nếu không sẽ dẫn tới lỗi lặp vơ hạn
(vịng lặp chết). Ví dụ:
number ← 1;
Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
• Thực thi lặp đi lặp lại một lệnh hay một dãy lệnh cho đến khi thoả
mãn điều kiện nào đó.
• Mã giả:
<b>repeat</b>
(hành động)
<b>until (điều kiện);</b>
• Sơ đồ khối:
Các cấu trúc lặp
Cấu trúc lặp repeat
Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
• Chương trình tổ chức thành các đơn vị nhỏ hơn: chương trình con,
<i>thủ tục, mô-đun, hàm, gọi chung là các thủ tục ⇒ Lập trình hướng</i>
thủ tục.
• <i>Mã giả: Phân biệt 2 khái niệm thủ tục (procedure) và hàm </i>
<i>(func-tion).</i>
• <sub>Thủ tục và hàm đều có thể có đối hoặc khơng.</sub>
• <sub>Thủ tục khơng trả lại giá trị, hàm có trả lại giá trị.</sub>
• Cú pháp thủ tục:
<b>procedure procName(procArguments)</b>
(hành động);
<b>end procedure</b>
• <sub>Cú pháp hàm:</sub>
<b>function funcName(funcArguments)</b>
(hành động);
return funcValue; .<i>câu lệnh này thường ở cuối hàm</i>
Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
• Chương trình tổ chức thành các đơn vị nhỏ hơn: chương trình con,
<i>thủ tục, mơ-đun, hàm, gọi chung là các thủ tục ⇒ Lập trình hướng</i>
thủ tục.
• <i>Mã giả: Phân biệt 2 khái niệm thủ tục (procedure) và hàm </i>
<i>(func-tion).</i>
• <sub>Thủ tục và hàm đều có thể có đối hoặc khơng.</sub>
• <sub>Thủ tục khơng trả lại giá trị, hàm có trả lại giá trị.</sub>
• Cú pháp thủ tục:
<b>procedure procName(procArguments)</b>
(hành động);
<b>end procedure</b>
• <sub>Cú pháp hàm:</sub>
<b>function funcName(funcArguments)</b>
(hành động);
Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
• Thủ tụcGREETINGSin ra 3 lời chào “Xin chào”
<b>procedure</b>GREETINGS
count ← 3;
<b>while (count > 0) do</b>
In ra “Xin chào”;
count ← count −1;
<b>end while</b>
Biểu diễn thuật tốn Các cấu trúc ngữ nghĩa
<i>Thuật tốn nhân hai số tự nhiên x = y ∗ z</i>
• <i>Nguyên tắc: Chia z cho 2 cho tới khi z = 0, tương ứng nhân y với</i>
<i>2, tại mỗi bước lặp, nếu z lẻ thì cộng y vào x.</i>
• <i><sub>Do vai trò của y và z như nhau, chọn z là số nhỏ để giảm thiểu số</sub></i>
bước lặp.
Thuật toánMULTIPLYnhân hai số 18 và 34
No. <i>z</i> <i>y</i>
0. 18 34
1. 9 68
2. 4 136
3. 2 272
4. 1 544
Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
1: <b>function</b>MULTIPLY<i>(y, z)</i> .<i>tính x = yz</i>
2: <i>x ← 0;</i>
3: <i><b>while z > 0 do</b></i>
4: <i><b>if (z lẻ) then</b></i>
5: <i>x ← x + y;</i>
6: <b>end if</b>
7: <i>y ← y ∗ 2;</i>
8: <i>z ← [z/2];</i>
9: <b>end while</b>
10: <i>return x;</i>
11: <b>end function</b>
Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
1: <b>function</b>MULTIPLY<i>(y, z)</i> .<i>tính x = yz</i>
2: <i>x ← 0;</i>
3: <i><b>while z > 0 do</b></i>
4: <i><b>if (z lẻ) then</b></i>
5: <i>x ← x + y;</i>
6: <b>end if</b>
7: <i>y ← y ∗ 2;</i>
8: <i>z ← [z/2];</i>
9: <b>end while</b>
11: <b>end function</b>
Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
1. Thuật tốn Euclid tìm ước chung lớn nhất của hai số nguyên
<i>dương X và Y được diễn đạt như sau:</i>
<i>Chừng nào cả X và Y khác 0, chia giá trị lớn hơn cho giá trị nhỏ</i>
<i>hơn và thay X , Y tương ứng bởi số chia và phần dư. Giá trị cuối</i>
<i>cùng của X là ước chung lớn nhất.</i>
Hãy mơ tả thuật tốn trên dưới dạng sơ đồ khối, mã giả (dạng
hàm).
2. Xây dựng thuật toán giải bài tốn tính số tiền thu được trong tài
<i>khoản tiết kiệm, biết rằng số vốn ban đầu gửi vào là n, số tháng</i>
<i>gửi là t, lãi suất hàng tháng là k%, tiền lãi của một tháng được</i>
cộng dồn vào số tiền hiện có để tính lãi cho tháng tiếp theo. Biểu
diễn thuật toán dưới dạng sơ đồ khối, mã giả (dạng hàm).
Biểu diễn thuật toán Các cấu trúc ngữ nghĩa
<b>procedure C</b>HUONGTRINHCHINH
<i>Nhap n;</i>
<i>NhapDuLieu(a[1..n]);</i>
<i>In ra max(a[1..n]);</i>
<b>end procedure</b>
<b>procedure N</b>HAPDULIEU<i>(a[1..n])</i>
count ← 0;
<i><b>while (count < n) do</b></i>
Nhap a[count+1];
count ← count +1;
<b>end while</b>
Biểu diễn thuật tốn Cấu trúc đệ quy
• Đệ quy cũng là một phương án để cài đặt các hành động có tính
lặp lại
• Đệ quy xử lí các hành động lặp lại có cấu trúc tương tự nhau.
• <sub>Đệ quy là phương pháp chính khi xây dựng phương pháp chia để</sub>
trị. Để giải một bài toán:
1. Chia bài toán cần giải thành các bài tốn nhỏ có cấu trúc tương tự;
2. Giải các bài toán nhỏ;
Biểu diễn thuật tốn Cấu trúc đệ quy
• Đệ quy cũng là một phương án để cài đặt các hành động có tính
lặp lại
• Đệ quy xử lí các hành động lặp lại có cấu trúc tương tự nhau.
• <sub>Đệ quy là phương pháp chính khi xây dựng phương pháp chia để</sub>
trị. Để giải một bài toán:
1. Chia bài toán cần giải thành các bài tốn nhỏ có cấu trúc tương tự;
2. Giải các bài toán nhỏ;
Biểu diễn thuật toán Cấu trúc đệ quy
1. <i>Chia sa mạc làm 2 nửa A và B. Sư tử phải nằm ở một trong 2</i>
<i>nửa, ví dụ A</i>
2. <i>Lại chia tiếp nửa A làm 2, ví dụ A</i>1<i>và A</i>2. Sư tử lại phải nằm ở
một trong 2 nửa này.
Biểu diễn thuật toán Cấu trúc đệ quy
1. <i>Chia sa mạc làm 2 nửa A và B. Sư tử phải nằm ở một trong 2</i>
<i>nửa, ví dụ A</i>
2. <i>Lại chia tiếp nửa A làm 2, ví dụ A</i>1<i>và A</i>2. Sư tử lại phải nằm ở
một trong 2 nửa này.
Biểu diễn thuật toán Cấu trúc đệ quy
1. <i>Chia sa mạc làm 2 nửa A và B. Sư tử phải nằm ở một trong 2</i>
<i>nửa, ví dụ A</i>
2. <i>Lại chia tiếp nửa A làm 2, ví dụ A</i>1<i>và A</i>2. Sư tử lại phải nằm ở
một trong 2 nửa này.
Biểu diễn thuật toán Cấu trúc đệ quy
ã <i>n! = n ì (n 1)!,</i> 0! = 1
• Nếu gọiFACTORIAL<i>(n) là hàm tính n! thì</i>
FACTORIAL(n) =
(
1 <i>nếu n = 0</i>
<i>n ×</i>FACTORIAL(n − 1) <i>nếu n > 0</i>
• <i>Thuật tốn đệ quy tính n!, n > 0:</i>
<b>function</b>FACTORIAL<i>(n)</i> .<i>tính n!</i>
<i><b>if (n = 0) then return(1);</b></i>
<b>else</b>
<i>return(n ×</i>FACTORIAL(n − 1));
Biểu diễn thuật toán Cấu trúc đệ quy
ã <i>n! = n ì (n 1)!,</i> 0! = 1
• Nếu gọiFACTORIAL<i>(n) là hàm tính n! thì</i>
FACTORIAL(<i>n) =</i>
(
1 <i>nếu n = 0</i>
<i>n ×</i>FACTORIAL(<i>n − 1)</i> <i>nếu n > 0</i>
• <i>Thuật tốn đệ quy tính n!, n > 0:</i>
<b>function</b>FACTORIAL<i>(n)</i> .<i>tính n!</i>
<i><b>if (n = 0) then return(1);</b></i>
<i>return(n ×</i>FACTORIAL(n − 1));
Biểu diễn thuật toán Cấu trúc đệ quy
ã <i>n! = n ì (n 1)!,</i> 0! = 1
• Nếu gọiFACTORIAL<i>(n) là hàm tính n! thì</i>
FACTORIAL(<i>n) =</i>
(
1 <i>nếu n = 0</i>
<i>n ×</i>FACTORIAL(<i>n − 1)</i> <i>nếu n > 0</i>
• <i>Thuật tốn đệ quy tính n!, n > 0:</i>
<b>function</b>FACTORIAL<i>(n)</i> .<i>tính n!</i>
<i><b>if (n = 0) then return(1);</b></i>
<b>else</b>
<i>return(n ×</i>FACTORIAL(<i>n − 1));</i>
<b>end if</b>
Biểu diễn thuật toán Cấu trúc đệ quy
Biểu diễn thuật toán Cấu trúc đệ quy
1. <i>Số Fibonacci thứ n được định nghĩa như sau</i>
<i>F (n) =</i>
0, <i>nếu n = 0;</i>
1, <i>nếu n = 1;</i>
Biểu diễn thuật toán Cấu trúc đệ quy
2. <i>Thuật tốn sau tính tích 2 số ngun khơng âm y và z bằng cách</i>
<i>tính tổng tích lũy của y lần của z. Thuật tốn này có đúng không?</i>
<i>x ← z;</i>
count ← 1;
<i><b>while (count < y) do</b></i>
<i>x ← x + z;</i>
count ← count +1;
<b>end while</b>
Phụ lục Tài liệu tham khảo
J. Glenn Brookshear.
<i>Computer Science An Overview, Chapter 5</i>
Pearson, Addison Wesley, Edition 8, 2005.
I. Parberry and W. Gasarch
<i>Problems on Algorithms</i>
Prentice Hall, Inc., 1998.
R. Sedgewick
<i>Algorithms</i>
Addition Wesley, 1984.
A. R. Mayer
<i>Mathematics for Computer Science</i>