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

lt thuật toán – tamnguyenthi

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>

TIN HỌC CƠ SỞ



Bài 2 - Thuật tốn


Bộ mơn Tin học ( c
BMTH 2019)


Khoa Tốn - Cơ - Tin học


</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>

Nội dung



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


</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>

Nội dung



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


</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>

Nội dung



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


</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>

Nội dung



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


</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6>

Khái niệm thuật toán


Nội dung




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


</div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>

Khái niệm thuật toán Khái niệm thuật toán


<i>Khái niệm thuật toán (Algorithm)</i>



Đị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ụ:


</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=8>

Khái niệm thuật toán Các đặc trưng của 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 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.


</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9>

Khái niệm thuật toán Các đặc trưng của thuật tố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.


</div>
<span class='text_page_counter'>(10)</span><div class='page_container' data-page=10>

Khái niệm thuật toán Các đặc trưng của 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 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.


</div>
<span class='text_page_counter'>(11)</span><div class='page_container' data-page=11>

Khái niệm thuật toán Các đặc trưng của thuật tố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.


</div>
<span class='text_page_counter'>(12)</span><div class='page_container' data-page=12>

Khái niệm thuật toán Bản chất trừu tượng của thuật toán


Thuật toán và Biểu diễn 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>


</div>
<span class='text_page_counter'>(13)</span><div class='page_container' data-page=13>

Khái niệm thuật toán Bản chất trừu tượng của thuật toán


Thuật toán và Biểu diễn 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>



</div>
<span class='text_page_counter'>(14)</span><div class='page_container' data-page=14>

Khái niệm thuật toán Bản chất trừu tượng của thuật toán


Thuật toán và Biểu diễn của thuật toán


<i>Cần phân biệt 2 khái niệm chương trình và q trình</i>


• <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.


</div>
<span class='text_page_counter'>(15)</span><div class='page_container' data-page=15>

Khái niệm thuật tốn Bản chất trừu tượng của thuật tốn


Câu hỏi/Bài tập



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:


</div>
<span class='text_page_counter'>(16)</span><div class='page_container' data-page=16>

Phát hiện thuật toán


Nội dung



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



</div>
<span class='text_page_counter'>(17)</span><div class='page_container' data-page=17>

Phát hiệ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.


</div>
<span class='text_page_counter'>(18)</span><div class='page_container' data-page=18>

Phát hiệ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.


</div>
<span class='text_page_counter'>(19)</span><div class='page_container' data-page=19>

Phát hiện thuật toán


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


</div>
<span class='text_page_counter'>(20)</span><div class='page_container' data-page=20>

Tính hiệu quả và tính đúng của thuật tốn


Nội dung




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


</div>
<span class='text_page_counter'>(21)</span><div class='page_container' data-page=21>

Tính hiệu quả và tính đúng của thuật tốn


Tính hiệu quả 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>


</div>
<span class='text_page_counter'>(22)</span><div class='page_container' data-page=22>

Tính hiệu quả và tính đúng của thuật tốn


Tính đúng của thuật toá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.


</div>
<span class='text_page_counter'>(23)</span><div class='page_container' data-page=23>

Biểu diễn thuật toán


Nội dung



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


</div>
<span class='text_page_counter'>(24)</span><div class='page_container' data-page=24>

Biểu diễn thuật toán Các cách biểu diễn thuật tốn


Các cách biểu diễn thuật tốn thường dùng



• <sub>Ngơn ngữ tự nhiên</sub>
• <sub>Sơ đồ khối</sub>


• <sub>Mã giả</sub>


</div>
<span class='text_page_counter'>(25)</span><div class='page_container' data-page=25>

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ữ tự nhiê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>


</div>
<span class='text_page_counter'>(26)</span><div class='page_container' data-page=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



</div>
<span class='text_page_counter'>(27)</span><div class='page_container' data-page=27>

Biểu diễn thuật toán Các cách biểu diễn thuật tốn


Dùng mã giả



• <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.


</div>
<span class='text_page_counter'>(28)</span><div class='page_container' data-page=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



</div>
<span class='text_page_counter'>(29)</span><div class='page_container' data-page=29>

Biểu diễn thuật toán Các cấu trúc ngữ nghĩa


Gán giá trị cho một đối tượng (biến)




• 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>


</div>
<span class='text_page_counter'>(30)</span><div class='page_container' data-page=30>

Biểu diễn thuật toán Các cấu trúc ngữ nghĩa


Gán giá trị cho một đối tượng (biến)



• 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>


</div>
<span class='text_page_counter'>(31)</span><div class='page_container' data-page=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 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>


</div>
<span class='text_page_counter'>(32)</span><div class='page_container' data-page=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 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>


</div>
<span class='text_page_counter'>(33)</span><div class='page_container' data-page=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 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>


</div>
<span class='text_page_counter'>(34)</span><div class='page_container' data-page=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 <sub>Sai</sub>



...
Ki m tra


i u ki n
...


Hành ng A Hành ng B


úng Sai


...


</div>
<span class='text_page_counter'>(35)</span><div class='page_container' data-page=35>

Biểu diễn thuật toán Các cấu trúc ngữ nghĩa


<i>Cấu trúc lặp với điều kiện trước while</i>



• 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 :


</div>
<span class='text_page_counter'>(36)</span><div class='page_container' data-page=36>

Biểu diễn thuật toán Các cấu trúc ngữ nghĩa


<i>Cấu trúc lặp với điều kiện trước while: Ví dụ</i>



• 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>


</div>
<span class='text_page_counter'>(37)</span><div class='page_container' data-page=37>

Biểu diễn thuật toán Các cấu trúc ngữ nghĩa


<i>Cấu trúc lặp với điều kiện trước while: Ví dụ</i>



• 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>


</div>
<span class='text_page_counter'>(38)</span><div class='page_container' data-page=38>

Biểu diễn thuật toán Các cấu trúc ngữ nghĩa


<i>Cấu trúc lặp với điều kiện trước while: Ví dụ</i>




• 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>


</div>
<span class='text_page_counter'>(39)</span><div class='page_container' data-page=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ủa cấu trúc lặp



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;


</div>
<span class='text_page_counter'>(40)</span><div class='page_container' data-page=40>

Biểu diễn thuật toán Các cấu trúc ngữ nghĩa


<i>Cấu trúc lặp với điều kiện sau repeat</i>




• 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


</div>
<span class='text_page_counter'>(41)</span><div class='page_container' data-page=41>

Biểu diễn thuật toán Các cấu trúc ngữ nghĩa


Thủ tục và hàm



• 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>


</div>
<span class='text_page_counter'>(42)</span><div class='page_container' data-page=42>

Biểu diễn thuật toán Các cấu trúc ngữ nghĩa


Thủ tục và hàm



• 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);


</div>
<span class='text_page_counter'>(43)</span><div class='page_container' data-page=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 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>


</div>
<span class='text_page_counter'>(44)</span><div class='page_container' data-page=44>

Biểu diễn thuật tốn Các cấu trúc ngữ nghĩa


Hàm: Ví dụ



<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


</div>
<span class='text_page_counter'>(45)</span><div class='page_container' data-page=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: <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>


</div>
<span class='text_page_counter'>(46)</span><div class='page_container' data-page=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: <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>


</div>
<span class='text_page_counter'>(47)</span><div class='page_container' data-page=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 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).


</div>
<span class='text_page_counter'>(48)</span><div class='page_container' data-page=48>

Biểu diễn thuật toán Các cấu trúc ngữ nghĩa


Chương trình chính và chương trình con



<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>


</div>
<span class='text_page_counter'>(49)</span><div class='page_container' data-page=49>

Biểu diễn thuật tốn Cấu trúc đệ quy


Giới thiệu



• Đệ 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ỏ;



</div>
<span class='text_page_counter'>(50)</span><div class='page_container' data-page=50>

Biểu diễn thuật tốn Cấu trúc đệ quy


Giới thiệu



• Đệ 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ỏ;


</div>
<span class='text_page_counter'>(51)</span><div class='page_container' data-page=51>

Biểu diễn thuật toán Cấu trúc đệ quy


Thuật toán săn sư tử trên sa mạc



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.


</div>
<span class='text_page_counter'>(52)</span><div class='page_container' data-page=52>

Biểu diễn thuật toán Cấu trúc đệ quy


Thuật toán săn sư tử trên sa mạc




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.


</div>
<span class='text_page_counter'>(53)</span><div class='page_container' data-page=53>

Biểu diễn thuật toán Cấu trúc đệ quy


Thuật toán săn sư tử trên sa mạc



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.


</div>
<span class='text_page_counter'>(54)</span><div class='page_container' data-page=54>

Biểu diễn thuật toán Cấu trúc đệ quy


Tớnh giai tha



ã <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));


</div>
<span class='text_page_counter'>(55)</span><div class='page_container' data-page=55>

Biểu diễn thuật toán Cấu trúc đệ quy


Tớnh giai tha



ã <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(n − 1));


</div>
<span class='text_page_counter'>(56)</span><div class='page_container' data-page=56>

Biểu diễn thuật toán Cấu trúc đệ quy


Tớnh giai tha



ã <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>


</div>
<span class='text_page_counter'>(57)</span><div class='page_container' data-page=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



</div>
<span class='text_page_counter'>(58)</span><div class='page_container' data-page=58>

Biểu diễn thuật toán Cấu trúc đệ quy


Bài tập về nhà



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>


</div>
<span class='text_page_counter'>(59)</span><div class='page_container' data-page=59>

Biểu diễn thuật toán Cấu trúc đệ quy


Bài tập



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>


</div>
<span class='text_page_counter'>(60)</span><div class='page_container' data-page=60>

Phụ lục Tài liệu tham khảo


Tài liệu tham khảo chính



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>


</div>


<!--links-->

×