SlideShare uma empresa Scribd logo
1 de 39
Baixar para ler offline
IT001 – NHẬP MÔN LẬP TRÌNH
BÀI 2 – THUẬT TOÁN
Yêu cầu buổi học
Hiểu được khái niệm cơ bản như bài toán, thuật
toán, các tiêu chuẩn của thuật toán, các phương pháp
biểu diễn thuật toán
Áp dụng lưu đồ (sơ đồ khối) hay mã giả để mô tả
một số thuật toán đơn giản
Diễn tả quá trình thực hiện thuật toán trên bộ dữ
liệu cụ thể
2
Nội dung
1. Khái niệm về vấn đề/bài toán.
2. Các bước giải quyết vấn đề/bài toán bằng máy tính
3. Khái niệm về thuật toán
4. Sự cần thiết của thuật toán
5. Các tiêu chuẩn của thuật toán
6. Các phương pháp biểu diễn thuật toán.
7. Một số ví dụ về thuật toán
8. Lập bảng theo dõi hoạt động của một thuật toán
9. Độ phức tạp thuật toán
3
1. Khái niệm về vấn đề/bài toán
Bài toán/Vấn đề
• Vấn đề có nghĩa rộng hơn bài toán
• Bài toán là một loại vấn đề mà để giải quyết phải liên quan ít nhiều đến
tính toán: bài toán trong vật lý, hóa học, xây dựng, kinh tế
Hai loại vấn đề
• Theorema: là vấn đề cần được khẳng định tính đúng sai
• Problema: là vấn đề cần tìm được giải pháp để đạt được một mục tiêu
xác định từ những điều kiện ban đầu nào đó
4
1. Khái niệm về vấn đề/bài toán
Biểu diễn vấn đề-bài toán
• A → B
• A: Giả thiết, điều kiện ban đầu
• B: Kết luận, mục tiêu cần đạt
Giải quyết vấn đề-bài toán
• Từ A dùng một số hữu hạn các bước suy luận có lý hoặc hành động
thích hợp để đạt được B
• Trong Tin học, A là đầu vào, B là đầu ra
5
2. Các bước giải quyết vấn đề/bài toán bằng máy tính
• Máy tính không thể dùng để giải quyết các vấn đề liên quan
đến hành động vật lý hoặc biểu thị cảm xúc
• Máy tính chỉ làm được những gì mà nó được bảo phải làm.
Máy tính không thông minh, nó không thể tự phân tích vấn
đề và đưa ra giải pháp.
• Lập trình viên là người phân tích vấn đề, tạo ra các chỉ dẫn
để giải quyết vấn đề (chương trình), và máy tính sẽ thực hiện
các chỉ dẫn đó
• Phương án giải quyết bài toán được gọi là thuật toán/giải
thuật trong tính toán
6
3. Khái niệm về thuật toán
Giả sử cần đi từ bến xe miền Tây về Kí túc xá đại học quốc
gia.
1. Thuật toán đi taxi
1.1. Mở điện thoại gọi taxi
1.2. Lên xe taxi
1.3. Nói cho tài xế địa chỉ cần tới
2. Thuật toán đi xe bus
2.1. Đi bộ đến trạm xe bus
2.2. Lên xe bus số 10
2.3. Dừng ở trạm ngã 3 621
2.4. Đi bộ đến kí túc xá
7
Thuật toán
nào tốt
hơn?
- Giá cả
- Thời gian
3. Khái niệm về thuật toán
Thuật toán trong khoa học máy tính
1. Bắt đầu với các giá trị đầu vào
2. Thực hiện các bước tính toán
3. Dừng khi tìm được câu trả lời (Đầu ra)
Nếu như 1 vấn đề nào đó có sẵn thuật toán để giải thì ta sẽ tiết kiệm rất
nhiều thời gian để giải quyết vấn đề đó.
Ngoài ra lựa chọn thuật toán phù hợp còn giúp chương trình chạy
nhanh hơn
8
3. Khái niệm về thuật toán
9
???
Dijkstra's algorithm
https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm
3. Khái niệm về thuật toán
• Thuật toán - Algorithm
• Là tập hợp (dãy) hữu hạn các chỉ thị (hành động) được định nghĩa rõ
ràng nhằm giải quyết một bài toán cụ thể nào đó.
• Thuật toán để giải một bài toán là một dãy hữu hạn các thao tác được
sắp xếp theo một trình tự xác định sao cho sau khi thực hiện dãy thao
tác đó, từ Input của bài toán, ta nhận được Output cần tìm.
10
https://en.wikipedia.org/wiki/Algorithm
3. Khái niệm về thuật toán
Có thể tạo được thuật toán mới không?
Ví dụ: Trí tuệ nhân tạo: Deep learing
- Tự tô màu ảnh trắng đen
- Tự động them âm thanh vào video
- Tự động dịch
- Nhận diện đối tượng trong ảnh
- Viết chữ (giống như chữ viết tay của con người)
- Tự viết tiểu thuyết
- …
11
http://machinelearningmastery.com/inspirational-applications-deep-learning/
4. Sự cần thiết của thuật toán
Tại sao sử dụng máy tính để xử lý dữ liệu?
 Nhanh hơn.
 Nhiều hơn.
 Giải quyết những bài toán mà con người không thể hoàn thành được.
Làm sao đạt được những mục tiêu đó?
 Nhờ vào sự tiến bộ của kỹ thuật: tăng cấu hình máy  chi phí cao 
 Nhờ vào các thuật toán hiệu quả: thông minh và chi phí thấp 
“Một máy tính siêu hạng vẫn không thể cứu vãn một
thuật toán tồi!”
12
5. Các tiêu chuẩn của thuật toán
Tính chính xác/đúng:
• Quá trình tính toán hay các thao tác máy tính thực hiện là chính xác.
• Khi kết thúc, giải thuật phải cung cấp kết quả đúng đắn.
Tính phổ dụng/tổng quát:
• Có thể áp dụng cho một lớp các bài toán có đầu vào tương tự nhau.
Tính kết thúc/hữu hạn:
• Thuật toán phải dừng sau một số bước hữu hạn.
Tính rõ ràng/hiệu quả:
• Các câu lệnh minh bạch được sắp xếp theo thứ tự nhất định.
Tính khách quan/xác định:
• Được viết bởi nhiều người trên máy tính nhưng kết quả phải như nhau.
• Trong cùng một điều kiện hai bộ xử lý cùng thực hiện, thuật toán phải
cho những kết quả giống nhau.
13
6. Các phương pháp biểu diễn thuật toán.
a. Dùng ngôn ngữ tự nhiên.
b. Dùng lưu đồ - sơ đồ khối (flowchart)
c. Dùng mã giả (pseudocode)
d. So sánh ưu nhược điểm của các phương pháp
14
6.a) Dùng ngôn ngữ tự nhiên
• Sử dụng ngôn ngữ tự nhiên để mô tả thuật toán
• Không yêu cầu phải nắm các quy tắc. Gần như không có một
quy tắc cố định nào trong việc thể hiện thuật toán bằng ngôn
ngữ tự nhiên.
• Ưu điểm:
• Đơn giản, không yêu cầu phải có kiến thức nền tảng
• Nhược điểm:
• Thường dài dòng
• Không thể hiện rõ cấu trúc của thuật toán
• Đôi lúc gây hiểu lầm hoặc khó hiểu cho người đọc
15
6.a) Dùng ngôn ngữ tự nhiên
• VD: Giải phương trình ax+b=0
16
1. Nhập 2 số thực a và b.
2. Nếu a = 0 thì
2.1. Nếu b = 0 thì
2.1.1. Phương trình vô số nghiệm
2.1.2. Kết thúc thuật toán.
2.2. Ngược lại
2.2.1. Phương trình vô nghiệm.
2.2.2. Kết thúc thuật toán.
3. Ngược lại
3.1. Phương trình có nghiệm.
3.2. Giá trị của nghiệm đó là x = -b/a
3.3. Kết thúc thuật toán.
Đầu vào: a, b thuộc R
Đầu ra: nghiệm phương trình ax + b = 0
6.b) Dùng lưu đồ - sơ đồ khối
• Là một công cụ trực quan để diễn đạt các thuật toán.
• Biểu diễn thuật toán bằng lưu đồ sẽ giúp người đọc theo dõi
được sự phân cấp các trường hợp và quá trình xử lý của
thuật toán.
• Phương pháp lưu đồ thường được dùng trong những thuật
toán có tính rắc rối, khó theo dõi được quá trình xử lý.
17
6.b) Dùng lưu đồ - sơ đồ khối
18
Khối giới hạn
Chỉ thị bắt đầu và kết thúc.
Khối vào ra (input/output)
Nhập/Xuất dữ liệu.
Khối lựa chọn (decision)
Tùy điều kiện sẽ rẽ nhánh.
Khối thao tác (process)
Ghi thao tác cần thực hiện.
Đường đi (route)
Chỉ hướng thao tác tiếp theo.
6.b) Dùng lưu đồ - sơ đồ khối
• Cấu trúc tuần tự: Các bước được thực hiện theo 1 trình tự
tuyến tính.
Ví dụ: Công việc 1, Công việc 2, Công việc 3
19
Công việc 1
Công việc 2
Công việc 3
6.b) Dùng lưu đồ - sơ đồ khối
• Cấu trúc rẻ nhánh:
• Nếu điều kiện đúng  Thực hiện công việc 1
• Nếu điều kiện sai  Thực hiện công việc 2
20
Công việc 1
Điều kiện
Đúng
Công việc 2
Điều kiện
Đúng Sai
Công việc 1
Sai
6.b) Dùng lưu đồ - sơ đồ khối
• Cấu trúc vòng lặp:
21
Công việc 2
Điều kiện
Đúng
Sai
Công việc 1
Công việc 1
Điều kiện
Đúng
Công việc 2
Sai
6.b) Dùng lưu đồ - sơ đồ khối
Giải phương trình
𝑎𝑥 + 𝑏 = 0
22
Bắt đầu
Nhập a
Nhập b
𝑎 = 0
Tính 𝑥 =
−𝑏
𝑎
Xuất
“VN”
𝑏 = 0
Xuất
“VSN”
Kết thúc
Xuất x
SaiĐúng
Đúng Sai
6.c) Dùng mã giả
• Ngôn ngữ tựa ngôn ngữ lập trình:
 Dùng cấu trúc chuẩn hóa, như C, C++.
 Dùng các ký hiệu toán học, biến, hàm.
• Ưu điểm:
 Đỡ cồng kềnh hơn lưu đồ khối.
• Nhược điểm:
 Không trực quan bằng lưu đồ khối.
23
6.c) Dùng mã giả
• VD: Giải phương trình 𝑎𝑥 + 𝑏 = 0
24
If a = 0 Then
Begin
If b = 0 Then
Xuất “Phương trình vô số nghiệm”
Else
Xuất “Phương trình vô nghiệm”
End
Else
Xuất “Phương trình có nghiệm x = -b/a”
Đầu vào: a, b thuộc R
Đầu ra: nghiệm phương trình 𝒂𝒙 + 𝒃 = 𝟎
7. Một số ví dụ về thuật toán
• Ví dụ 1: Vẽ lưu đồ thuật toán Kiểm tra tính chẵn lẻ của một
số nguyên
• Ví dụ 2: Vẽ lưu đồ thuật toán Tính tổng các số nguyên dương
lẻ từ 1 đến n
• Ví dụ 3: Vẽ lưu đồ thuật toán Tìm nghiệm của phương trình
bậc hai một ẩn
• Ví dụ 4: Vẽ lưu đồ thuật toán Liệt kê tất cả ước số của số
nguyên dương n
25
7. Một số ví dụ về thuật toán
• Ví dụ 1: Vẽ lưu đồ thuật toán Kiểm tra tính chẵn lẻ của một
số nguyên
26
Bắt đầu
Nhập n
n  2=0
Xuất
“n chẳn”
Kết thúc
SaiĐúng
Xuất
“n lẻ”
7. Một số ví dụ về thuật toán
Ví dụ 2: Vẽ lưu đồ thuật
toán tính tổng các số
nguyên dương lẻ từ 1
đến n
27
Kết thúc
Bắt đầu
Đọc n
i ≤ n
Sai
Đúng
Xuất
“S”
S=0
i=1
S=S+i
i  2=0
i=i+1
Sai
Đúng
Cách 1: 𝒊 = 𝒊 + 𝟏
7. Một số ví dụ về thuật toán
Ví dụ 2: Vẽ lưu đồ thuật
toán tính tổng các số
nguyên dương lẻ từ 1
đến n
28
Cách 2: 𝒊 = 𝒊 + 𝟐
Bắt đầu
Đọc n
i ≤ n
Kết thúc
Sai
Đúng
Xuất
“S”
S=0
i=1
S=S+i
i=i+2
7. Một số ví dụ về thuật toán
29
• Giải pt:
𝑎𝑥2 + 𝑏𝑥 + 𝑐 = 0
Bắt đầu
Đọc a,b,c
a = 0
x1=(-b-sqrt(Delta))/(2a)
x1=(-b+sqrt(Delta))/(2a)
Xuất nghiệm
kép x
Delta < 0
Xuất
“VSN”
Xuất Pt có 2
nghiệm x1,cx2
S
GPT: bx+c=0
Đ
Delta=b*b-4*a*c
Kết thúc
Delta = 0
x = -b/(2a)
Đ
S
Đ
S
7. Một số ví dụ về thuật toán
• GPT: bx+c=0
30
b = 0
Tính
x = -c/b
Xuất
“VN”
c = 0
Xuất
“VSN”
Kết thúc
Xuất x
SĐ
Đ S
7. Một số ví dụ về thuật toán
31
Bắt đầu
Đọc n
i ≤ n
Kết thúc
S
Đ
i=1
i=i+1
ni=0
Đ
Xuất i
S
Ví dụ 4: Vẽ lưu đồ
thuật toán liệt kê tất
cả ước số của số
nguyên dương n
8. Lập bảng trên giấy để theo dõi hoạt động của một 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ả, đánh giá đúng sai
32
Bài tập
1. Kiểm tra một số nguyên n là số nguyên tố không?
Nếu n < 2 thì n không phải là số nguyên tố
Nếu n = 2 thì n là số nguyên tố
Nếu n > 2: Kiểm tra từ 2 đến 𝑛:
Nếu không có số nào chia hết cho n thì
n là số nguyên tố
Ngược lại
n không phải là số nguyên tố
2. Tính giá trị biểu thức: 𝑆 = 1 + 2 + ⋯ + 𝑛
3. Nhập vào số nguyên dương n. Tính tổng các chữ số của số
đó.
4. Nhập vào 3 số. Tìm số lớn nhất trong 3 số
33
9. Độ phức tạp thuật toán
1. Tính hiệu quả của giải thuật
Để giải một bài toán có thể có nhiều giải thuật khác nhau.
Cần lựa chọn một giải thuật tốt theo hai tiêu chuẩn:
• Đơn giản, dễ hiểu, dễ lâp trình.
• Thời gian thực hiện nhanh, dùng ít tài nguyên máy tính.
Tiêu chuẩn 2 là tính hiệu quả của giải thuật. Đánh giá độ phức tạp của giải
thuật là đánh giá thời gian thực hiện giải thuật đó.
34
9. Độ phức tạp thuật toán
2. Đánh giá thời gian thực hiện giải thuật
Thời gian thực hiện giải thuật phụ thuộc:
Ngôn ngữ lập trình
Chương trình dịch
Hệ điều hành
Phần cứng của máy
Cần có cách đánh giá khác sao cho:
Không phụ thuộc máy, ngôn ngữ lập trình, chương trình dịch.
Không cần triển khai chương trình thực hiện giải thuật.
Chỉ dựa vào phân tích bản thân giải thuật.
 Tổng số phép toán sơ cấp cần thiết để thực hiện giải thuật
35
9. Độ phức tạp thuật toán
• Đánh giá giá thuật toán theo hướng tiệm xấp xỉ tiệm cận qua
các khái niệm O().
• Ưu điểm: Ít phụ thuộc môi trường cũng như phần cứng hơn.
• Nhược điểm: Phức tạp.
• Các trường hợp độ phức tạp quan tâm:
• Trường hợp tốt nhất (phân tích chính xác)
• Trường hợp xấu nhất (phân tích chính xác)
• Trường hợp trung bình (mang tích dự đoán)
36
9. Độ phức tạp thuật toán
• Sự Phân Lớp Theo Độ Phức Tạp Của Thuật Toán
• Sử dụng ký hiệu BigO
Độ phức tạp tăng dần
𝑂() Độ phức tạp
𝑂(1) Hằng số
𝑂(log 𝑛) Lôgarit
𝑂(𝑛) Tuyến tính
𝑂(𝑛 ∗ log 𝑛) n*logn
𝑂(𝑛 𝑏) Đa thức
𝑂(𝑛!) Giai thừa
37
Bài tập về nhà
38
Vẽ sơ đồ thuật toán của các bài toán sau:
1. Tìm ước chung lớn nhất của hai số a và b.
2. Giải bất phương trình 𝑎𝑥 + 𝑏 > = 0
3. Nhập 3 số a,b,c. Kiểm tra 3 số đó tạo thành 3 cạnh của
tam giác hay không?
4. Nhập 3 cạnh a, b, c. Cho biết tam giác tương ứng là tam
giác gì?
5. Tính: 𝑆 =
1
2
+
1
4
+ … +
1
2𝑛
6. Tính: 𝑆 = 1 ∗ 1 + 1 ∗ 2 + 1 ∗ 3 + … + 1 ∗ 2 ∗ ⋯ ∗ 𝑛
7. Xây dựng thuật toán cho bài toán tìm số Fibonacci 𝐹(𝑛)
8. Tìm giá trị lớn nhất của một dãy số nguyên có 𝑛 số
9. Tìm tất cả các ước số lẻ của một số nguyên dương 𝑛
10.Kiểm tra tính hoàn hảo của số nguyên dương 𝑛
Tóm tắt
1. Khái niệm về vấn đề/bài toán.
2. Các bước giải quyết vấn đề/bài
toán bằng máy tính
3. Khái niệm về thuật toán
4. Sự cần thiết của thuật toán
5. Các tiêu chuẩn của thuật toán
6. Các phương pháp biểu diễn thuật
toán.
7. Một số ví dụ về thuật toán
8. Lập bảng theo dõi hoạt động của
một thuật toán
9. Độ phức tạp thuật toán
39

Mais conteúdo relacionado

Mais procurados

Bài 6 Giải bài toán trên máy tính
Bài 6 Giải bài toán trên máy tínhBài 6 Giải bài toán trên máy tính
Bài 6 Giải bài toán trên máy tính
Hòa Hoàng
 
Chau thihuynh c1_bai4_tiet2_tin10
Chau thihuynh c1_bai4_tiet2_tin10Chau thihuynh c1_bai4_tiet2_tin10
Chau thihuynh c1_bai4_tiet2_tin10
Tin5VungTau
 
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢNTÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN
Trần Nguyên
 
Kichbandayhoctinhoc10 bai4-140615131551-phpapp01-140618033132-phpapp01
Kichbandayhoctinhoc10 bai4-140615131551-phpapp01-140618033132-phpapp01Kichbandayhoctinhoc10 bai4-140615131551-phpapp01-140618033132-phpapp01
Kichbandayhoctinhoc10 bai4-140615131551-phpapp01-140618033132-phpapp01
Lã Văn Hải
 
[Share] tổng hợp các bài tập c căn bản
[Share] tổng hợp các bài tập c căn bản[Share] tổng hợp các bài tập c căn bản
[Share] tổng hợp các bài tập c căn bản
Khong Biet Khong Quen
 
Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)
Loc Tran
 
Ứng dụng excel_de_giai_qhtt
Ứng dụng excel_de_giai_qhttỨng dụng excel_de_giai_qhtt
Ứng dụng excel_de_giai_qhtt
luxubu2075
 

Mais procurados (17)

Bài 6 Giải bài toán trên máy tính
Bài 6 Giải bài toán trên máy tínhBài 6 Giải bài toán trên máy tính
Bài 6 Giải bài toán trên máy tính
 
Ctdl 01 t_quan
Ctdl 01 t_quanCtdl 01 t_quan
Ctdl 01 t_quan
 
Chau thihuynh c1_bai4_tiet2_tin10
Chau thihuynh c1_bai4_tiet2_tin10Chau thihuynh c1_bai4_tiet2_tin10
Chau thihuynh c1_bai4_tiet2_tin10
 
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢNTÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN
 
Bai4 c1 10
Bai4 c1 10Bai4 c1 10
Bai4 c1 10
 
Thuat Toan 2
Thuat Toan 2Thuat Toan 2
Thuat Toan 2
 
Bai4_Baitoanvathuattoan
Bai4_BaitoanvathuattoanBai4_Baitoanvathuattoan
Bai4_Baitoanvathuattoan
 
Kichbandayhoctinhoc10 bai4-140615131551-phpapp01-140618033132-phpapp01
Kichbandayhoctinhoc10 bai4-140615131551-phpapp01-140618033132-phpapp01Kichbandayhoctinhoc10 bai4-140615131551-phpapp01-140618033132-phpapp01
Kichbandayhoctinhoc10 bai4-140615131551-phpapp01-140618033132-phpapp01
 
Giai phuong trinh bang excell
Giai phuong trinh bang excellGiai phuong trinh bang excell
Giai phuong trinh bang excell
 
Thdc 06
Thdc 06Thdc 06
Thdc 06
 
[Share] tổng hợp các bài tập c căn bản
[Share] tổng hợp các bài tập c căn bản[Share] tổng hợp các bài tập c căn bản
[Share] tổng hợp các bài tập c căn bản
 
1. tai lieu tap huan tt22 mon toan
1. tai lieu tap huan tt22   mon toan1. tai lieu tap huan tt22   mon toan
1. tai lieu tap huan tt22 mon toan
 
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPTBài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
 
Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)
 
Đề tài: Tìm nghiệm của một bài toán bằng cách xem xét tất cả các phương án có...
Đề tài: Tìm nghiệm của một bài toán bằng cách xem xét tất cả các phương án có...Đề tài: Tìm nghiệm của một bài toán bằng cách xem xét tất cả các phương án có...
Đề tài: Tìm nghiệm của một bài toán bằng cách xem xét tất cả các phương án có...
 
Viet do an
Viet do anViet do an
Viet do an
 
Ứng dụng excel_de_giai_qhtt
Ứng dụng excel_de_giai_qhttỨng dụng excel_de_giai_qhtt
Ứng dụng excel_de_giai_qhtt
 

Semelhante a Emailing buoi 2 thuat toan

Giaotrinhbaitapkythuatlaptrinh
GiaotrinhbaitapkythuatlaptrinhGiaotrinhbaitapkythuatlaptrinh
Giaotrinhbaitapkythuatlaptrinh
Hồ Lợi
 
Chuong 1. tong quan
Chuong 1. tong quanChuong 1. tong quan
Chuong 1. tong quan
Vũ Nam
 
300 BÀI CODE THIẾU NIÊN.pdf
300 BÀI CODE THIẾU NIÊN.pdf300 BÀI CODE THIẾU NIÊN.pdf
300 BÀI CODE THIẾU NIÊN.pdf
HuyPhc9
 

Semelhante a Emailing buoi 2 thuat toan (20)

chương1.pdf
chương1.pdfchương1.pdf
chương1.pdf
 
CSLTNNL01.pdf
CSLTNNL01.pdfCSLTNNL01.pdf
CSLTNNL01.pdf
 
Giaotrinhbaitapkythuatlaptrinh
GiaotrinhbaitapkythuatlaptrinhGiaotrinhbaitapkythuatlaptrinh
Giaotrinhbaitapkythuatlaptrinh
 
Đề tài: Thiết kế và phân tích thuật toán, HAY
Đề tài: Thiết kế và phân tích thuật toán, HAYĐề tài: Thiết kế và phân tích thuật toán, HAY
Đề tài: Thiết kế và phân tích thuật toán, HAY
 
Giao an_bai4_lop10_baitoanvathuattoan
Giao an_bai4_lop10_baitoanvathuattoanGiao an_bai4_lop10_baitoanvathuattoan
Giao an_bai4_lop10_baitoanvathuattoan
 
Ll3 online
Ll3 onlineLl3 online
Ll3 online
 
Chuong 1. tong quan
Chuong 1. tong quanChuong 1. tong quan
Chuong 1. tong quan
 
300 BÀI CODE THIẾU NIÊN.pdf
300 BÀI CODE THIẾU NIÊN.pdf300 BÀI CODE THIẾU NIÊN.pdf
300 BÀI CODE THIẾU NIÊN.pdf
 
a
aa
a
 
De kiem tra 1 tiet tin 7
De kiem tra 1 tiet tin 7De kiem tra 1 tiet tin 7
De kiem tra 1 tiet tin 7
 
Bài 6
Bài 6Bài 6
Bài 6
 
CTDL&GT_01
CTDL&GT_01CTDL&GT_01
CTDL&GT_01
 
Bai 6 933
Bai 6 933Bai 6 933
Bai 6 933
 
Bai 6 933
Bai 6 933Bai 6 933
Bai 6 933
 
a
aa
a
 
Cơ sở mật mã học PTIT
Cơ sở mật mã học PTITCơ sở mật mã học PTIT
Cơ sở mật mã học PTIT
 
Gt co so mat ma hoc
Gt co so mat ma hocGt co so mat ma hoc
Gt co so mat ma hoc
 
Ứng dụng hình học để xác định một miền chứa điểm cho trước
Ứng dụng hình học để xác định một miền chứa điểm cho trướcỨng dụng hình học để xác định một miền chứa điểm cho trước
Ứng dụng hình học để xác định một miền chứa điểm cho trước
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
 
Ctdlgt
CtdlgtCtdlgt
Ctdlgt
 

Mais de Diễm Phạm Nguyễn Mỹ (7)

02 Point Operations - VN.pdf
02 Point Operations - VN.pdf02 Point Operations - VN.pdf
02 Point Operations - VN.pdf
 
04 DFT.pdf
04 DFT.pdf04 DFT.pdf
04 DFT.pdf
 
08 Video Processing - VN.pdf
08 Video Processing - VN.pdf08 Video Processing - VN.pdf
08 Video Processing - VN.pdf
 
05 Edge Detection - VN.pdf
05 Edge Detection - VN.pdf05 Edge Detection - VN.pdf
05 Edge Detection - VN.pdf
 
01 Digital Image and Video Procesing - VN.pdf
01 Digital Image and Video Procesing - VN.pdf01 Digital Image and Video Procesing - VN.pdf
01 Digital Image and Video Procesing - VN.pdf
 
03 Spatial Filter - VN.pdf
03 Spatial Filter - VN.pdf03 Spatial Filter - VN.pdf
03 Spatial Filter - VN.pdf
 
07 Resampling - VN.pdf
07 Resampling - VN.pdf07 Resampling - VN.pdf
07 Resampling - VN.pdf
 

Emailing buoi 2 thuat toan

  • 1. IT001 – NHẬP MÔN LẬP TRÌNH BÀI 2 – THUẬT TOÁN
  • 2. Yêu cầu buổi học Hiểu được khái niệm cơ bản như bài toán, thuật toán, các tiêu chuẩn của thuật toán, các phương pháp biểu diễn thuật toán Áp dụng lưu đồ (sơ đồ khối) hay mã giả để mô tả một số thuật toán đơn giản Diễn tả quá trình thực hiện thuật toán trên bộ dữ liệu cụ thể 2
  • 3. Nội dung 1. Khái niệm về vấn đề/bài toán. 2. Các bước giải quyết vấn đề/bài toán bằng máy tính 3. Khái niệm về thuật toán 4. Sự cần thiết của thuật toán 5. Các tiêu chuẩn của thuật toán 6. Các phương pháp biểu diễn thuật toán. 7. Một số ví dụ về thuật toán 8. Lập bảng theo dõi hoạt động của một thuật toán 9. Độ phức tạp thuật toán 3
  • 4. 1. Khái niệm về vấn đề/bài toán Bài toán/Vấn đề • Vấn đề có nghĩa rộng hơn bài toán • Bài toán là một loại vấn đề mà để giải quyết phải liên quan ít nhiều đến tính toán: bài toán trong vật lý, hóa học, xây dựng, kinh tế Hai loại vấn đề • Theorema: là vấn đề cần được khẳng định tính đúng sai • Problema: là vấn đề cần tìm được giải pháp để đạt được một mục tiêu xác định từ những điều kiện ban đầu nào đó 4
  • 5. 1. Khái niệm về vấn đề/bài toán Biểu diễn vấn đề-bài toán • A → B • A: Giả thiết, điều kiện ban đầu • B: Kết luận, mục tiêu cần đạt Giải quyết vấn đề-bài toán • Từ A dùng một số hữu hạn các bước suy luận có lý hoặc hành động thích hợp để đạt được B • Trong Tin học, A là đầu vào, B là đầu ra 5
  • 6. 2. Các bước giải quyết vấn đề/bài toán bằng máy tính • Máy tính không thể dùng để giải quyết các vấn đề liên quan đến hành động vật lý hoặc biểu thị cảm xúc • Máy tính chỉ làm được những gì mà nó được bảo phải làm. Máy tính không thông minh, nó không thể tự phân tích vấn đề và đưa ra giải pháp. • Lập trình viên là người phân tích vấn đề, tạo ra các chỉ dẫn để giải quyết vấn đề (chương trình), và máy tính sẽ thực hiện các chỉ dẫn đó • Phương án giải quyết bài toán được gọi là thuật toán/giải thuật trong tính toán 6
  • 7. 3. Khái niệm về thuật toán Giả sử cần đi từ bến xe miền Tây về Kí túc xá đại học quốc gia. 1. Thuật toán đi taxi 1.1. Mở điện thoại gọi taxi 1.2. Lên xe taxi 1.3. Nói cho tài xế địa chỉ cần tới 2. Thuật toán đi xe bus 2.1. Đi bộ đến trạm xe bus 2.2. Lên xe bus số 10 2.3. Dừng ở trạm ngã 3 621 2.4. Đi bộ đến kí túc xá 7 Thuật toán nào tốt hơn? - Giá cả - Thời gian
  • 8. 3. Khái niệm về thuật toán Thuật toán trong khoa học máy tính 1. Bắt đầu với các giá trị đầu vào 2. Thực hiện các bước tính toán 3. Dừng khi tìm được câu trả lời (Đầu ra) Nếu như 1 vấn đề nào đó có sẵn thuật toán để giải thì ta sẽ tiết kiệm rất nhiều thời gian để giải quyết vấn đề đó. Ngoài ra lựa chọn thuật toán phù hợp còn giúp chương trình chạy nhanh hơn 8
  • 9. 3. Khái niệm về thuật toán 9 ??? Dijkstra's algorithm https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm
  • 10. 3. Khái niệm về thuật toán • Thuật toán - Algorithm • Là tập hợp (dãy) hữu hạn các chỉ thị (hành động) được định nghĩa rõ ràng nhằm giải quyết một bài toán cụ thể nào đó. • Thuật toán để giải một bài toán là một dãy hữu hạn các thao tác được sắp xếp theo một trình tự xác định sao cho sau khi thực hiện dãy thao tác đó, từ Input của bài toán, ta nhận được Output cần tìm. 10 https://en.wikipedia.org/wiki/Algorithm
  • 11. 3. Khái niệm về thuật toán Có thể tạo được thuật toán mới không? Ví dụ: Trí tuệ nhân tạo: Deep learing - Tự tô màu ảnh trắng đen - Tự động them âm thanh vào video - Tự động dịch - Nhận diện đối tượng trong ảnh - Viết chữ (giống như chữ viết tay của con người) - Tự viết tiểu thuyết - … 11 http://machinelearningmastery.com/inspirational-applications-deep-learning/
  • 12. 4. Sự cần thiết của thuật toán Tại sao sử dụng máy tính để xử lý dữ liệu?  Nhanh hơn.  Nhiều hơn.  Giải quyết những bài toán mà con người không thể hoàn thành được. Làm sao đạt được những mục tiêu đó?  Nhờ vào sự tiến bộ của kỹ thuật: tăng cấu hình máy  chi phí cao   Nhờ vào các thuật toán hiệu quả: thông minh và chi phí thấp  “Một máy tính siêu hạng vẫn không thể cứu vãn một thuật toán tồi!” 12
  • 13. 5. Các tiêu chuẩn của thuật toán Tính chính xác/đúng: • Quá trình tính toán hay các thao tác máy tính thực hiện là chính xác. • Khi kết thúc, giải thuật phải cung cấp kết quả đúng đắn. Tính phổ dụng/tổng quát: • Có thể áp dụng cho một lớp các bài toán có đầu vào tương tự nhau. Tính kết thúc/hữu hạn: • Thuật toán phải dừng sau một số bước hữu hạn. Tính rõ ràng/hiệu quả: • Các câu lệnh minh bạch được sắp xếp theo thứ tự nhất định. Tính khách quan/xác định: • Được viết bởi nhiều người trên máy tính nhưng kết quả phải như nhau. • Trong cùng một điều kiện hai bộ xử lý cùng thực hiện, thuật toán phải cho những kết quả giống nhau. 13
  • 14. 6. Các phương pháp biểu diễn thuật toán. a. Dùng ngôn ngữ tự nhiên. b. Dùng lưu đồ - sơ đồ khối (flowchart) c. Dùng mã giả (pseudocode) d. So sánh ưu nhược điểm của các phương pháp 14
  • 15. 6.a) Dùng ngôn ngữ tự nhiên • Sử dụng ngôn ngữ tự nhiên để mô tả thuật toán • Không yêu cầu phải nắm các quy tắc. Gần như không có một quy tắc cố định nào trong việc thể hiện thuật toán bằng ngôn ngữ tự nhiên. • Ưu điểm: • Đơn giản, không yêu cầu phải có kiến thức nền tảng • Nhược điểm: • Thường dài dòng • Không thể hiện rõ cấu trúc của thuật toán • Đôi lúc gây hiểu lầm hoặc khó hiểu cho người đọc 15
  • 16. 6.a) Dùng ngôn ngữ tự nhiên • VD: Giải phương trình ax+b=0 16 1. Nhập 2 số thực a và b. 2. Nếu a = 0 thì 2.1. Nếu b = 0 thì 2.1.1. Phương trình vô số nghiệm 2.1.2. Kết thúc thuật toán. 2.2. Ngược lại 2.2.1. Phương trình vô nghiệm. 2.2.2. Kết thúc thuật toán. 3. Ngược lại 3.1. Phương trình có nghiệm. 3.2. Giá trị của nghiệm đó là x = -b/a 3.3. Kết thúc thuật toán. Đầu vào: a, b thuộc R Đầu ra: nghiệm phương trình ax + b = 0
  • 17. 6.b) Dùng lưu đồ - sơ đồ khối • Là một công cụ trực quan để diễn đạt các thuật toán. • Biểu diễn thuật toán bằng lưu đồ sẽ giúp người đọc theo dõi được sự phân cấp các trường hợp và quá trình xử lý của thuật toán. • Phương pháp lưu đồ thường được dùng trong những thuật toán có tính rắc rối, khó theo dõi được quá trình xử lý. 17
  • 18. 6.b) Dùng lưu đồ - sơ đồ khối 18 Khối giới hạn Chỉ thị bắt đầu và kết thúc. Khối vào ra (input/output) Nhập/Xuất dữ liệu. Khối lựa chọn (decision) Tùy điều kiện sẽ rẽ nhánh. Khối thao tác (process) Ghi thao tác cần thực hiện. Đường đi (route) Chỉ hướng thao tác tiếp theo.
  • 19. 6.b) Dùng lưu đồ - sơ đồ khối • Cấu trúc tuần tự: Các bước được thực hiện theo 1 trình tự tuyến tính. Ví dụ: Công việc 1, Công việc 2, Công việc 3 19 Công việc 1 Công việc 2 Công việc 3
  • 20. 6.b) Dùng lưu đồ - sơ đồ khối • Cấu trúc rẻ nhánh: • Nếu điều kiện đúng  Thực hiện công việc 1 • Nếu điều kiện sai  Thực hiện công việc 2 20 Công việc 1 Điều kiện Đúng Công việc 2 Điều kiện Đúng Sai Công việc 1 Sai
  • 21. 6.b) Dùng lưu đồ - sơ đồ khối • Cấu trúc vòng lặp: 21 Công việc 2 Điều kiện Đúng Sai Công việc 1 Công việc 1 Điều kiện Đúng Công việc 2 Sai
  • 22. 6.b) Dùng lưu đồ - sơ đồ khối Giải phương trình 𝑎𝑥 + 𝑏 = 0 22 Bắt đầu Nhập a Nhập b 𝑎 = 0 Tính 𝑥 = −𝑏 𝑎 Xuất “VN” 𝑏 = 0 Xuất “VSN” Kết thúc Xuất x SaiĐúng Đúng Sai
  • 23. 6.c) Dùng mã giả • Ngôn ngữ tựa ngôn ngữ lập trình:  Dùng cấu trúc chuẩn hóa, như C, C++.  Dùng các ký hiệu toán học, biến, hàm. • Ưu điểm:  Đỡ cồng kềnh hơn lưu đồ khối. • Nhược điểm:  Không trực quan bằng lưu đồ khối. 23
  • 24. 6.c) Dùng mã giả • VD: Giải phương trình 𝑎𝑥 + 𝑏 = 0 24 If a = 0 Then Begin If b = 0 Then Xuất “Phương trình vô số nghiệm” Else Xuất “Phương trình vô nghiệm” End Else Xuất “Phương trình có nghiệm x = -b/a” Đầu vào: a, b thuộc R Đầu ra: nghiệm phương trình 𝒂𝒙 + 𝒃 = 𝟎
  • 25. 7. Một số ví dụ về thuật toán • Ví dụ 1: Vẽ lưu đồ thuật toán Kiểm tra tính chẵn lẻ của một số nguyên • Ví dụ 2: Vẽ lưu đồ thuật toán Tính tổng các số nguyên dương lẻ từ 1 đến n • Ví dụ 3: Vẽ lưu đồ thuật toán Tìm nghiệm của phương trình bậc hai một ẩn • Ví dụ 4: Vẽ lưu đồ thuật toán Liệt kê tất cả ước số của số nguyên dương n 25
  • 26. 7. Một số ví dụ về thuật toán • Ví dụ 1: Vẽ lưu đồ thuật toán Kiểm tra tính chẵn lẻ của một số nguyên 26 Bắt đầu Nhập n n  2=0 Xuất “n chẳn” Kết thúc SaiĐúng Xuất “n lẻ”
  • 27. 7. Một số ví dụ về thuật toán Ví dụ 2: Vẽ lưu đồ thuật toán tính tổng các số nguyên dương lẻ từ 1 đến n 27 Kết thúc Bắt đầu Đọc n i ≤ n Sai Đúng Xuất “S” S=0 i=1 S=S+i i  2=0 i=i+1 Sai Đúng Cách 1: 𝒊 = 𝒊 + 𝟏
  • 28. 7. Một số ví dụ về thuật toán Ví dụ 2: Vẽ lưu đồ thuật toán tính tổng các số nguyên dương lẻ từ 1 đến n 28 Cách 2: 𝒊 = 𝒊 + 𝟐 Bắt đầu Đọc n i ≤ n Kết thúc Sai Đúng Xuất “S” S=0 i=1 S=S+i i=i+2
  • 29. 7. Một số ví dụ về thuật toán 29 • Giải pt: 𝑎𝑥2 + 𝑏𝑥 + 𝑐 = 0 Bắt đầu Đọc a,b,c a = 0 x1=(-b-sqrt(Delta))/(2a) x1=(-b+sqrt(Delta))/(2a) Xuất nghiệm kép x Delta < 0 Xuất “VSN” Xuất Pt có 2 nghiệm x1,cx2 S GPT: bx+c=0 Đ Delta=b*b-4*a*c Kết thúc Delta = 0 x = -b/(2a) Đ S Đ S
  • 30. 7. Một số ví dụ về thuật toán • GPT: bx+c=0 30 b = 0 Tính x = -c/b Xuất “VN” c = 0 Xuất “VSN” Kết thúc Xuất x SĐ Đ S
  • 31. 7. Một số ví dụ về thuật toán 31 Bắt đầu Đọc n i ≤ n Kết thúc S Đ i=1 i=i+1 ni=0 Đ Xuất i S Ví dụ 4: Vẽ lưu đồ thuật toán liệt kê tất cả ước số của số nguyên dương n
  • 32. 8. Lập bảng trên giấy để theo dõi hoạt động của một 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ả, đánh giá đúng sai 32
  • 33. Bài tập 1. Kiểm tra một số nguyên n là số nguyên tố không? Nếu n < 2 thì n không phải là số nguyên tố Nếu n = 2 thì n là số nguyên tố Nếu n > 2: Kiểm tra từ 2 đến 𝑛: Nếu không có số nào chia hết cho n thì n là số nguyên tố Ngược lại n không phải là số nguyên tố 2. Tính giá trị biểu thức: 𝑆 = 1 + 2 + ⋯ + 𝑛 3. Nhập vào số nguyên dương n. Tính tổng các chữ số của số đó. 4. Nhập vào 3 số. Tìm số lớn nhất trong 3 số 33
  • 34. 9. Độ phức tạp thuật toán 1. Tính hiệu quả của giải thuật Để giải một bài toán có thể có nhiều giải thuật khác nhau. Cần lựa chọn một giải thuật tốt theo hai tiêu chuẩn: • Đơn giản, dễ hiểu, dễ lâp trình. • Thời gian thực hiện nhanh, dùng ít tài nguyên máy tính. Tiêu chuẩn 2 là tính hiệu quả của giải thuật. Đánh giá độ phức tạp của giải thuật là đánh giá thời gian thực hiện giải thuật đó. 34
  • 35. 9. Độ phức tạp thuật toán 2. Đánh giá thời gian thực hiện giải thuật Thời gian thực hiện giải thuật phụ thuộc: Ngôn ngữ lập trình Chương trình dịch Hệ điều hành Phần cứng của máy Cần có cách đánh giá khác sao cho: Không phụ thuộc máy, ngôn ngữ lập trình, chương trình dịch. Không cần triển khai chương trình thực hiện giải thuật. Chỉ dựa vào phân tích bản thân giải thuật.  Tổng số phép toán sơ cấp cần thiết để thực hiện giải thuật 35
  • 36. 9. Độ phức tạp thuật toán • Đánh giá giá thuật toán theo hướng tiệm xấp xỉ tiệm cận qua các khái niệm O(). • Ưu điểm: Ít phụ thuộc môi trường cũng như phần cứng hơn. • Nhược điểm: Phức tạp. • Các trường hợp độ phức tạp quan tâm: • Trường hợp tốt nhất (phân tích chính xác) • Trường hợp xấu nhất (phân tích chính xác) • Trường hợp trung bình (mang tích dự đoán) 36
  • 37. 9. Độ phức tạp thuật toán • Sự Phân Lớp Theo Độ Phức Tạp Của Thuật Toán • Sử dụng ký hiệu BigO Độ phức tạp tăng dần 𝑂() Độ phức tạp 𝑂(1) Hằng số 𝑂(log 𝑛) Lôgarit 𝑂(𝑛) Tuyến tính 𝑂(𝑛 ∗ log 𝑛) n*logn 𝑂(𝑛 𝑏) Đa thức 𝑂(𝑛!) Giai thừa 37
  • 38. Bài tập về nhà 38 Vẽ sơ đồ thuật toán của các bài toán sau: 1. Tìm ước chung lớn nhất của hai số a và b. 2. Giải bất phương trình 𝑎𝑥 + 𝑏 > = 0 3. Nhập 3 số a,b,c. Kiểm tra 3 số đó tạo thành 3 cạnh của tam giác hay không? 4. Nhập 3 cạnh a, b, c. Cho biết tam giác tương ứng là tam giác gì? 5. Tính: 𝑆 = 1 2 + 1 4 + … + 1 2𝑛 6. Tính: 𝑆 = 1 ∗ 1 + 1 ∗ 2 + 1 ∗ 3 + … + 1 ∗ 2 ∗ ⋯ ∗ 𝑛 7. Xây dựng thuật toán cho bài toán tìm số Fibonacci 𝐹(𝑛) 8. Tìm giá trị lớn nhất của một dãy số nguyên có 𝑛 số 9. Tìm tất cả các ước số lẻ của một số nguyên dương 𝑛 10.Kiểm tra tính hoàn hảo của số nguyên dương 𝑛
  • 39. Tóm tắt 1. Khái niệm về vấn đề/bài toán. 2. Các bước giải quyết vấn đề/bài toán bằng máy tính 3. Khái niệm về thuật toán 4. Sự cần thiết của thuật toán 5. Các tiêu chuẩn của thuật toán 6. Các phương pháp biểu diễn thuật toán. 7. Một số ví dụ về thuật toán 8. Lập bảng theo dõi hoạt động của một thuật toán 9. Độ phức tạp thuật toán 39