1
IT1110 Tin hc đại cương
Phn II Gii quyết bài toán
Chương 2 Thut toán
2
Ni dung chương này
2.1. Định nghĩa thut toán
2.2. Biu din thut toán
2.3. Mt s thut toán thông dng
2.4. Thut toán đệ quy
2.5. Thut gii heuristic
3
2.1. Định nghĩa thut toán
Là mt khái nim cơ s ca toán hc và tin
hc.
Bao gm mt dãy hu hn các lnh/ch th
rõ ràng và có th thi hành được để hướng
dn thc hin mt hành động nhm đạt
được mc tiêu đề ra.
Thut toán là s th hin ca mt phương
pháp để gii quyết mt vn đề.
4
Ví d 1: Thut toán tìm phn t ln nht
ca mt dãy hu hn các s nguyên
Các bước:
1. Đặt giá tr ln nht tm thi là s nguyên đầu tiên.
2. So sánh s nguyên kế tiếp trong dãy vi giá tr ln
nht tm thi, nếu s nguyên này ln hơn giá tr ln
nht tm thi thì đặt giá tr ln nht tm thi bng s
nguyên này.
3. Lp li bước 2 nếu còn s nguyên trong dãy chưa
được xét.
4. Dng nếu không còn s nguyên nào trong dãy chưa
được xét. Giá tr ln nht tm thi lúc này chính là giá
tr ln nht trong dãy s.
5
Ví d 2: Thut toán gii phương trình bc
hai: ax2 + bx + c = 0 (a0)
1. Nhp 3 h s a, b, c
2. Tính giá tr Δ = b2 - 4*a*c
3. Xét du Δ. Nếu Δ>0 thì thc hin các thao tác
sau đây:
3.1. Tính các nghim theo các công thc:
x1 = (-b-sqrt(Δ))/(2*a)
x2 = (-b+sqrt(Δ))/(2*a)
3.2. Xut kết qu: phương trình có hai nghim x1 và x2.
4. Nếu Δ là 0 thì xut kết qu: phương trình có
nghim kép là -b/(2*a)
5. Nếu Δ<0 thì xut kết qu: phương trình vô
nghim
6. Dng thut toán
6
Các đặc trưng ca thut toán
Nhp (input): các giá tr nhp t mt tp hp nht
định.
Xut (output): t mi giá tr ca tp hp nhp, to ra giá
tr xut thuc mt tp hp nht định.
Tính xác định (definiteness): các bước chính xác,
ràng.
Tính hu hn (finiteness): cho ra kết qu sau mt s hu
hn bước.
Tính hiu qu (effectiveness): được đánh giá da trên
mt s tiêu chun (khi lượng tính toán, không gian, thi
gian s dng).
Tính tng quát (generaliness): áp dng được cho tt c
các bài toán có dng như mong mun
7
2.2. Biu din thut toán
S dng các ngôn ng:
Ngôn ng t nhiên
Ngôn ng lưu đồ (sơ đồ khi)
Ngôn ng ta ngôn ng lp trình (mã gi)
Ngôn ng lp trình
8
Ngôn ng lưu đồ
Các thành phn:
Nút gii hn: được biu din bi hình ôvan có
ghi ch bên trong, gm có nút đầu và nút cui:
Nút thao tác: là mt hình ch nht có ghi các
lnh cn thc hin:
Nút nhp/xut d liu:
BT ĐẦU KT THÚC
tăng k
Đọc a và
b
9
Ngôn ng lưu đồ (2)
Nút điu kin: là mt hình thoi có ghi điu kin
cn kim tra, thường có 1 cung đi vào và 2 cung đi
ra (tương ng vi 2 trường hp đúng/sai)
a<b Sai
Đúng
Cung: là đường ni tt này đến nút khác ca
lưu đồ
10
Ví d: lưu đồ biu din thut toán gii
phương trình bc 2
Bt đầu
a0
Δ>0
Δ=0
Δ = b2 - 4ac
x1 = (-b-sqrt(Δ))/(2*a)
x2 = (-b+sqrt(Δ))/(2*a) x=-b/(2a)
Kết thúc
sai đúng
sai
sai
đúng
đúng
Nhp a, b, c
Xut: phương trình
có 2 nghim x1, x2
Xut: phương trình
có nghim kép x
Xutphương
trình vô
nghim
Xut: : Không
phi
phương trình bc
2
11
Mã gi
S dng mnh đềcu trúc chun hóa và
vn dùng ngôn ng t nhiên.
S dng các ký hiu toán hc, các biến, cu
trúc kiu th tc.
Hành động gán:
i i+1
Tin li, đơn gin, vn d hiu.
12
Mã gi (2)
Các cu trúc thường gp:
Cu trúc chn:
if (điu kin) then (hành động) end if
if (điu kin) then (hành động 1)
else (hành động 2)
end if
Cu trúc lp
while (điu kin) do (hành động) end while
repeat (hành động) until (điu kin)
for (biến)=(giá tr đầu) to (giá tr cui) do (hành động) end for
for (biến)=(giá tr cui) downto (giá tr đầu) do (hành động)
end for
Cu trúc nhy
goto nhãn x;
13
Ví d: thut toán gii phương trình bc 2
Nhp:
các h s a, b, c
Xut:
kết lun v nghim ca phương trình bc hai
Thut toán:
if a = 0 then
Xut: Không phi phương trình bc hai, Dng
end if
delta b*b-4*a*c
if delta > 0 then
x1 (-b-sqrt(Δ))/(2*a)
x2 (-b+sqrt(Δ))/(2*a)
Xut: x1 và x2, Dng
else if delta = 0 then x12 -b/(2*a), Xut: nghim kép x12
else Xut: phương trình vô nghim
end if
14
2.3. Mt s thut toán thông dng
Thut toán kim tra s nguyên t
Thut toán tìm USCLN, BSCNN ca 2 s
nguyên
Thut toán tìm phn t ln nht trong mt
dãy
Thut toán sp xếp
Thut toán tìm kiếm
Tìm phn t ln nht trong mt dãy hu hn s
Nhp:
dãy s a[1], a[2], a[3],… a[n]
Xut:
max là giá tr ln nht trong dãy s đã cho
Thut toán:
max a[1]
for i = 2 to n do
if max < a[i] then
max a[i]
end if
end for
Xut: max là giá tr ln nht trong dãy s
15 16
2.4. Thut toán đệ quy
Có mt s trường hp, cách gii có th vi phm các
tính cht ca thut toán nhưng li khá đơn gin và
được chp nhn.
Bài toán có th được phân tích và đưa ti vic gii
mt bài toán cùng loi nhưng cp độ thp hơn.
Ví d:
Định nghĩa giai tha
0! = 1
n! = n*(n-1)! vi n>0
Định nghĩa dãy s Fibonacci: 1, 1, 2, 3, 5, 8, 13,...
f1 = 1,
f2 = 1,
fn = fn-1 + fn-2
17
Thut toán đệ quy (2)
Thut toán đệ quy tính giai tha ca 1 s t
nhiên:
Input: s t nhiên n
Output: F(n) bng n!
Thut gii:
1. F 1
2. if n>0 then F F(n-1)*n
3. Output F
18
Thut toán đệ quy (3)
Thut toán đệ quy tính s hng th n ca
dãy s Fibonacci:
Input: s t nhiên n
Output: F(n) bng s hng th n ca dãy
Thut gii:
1. if n=1 or n=2 then F 1
2. if n>2 then F F(n-1)+F(n-2)
3. Output F
19
Thut toán đệ quy (4)
Đặc đim ca thut toán đệ quy:
Có 1 trường hp cơ s/trường hp dng
Có phn đệ quy bên trong thut toán (nó gi
đến chính nó)
Có s biến đổi tiến ti trường hp cơ s.
20
Bài tp
Viết thut toán tìm USCLN ca hai s t
nhiên
Viết thut toán tìm BSCNN ca hai s t
nhiên
Viết thut toán tìm phn t ln nht trong
mt dãy s hu hn
Viết thut toán sp xếp
Viết thut toán tìm kiếm