NGUY N V QU C H NG NGUY N QU NH DI P
TRONG THI T K GI I THU T VÀ
TOÁN
HÀ N I ậ 2012
Trang 21
C H NG 1
D N NH P
1.1 Algorithm?
T algorithm đ c đ t ra t th k th 9 b i nhà toán h c Bat (Iran) Abu Ja’fa Mohammed ibn Khowarizmi đ c hi u đ n gi n là t p các quy t c ch a đ ng các phép tính toán đ c th c hi n b ng tay ho c máy móc, trong tài li u này ta luôn hi u là gi i thu t đ c xây d ng cho
máy tính
Algorthmics là thu t ng đ ch s nghiên c u v gi i thu t Khi ta
gi i quy t v n đ vi c đ u tiên quan tr ng là quy t đ nh l a ch n m t gi i thu t có kh n ng đ s d ng Tu thu c vào yêu c u c a bài toán và gi i
h n kh n ng c a thi t b , chúng ta c n ch n đ c gi i thu t th c hi n
v i th i gian ít nh t ho c v i không gian l u tr nh nh t ho c d l p
ch ng trình nh t, tho mãn nh ng nhân t này, ngoài kh n ng v
t c đ và không gian l u tr c a thi t b đ c dùng c n ph i đ ý thi t k
gi i thu t Algorthmics là khoa h c nghiên c u v cách xác đ nh hi u qu
c a nh ng nhân t bi n đ i bên ngoài, cho phép l a ch n m t gi i pháp
t t nh t cho nh ng tình hu ng đ c bi t; đó chính là khoa h c cho chúng
ta bi t ph i làm nh th nào đ xây d ng m t gi i thu t m i cho nh ng tác v riêng bi t
Ta l y s h c s c p làm ví d Gi s , ta ph i nhân hai s nguyên
d ng ch s d ng bút và gi y N u th c hi n theo ki u B c M , chúng
ta l n l t th c hi n phép nhân v i các s t ph i qua trái, m i k t qu
đ c vi t trên m t dòng v i s cu i cùng bên ph i đ c tr t trái m t v trí so v i k t qu dòng trên và cu i cùng c ng t t c các dòng s đ c k t
qu mong mu n N u th c hi n theo ki u đ c d y trong nhà tr ng Anh thì ta l i b t đ u t bên trái qua ph i Phép nhân 981 và 1234 đ c ch ra
theo Hình 1.1
Trang 32
1234 1234
3924 981
2943_ 1962
1962 _2943
981 _ 3924
1210554 1210554
Hình 1.1 Nhân 2 s nguyên l n
Ta nh n th y r ng, hai gi i thu t này là t ng đ ng, thu c lo i phân l p, m t gi i thu t th ba khác h n đ c g i là nhân theo ki u Nga
đ c trình bày nh sau:
981 1234 1234
490 2468
245 4936 4936
122 9872
61 19744 19744
30 39488
15 78976 7896
7 157952 157952
3 315904 315904
Trang 43
1 631808 631808
1210554
Hình 1.2 Nhân theo ki u Nga
Gi i thu t này r t thích h p v i các m ch tính nh phân M t
khác, v i ng i tính toán không c n h c thu c m t b ng nhân nào Cái
ng i ta c n bi t ch là phép c ng và nhân chia cho 2
Còn m t gi i thu t khác đ c trình bày nh Hình 1.3 và 1.4 d i đây Gi i thu t này c n làm cho hai s h ng tham gia vào phép nhân có
đ dài b ng nhau (s d ng s 0 cho thêm vào đ u), đ dài là m t l y th a
c a 2 (1, 2, 4, 6, 8, …) nhân 0981 v i 1234 , đ u tiên ta nhân t ng
n a c a c a các toán h ng v i nhau: n a bên trái c a toán h ng nhân (09)
đ c nhân v i l n l t n a bên trái c a toán h ng kia (12 và 34), r i ti p
t c n a bên ph i c a nó c ng đ c nhân nh v y Ta có 4 phép nhân, k t
qu đ c s p x p và c ng l i xem Hình 1.3
Toán h ng nhân Tr t K t qu
i) 09 12 4 108
ii) 09 34 2 306
iii) 81 12 2 972
iv) 81 34 0 2754
1210554
Hình 1.3 Phép nhân ki u chia đ tr
C ng v i cách th c nh v y, chúng ta l i áp d ng đ i v i các
phép nhân 09 x 12, 09 x 34, 81 x 12 và 81 x 34 Ch ng h n, phép nhân 09
x 12 đ c th c hi n nh sau:
Trang 54
i) 0 1 2 0
ii) 0 2 1 0
iii) 9 1 1 9
iv) 9 2 0 18
108
Hình 1.4 Phép nhân ki u chia đ tr
Phép nhân đ c ti n hành nh v y đ c g i là th c hi n theo gi i thu t chia đ tr (divide and conquer), đ nhân hai s nguyên l n ta đã chia nh ra, cu i cùng ch th c hi n phép nhân hai s có m t ch s và các phép c ng
1.2 Bi u di n gi i thu t
Chúng ta có th s d ng ngôn ng t nhiên đ trình bày m t gi i thu t, nh ng ngôn ng t nhiên có nh c đi m v tính chính xác Trong giáo trình này chúng ta s d ng ngôn ng ph ng trình, m t ngôn ng v n
đ c dùng trong các nhà tr ng, g n gi ng v i ngôn ng Pascal
* Ký t và bi u th c:
B ng ch cái và d u phép toán theo b ng mã ASCII
Giá tr logic: true, false
Phép toán logic: and, or, not
Bi n ch s : a[i], a[i,j], a[i, j, k],
Trang 65
* Các c u trúc d li u: Integer, Real, Char, Logical, String Khi c n chúng ta có th b xung thêm c u trúc d li u
* Phép gán:
<tên bi n> <bi u th c> ho c
<tên bi n> := <bi u th c>
* Phép ghép l nh:
begin <các câu l nh> end
* Câu l nh th c hi n theo đi u ki n:
if B then S
if B then S 1 else S 2
Trong đó: B là m t bi u th c logic S, S1, S2là các câu l nh
* Câu l nh tuy n:
case
B1 : S1;
B2 : S2;
Bn : Sn else
Sn+1 end case
Trang 76
for <tên bi n> := m to n do S
for <tên bi n> := m downto n do S
While B do S
Repeat <các câu l nh> until B
Trong đó: S là câu l nh, B là bi u th c logic, m và n (các giá tr đ m
đ c) là các giá tr kh i đ u và k t thúc
* Vào, ra:
read (<danh sách bi n>)
write (<danh sách bi n>)
* M đ u và K t thúc ch ng trình:
begin end
* Ch ng trình con hàm:
function <tên hàm> (<danh sách tham s >) :
ki u d li u;
<ch ng trình>
return
* Ch ng trình con th t c:
procedure <tên th t c> (<danh sách tham
s >);
<ch ng trình>
return