You are on page 1of 5

u trúc d li u và gi i thu t

Ch ng 0. u - Các b c gi i bài toán trên máy tính

0.1. Xác nh bài toán


D li u vào X lý K t qu ra
Vi c xác nh bài toán là ph i xác nh xem ta ph i gi i quy t v n gì? v i gi
thi t nào a cho và c n t nh ng yêu c u nào. Khác v i bài toán thu n túy toán h c ch
c n xác nh rõ gi thi t và k t lu n ch không c n xác nh yêu c u v l i gi i, ôi khi
nh ng bài toán tin h c ng d ng trong th c t ch c n tìm l i gi i t t t i m c nào ó,
th p chí là t i m c ch p nh n c. B i l i gi i t t nh t có th òi h i quá nhi u th i
gian và chi phí.
Xác nh úng yêu c u bài toán là r t quan tr ng b i nó nh h ng t i cách th c
gi i quy t và ch t l ng l i gi i. M t bài toán th c t th ng cho b i nh ng thông tin
khá m h v hình th c, ta ph i phát bi u l i m t cách chính xác và ch t ch hi u
úng bài toán.
Ví d :
• Bài toán: M t d án có n ng i tham gia th o lu n, h mu n chia thành
các nhóm và m i nhóm th o lu n riêng v m t ph n c a d án. Nhóm có
bao nhiêu ng i thì c trình lên b y nhiêu ý ki n. N u l y m i nhóm
m t ý ki n em ghép l i thì c m t b ý ki n tri n khai d án. Hãy tìm
cách chia s b ý ki n cu i cùng thu c là l n nh t.
• Phát bi u l i: Cho m t s nguyên d ng n, tìm các phân tích n thành t ng
các s nguyên d ng sao cho tích c a các s ó là l n nh t.
Trên th c t , ta nên xét m t vài tr ng h p c th thông qua ó hi u c bài toán
rõ h n và th y c các thao tác c n ph i ti n hành. i v i nh ng bài toán n gi n,
ôi khi ch c n qua ví d ta có th a v m t bài toán quen thu c gi i.

0.2. Tìm c u trúc d li u bi u di n bài toán


Khi gi i m t bài toán, ta c n ph i nh ngh a t p h p d li u bi u di n tình tr ng
c th . Vi c l a ch n này tùy thu c vào v n gi i quy t và các thao tác s ti n hành
trên d li u vào. Có nh ng thu t toán ch thích ng v i m t cách t ch c d li u nh t
nh, i v i nh ng cách t ch c d li u khác s kém hi u qu ho c không th th c hi n
c. Chính vì v y nên b c xây d ng c u trúc d li u không th tách r i b c tìm ki m
gi i thu t gi i quy t v n .
Các tiêu chu n khi l a ch n c u trúc d li u:
− C u trúc d li u tr c h t ph i bi u di n c y các thông tin nh p và
xu t c a bài toán.
− C u trúc d li u ph i phù h p v i các thao tác c a thu t toán mà ta l a ch n
gi i quy t bài toán
− C u trúc d li u ph i cài t c trên máy tính v i ngôn ng l p trình ang s
d ng.

Ch ng 0. Các b c gi i bài toán trên máy tính Trang 4


u trúc d li u và gi i thu t
i v i m t s bài toán, tr c khi t ch c d li u ta ph i vi t m t n ch ng
trình nh kh o sát xem d li u c n l u tr l n t i m c nào.

0.3. Tìm thu t toán


Thu t toán là m t h th ng ch t ch và rõ ràng các quy t c nh m xác nh m t dãy
các thao tác trên c u trúc d li u sao cho: v i b d li u vào, sau m t s h u h n b c
th c hi n thao tác ã ch ra, ta t c m c tiêu ã nh. Các c tr ng c a thu t toán:
v Tính n nh:
m i c c a thu t toán, các thao tác ph i th t rõ ràng , không gây nên s nh p
nh ng, l n x n, tùy ti n, a ngh a. Th c hi n úng các b c c a thu t toán thì v i m t
d li u vào, ch cho duy nh t m t k t qu ra.
v Tính d ng:
Thu t toán không c r i vào quá trình vô h n, ph i d ng l i và cho k t qu sau
m t s h u h n b c.
v Tính úng n:
Sau khi th c hi n t t c các b c c a thu t toán theo úng quá trình ã nh, ta
ph i c k t qu mong mu n v i m i b d li u vào. K t qu ó c ki m ch ng
b ng yêu c u bài toán.
v Tính ph d ng:
Thu t toán ph i d s a i thích ng c v i b t k bài toán nào trong m t l p
các bài toán và có th làm vi c trên các d li u khác nhau.
v Tính kh thi:
Kích th c nh , m t thu t toán s có tính hi u qu b ng 0 n u l ng b nh mà
nó yêu c u v t quá kh n ng l u tr c a máy tính.
Thu t toán ph i c máy tính th c hi n trong th i gian cho phép, u này khác
v i l i gi i toán (ch c n ch ng minh là k t thúc sau h u h n b c). Ví d nh x p th i
khóa bi u cho m t h c k thì không th cho máy tính ch y t i h c k sau m i ra c.
D hi u và d cài t.
Ví d : Input: 2 s nguyên d ng a và b
Output: c s chung l n nh t c a a và b.
Thu t toán s ti n hành c mô t nh sau (thu t toán Euclide):
B c 1 (Input): Nh p 2 s nguyên a và b.
c 2: N u b > 0 thì qua b c 3, ng c l i chuy n qua b c 4.
c 3: t r:= a mod b; t a:=b; t b:=r; quay l i b c 2.
c 4 (Output): c s chung l n nh t ph i tìm là giá tr c a a. K t thúc thu t
toán.
u thu t toán:

Ch ng 0. Các b c gi i bài toán trên máy tính Trang 5


u trúc d li u và gi i thu t

u ý:
Khi mô t thu t toán b ng ngôn ng t nhiên, ta không c n ph i quá chi ti t các
c và ti n trình th c hi n mà ch c n mô t m t cách hình th c chuy n thành
ngôn ng l p trình. Ví d khi vi t s thu t toán quy.
i v i các thu t toán ph c t p và n ng v tính toán, các b c và các công th c
c n c mô t m t cách t ng minh và chú thích rõ ràng khi l p trình ta có th
nhanh chóng tra c u.
i v i nh ng thu t toán kinh n thì ph i thu c. Khi gi i m t bài toán l n trong
m t th i gian gi i h n, ta ch ph i thi t k t ng th còn nh ng ch ã thu c thì c l p
vào. Tính úng n c a nh ng modun ã thu c ta không c n quan tâm n a mà ph i t p
trung gi i quy t các ph n khác.

0.4. L p trình
Sau khi ã có thu t toán, ta ph i ti n hành l p trình th hi n thu t toán ó. Mu n
l p trình t c hi u qu cac, c n ph i có k thu t l p trình t t. K thu t l p trình t t
th hi n k n ng vi t ch ng trình, kh n ng g r i và thao tác nhanh. L p trình t t
không ph i ch n m v ng ngôn ng l p trình là , ph i bi t cách vi t ch ng trình uy n
chuy n, khôn khéo và phát tri n d n d n chuy n các ý t ng ra thành các ch ng
trình hoàn ch nh.Th c t cho th y, m t thu t toán hay nh ng do cài t v ng v nên khi
ch y l i cho k t qu sai ho c t c ch m.
Thông th ng, ta không nên c th hóa ngay toàn b ch ng trình mà nên ti n
hành theo ph ng pháp tinh ch t ng b c.
− Ban u, ch ng trình c th hi n b ng ngôn ng t nhiên, th hi n thu t
toán v i các b c t ng th , m i b c nêu lên m t công vi c ph i th c hi n.
− M t công vi c n gi n ho c m t n ch ng trình ã c h c thu c thì ta
ti n hành vi t mã l nh ngay b ng ngôn ng l p trình.
− M t s công vi c ph c t p thì ta l i chia thành nh ng công vi c nh h n l i
ti p t c v i nh ng công vi c nh h n ó.

Ch ng 0. Các b c gi i bài toán trên máy tính Trang 6


u trúc d li u và gi i thu t
Trong quá trình tinh ch t ng b c, ta ph i a ra nh ng bi u di n d li u. Nh
v y cùng v i s tinh ch các công vi c, d li u c ng c tinh ch d n, có c u trúc h n,
th hi n rõ h n m i liên h gi a các d li u.
Ph ng pháp tinh ch t ng b c là m t th hi n c a t duy gi i quy t v n t
trên xu ng, giúp cho ng i l p trình có c m t nh h ng th hi n phong cách vi t
ch ng trình. Tránh vi c mò m m, xóa i vi t l i nhi u l n, bi n ch ng trình thành t
gi y nháp…

0.5. Ki m th
0.5.1. Ch y th và tìm l i
Ch ng trình là do con n i vi t ra, mà ã là con ng i thì ai c ng có th nh m
l n. M t ch ng trình vi t xong ch a ch c ã c ch y ngay trên máy tính cho ra
k t qu mong mu n. K n ng tìm l i, s a l i, u ch nh l i ch ng trình c ng là m t k
ng quan tr ng c a ng i l p trình. K n ng này ch có c b ng kinh nghi m tìm và
s a ch a l i c a chính mình. Có ba lo i l i:
v L i cú pháp: l i này th ng g p nh t nh ng d s a nh t, ch c n n m v ng
ngôn ng l p trình là . M t ng i c coi là không bi t l p trình n u không
bi t s a l i cú pháp.
v L i cài t: vi c cài t th hi n không úng thu t toán ã nh, i v i l này
thì ph i xem l i t ng th ch ng trình, k t h p v i các ch c n ng g r i s a
l i cho úng.
v L i thu t toán: l i này ít g p nh ng nguy hi m nh t, n u nh thì ph i u
ch nh l i thu t toán, n u n ng thì có khi ph i lo i b hoàn toàn thu t toán sai và
làm l i t u.
0.5.2. Xây d ng các b Test
Có nhi u ch ng trình r t khó ki m tra tính úng n. Nh t là khi không bi t n
k t qu úng là th nào. Vì v y n u nh ch ng trình vãn ch y ra k t qu (không bi t
úng sai th nào) thì vi c tìm l i là r t khó kh n. Khi ó ta nên làm các b test th
ch ng trình c a mình.
Các b test nên t trong các file v n b n, b i vi c t o m t file v n b n r t nhanh
và m i l n ch y th ch c n thay tên file d li u vào là xong, không c n gõ l i b test t
bàn phím. Kinh nghi m làm b test là:
− B t u v i m t b test nh , n gi n, làm b ng tay c ng có c áp s so
sánh v i k t qu ch ng trình ch y ra.
− Các b test ph i a d ng, tránh l p i l p l i các b test t ng t .
− Có m t vài b test l n ch ki m tra tính ch u ng c a ch ng trình mà thôi.
K t qu có úng hay không thì trong a s tr ng h p không th ki m ch ng
c v i b test này.
u ý r ng ch ng trình ch y qua c h t các test không có ngh a là ch ng trình
ó ã úng. B i có th ta ch a xây d ng c b test làmcho ch ng trình ch y sai. Vì
v y n u có th , ta nên tìm cách ch ng minh tính úng n c a thu t toán và ch ng
trình, i u này th ng r t khó.

Ch ng 0. Các b c gi i bài toán trên máy tính Trang 7


u trúc d li u và gi i thu t
0.6. T i u ch ng trình
M t ch ng trình ã ch y úng không có ngh a là vi c l p trình ã xong, ta ph i
s a i l i m t vài chi ti t ch ng trình có th ch y nhanh h n, hi u qu h n. Thông
th ng, tr c khi ki m th thì ta nên t m c tiêu vi t ch ng trình sao cho n gi n,
mi n sao ch y ra k t qu úng là c, sau ó khi t i u ch ng trình, ta xem l i nh ng
ch nào vi t ch a t t thì t i u l i mã l nh ch ng trình ng n g i h n, ch y nhanh
n. Không nên vi t t i âu t i u mã n ó, b i ch ng trình có mã l nh t i u
th ng ph c t p, khó ki m soát. Ta nên t i u ch ng trình theo các tiêu chu n sau:
v Tính tin c y:
Ch ng trình ph i ch y úng nh d nh, mô t úng m t gi i thu t úng. Thông
th ng khi vi t ch ng trình, ta luôn có thói quen ki m tra tính úng n c a các b c
m i khi có th .
v Tính uy n chuy n:
Ch ng trình ph i d s a i. B i ít có ch ng trình nào vi t ra ã hoàn h o ngay
c mà v n còn ph i s a i l i. Ch ng trình vi t d s a i s làm gi m b t công s c
c a l p trình viên khi phát tri n ch ng trình.
v Tính trong sáng:
Ch ng trình vi t ra d c d hi u, sau m t th i gian dài, khi c l i còn hi u
mình làm cái gì, n u có u ki n thì còn có th s a sai (n u phát hi n l i m i), c i
ti n hay bi n i c ch ng trình gi i quy t bài toán khác. Tính trong sáng c a
ch ng trình ph thu c r t nhi u vào công c l p trình và phong cách l p trình.
v Tính h u hi u:
Ch ng trình ph i ch y nhanh và ít t n b nh , t c là ti t ki m c c v không
gian và th i gian. có m t ch ng trình h u hi u, c n ph i có gi i thu t t t và nh ng
ti u x o khi l p trình. Tuy nhiên, vi c áp d ng quá nhi u ti u x o có th khi n ch ng
trình tr nên r i r m, khó hi u khi s a i. Tiêu chu n h u hi u nên d ng l i m c ch p
nh n c, không quan tr ng b ng ba tiêu chu n trên. B i phàn c ng phát tri n r t
nhanh, yêu c u h u hi u không c n t ra quá n ng.
T nh ng phân tích trên, chúng ta nh n th y r ng vi c làm ra m t ch ng trình
òi h i r t nhi u công n và tiêu t n khá nhi u công s c. Ch m t công n không
h p lý s làm t ng chi phí vi t ch ng trình. Ngh ra cách gi i quy t v n ã khó, bi n
ý t ng ó thành hi n th c c ng không d chút nào.

Ch ng 0. Các b c gi i bài toán trên máy tính Trang 8

You might also like