Bài giảng Nhập môn lập trình - Chương 5: Giới thiệu về thuật toán - Phạm Minh Tuấn

Nhập môn lập trình  
Trình bày: …; Email: …@fit.hcmus.edu.vn  
Khái niệm về thuật toán  
Chương trình cài đặt thuật toán  
Độ phức tạp của thuật toán  
Các vấn đề tìm hiểu mở rộng kiến thức  
nghề nghiệp  
Thuật ngữ và bài đọc thêm tiếng Anh  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
2
• Máy tính là một công cụ đắc lực hỗ trợ  
con người trong việc tính toán và xử lý.  
• Phát biểu bài toán bằng ngôn ngữ tự  
nhiên không thể là đầu vào cho máy tính.  
• Con người phải mô hình hóa bài toán  
thông qua những cấu trúc dữ liệu, vốn  
được hỗ trợ bởi các ngôn ngữ lập trình, từ  
cơ sở đến nâng cao như mảng, cấu trúc,  
tập hợp, đồ thị, cây, …  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
4
• Trên cơ sở mô hình dữ liệu đã được xây  
dựng, con người phải chỉ ra cho máy tính  
một cách thức để giải quyết bài toán (gọi  
là thuật toán hay giải thuật).  
• Thuật toán có thể hiểu là một qui trình xử  
lý bao gồm các bước cụ thể có thể thực  
hiện để giải quyết một bài toán.  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
5
• Mỗi thuật toán cần đáp ứng 6 tiêu chuẩn:  
– Tính hữu hạn: Thuật toán phải kết thúc thực thi sau một số lượng hữu  
hạn các bước xử lý.  
– Tính xác định: Mỗi bước xử lý phải được mô tả rõ ràng, chính xác,  
không nhập nhằng.  
– Tồn tại dữ liệu đầu vào: Thuật toán phải có dữ liệu đầu vào hợp lệ,  
được mô tả rõ ràng.  
– Tính có kết quả: Thuật toán phải cho ra kết quả đúng trên cơ sở dữ  
liệu đầu vào hợp lệ.  
– Tín hiệu quả: Mỗi bước xử lý phải đơn giản với thời gian thực thi hữu  
hạn. Trong thực tế điều này có nghĩa là phải thực thi trong khoảng thời  
gian có thể chấp nhận được.  
– Tính phổ dụng: Thuật toán có thể áp dụng để xử lý một họ các bài  
toán.  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
6
• Chúng ta có thể sử dụng một trong bốn cách  
sau để mô tả thuật toán:  
– Ngôn ngữ tự nhiên: tiếng Việt, tiếng Anh, …  
– Lưu đồ.  
– Mã giả: thường dựa vào cú pháp của một số  
ngôn ngữ lập trình thông dụng như Pascal,  
C/C++, …  
– Ngôn ngữ lập trình cấp cao.  
• Không nên đi quá sâu vào chi tiết kỹ thuật  
làm mất đi tính trừu tượng của thuật toán.  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
7
• Ví dụ tìm số lớn nhất trong dãy  
– Bước 1: Đặt số lớn nhất hiện tại bằng với số  
nguyên không dấu đầu tiên của dãy.  
– Bước 2: Nếu không còn số nguyên nào kế tiếp  
thì chuyển sang Bước 4.  
– Bước 3: Nếu số nguyên kế tiếp lớn hơn số lớn  
nhất hiện tại thì đặt số lớn nhất hiện tại bằng  
số nguyên kế tiếp này. Quay về Bước 2.  
– Bước 4: Số lớn nhất hiện tại chính là số lớn  
nhất của cả dãy, đây là kết quả của thuật toán.  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
8
• Ví dụ tìm số lớn nhất trong dãy  
int timSoLonNhat(int a[], int n) {  
int i, max;  
for (i = 1; i < n; i++)  
if (max < a[i])  
max = a[i];  
return max;  
}
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
9
• Sử dụng các khối hình sau:  
– Các hình chữ nhật biểu thị các chỉ chị tính  
toán hay xử lý (nhập, xuất, gán, thực hiện  
phép tính).  
– Các hình thoi thể hiện các quyết định rẽ  
nhánh tùy theo biểu thức trong hình thoi có  
giá trị đúng (Đ) hay sai (S).  
– Các mũi tên là hướng đi của luồng điều khiển,  
thể hiện thứ tự thực hiện của các khối xử lý.  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
10  
• Ví dụ tìm số lớn nhất trong dãy  
Nhập dãy a0, a1, …, an-1  
max a0  
i 1  
Đ
i < n?  
S
Đ
S
i i + 1  
max <ai?  
max ai  
Xuất max  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
11  
• Ví dụ tìm số lớn nhất trong dãy  
max a0  
i 1  
while i < n do  
if max < ai then  
max ai  
i i + 1  
endwhile  
write (max)  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
12  
• Tổ chức dữ liệu cho mỗi hàm chương trình  
– Dữ liệu nhập, xuất và tính toán trung gian  
• Tổ chức các hàm cho chương trình  
– Hàm về nhập/xuất, xử lý (cài đặt các thuật toán)  
và chương trình chính, kết nối  
• Chạy thử nghiệm thuật toán  
– Chuẩn bị các bộ dữ liệu kiểm thử (dữ liệu nhập  
và kết quả mong đợi)  
– Chạy thử, ghi nhận kết quả và đánh giá đúng sai  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
14  
• Đối với một vấn đề đặt ra có thể tồn tại  
rất nhiều thuật toán xử lý.  
• Ngoài việc phải chỉ ra rằng một thuật toán  
có tính đúng đắn ta còn phải biết thuật  
toán nào tốt hơn khi giải quyết cùng một  
vấn đề (theo nghĩa chạy nhanh hơn hay  
độ phức tạp thấp hơn).  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
16  
• Trong cùng một điều kiện hoạt động (dữ  
liệu đầu vào, tốc độ phần cứng, …) thì  
thuật toán nào cho kết quả sớm nhất sẽ là  
thuật toán tốt nhất.  
• Tuy nhiên, để đảm bảo điều kiện hoạt  
động đồng nhất là rất khó vì trong hệ  
thống đa nhiệm thì CPU không dành  
100% công suất để phục vụ riêng cho  
chương trình đang chạy thử nghiệm.  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
17  
• Không phải bất cứ nhóm thuật toán nào  
cũng có thể được cân đo, đong đếm một  
cách tường minh.  
• Ví dụ tìm số Fibonacci thứ n, biết  
F0 = F1 = 1  
Fn = Fn-1 + Fn-2 nếu n ≥ 2  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
18  
• Thuật toán thứ nhất  
Mã giả  
Cài đặt bằng C/C++  
1
2
3
4
Computing: Fibonacci(n)  
if n <= 1 then  
Result = n  
int Fibo1(int n) {  
int a, b, c, k;  
if (n <= 1)  
return n;  
else  
5
6
7
8
a = 0, b = 1  
for each k = 2, …, n do  
c = a + b;  
a = 0; b = 1;  
for (k = 2; k <= n; k++) {  
c = a + b;  
a = b;  
a = b  
9
10  
11  
b = c  
endfor  
Result = c  
b = c;  
}
return c;  
12 endif  
}
13 write (Result)  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
19  
• Thuật toán thứ hai  
Mã giả  
Cài đặt bằng C/C++  
1
2
3
4
5
6
7
8
9
Computing: Fibonacci(n)  
if n <= 1 then  
Result = n  
int Fibo2(int n) {  
if (n <= 1)  
return n;  
else  
A = Fibonacci(n – 2)  
B = Fibonacci(n – 1)  
Result = A + B  
endif  
int A = Fibo2(n – 1);  
int B = Fibo2(n – 2);  
return A + B;  
}
write (Result)  
11/10/2012  
Khoa CNTT - ĐH Khoa học tự nhiên  
20  
Tải về để xem bản đầy đủ
pdf 29 trang baolam 24600 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Nhập môn lập trình - Chương 5: Giới thiệu về thuật toán - Phạm Minh Tuấn", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_nhap_mon_lap_trinh_chuong_5_gioi_thieu_ve_thuat_to.pdf