Tải bản đầy đủ (.pdf) (7 trang)

một số phương pháp cơ bản trong thiết kế giải thuật và đánh giá độ phức tạp thuật toán

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (411.43 KB, 7 trang )


TRNG I HC S PHM HÀ NI
TRUNG TÂM GIÁO DC T XA
NGUYN V QUC HNG
NGUYN QUNH DIP


MT S PHNG PHỄP C BN
TRONG THIT K GII THUT VÀ
ỄNH GIỄ  PHC TP THUT
TOÁN







HÀ NI ậ 2012
Chng 1. Dn nhp Nguyn V Quc Hng-Nguyn Qunh Dip
1


CH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.
Chng 1. Dn nhp Nguyn V Quc Hng-Nguyn Qunh Dip
2

981

981
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
Chng 1. Dn nhp Nguyn V Quc Hng-Nguyn Qunh Dip
3

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:
Chng 1. Dn nhp Nguyn V Quc Hng-Nguyn Qunh Dip
4

Toán hng nhân Trt Kt qu
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],
Chng 1. Dn nhp Nguyn V Quc Hng-Nguyn Qunh Dip
5

* 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, S
1
, S

2
là các câu lnh
* Câu lnh tuyn:
case
B1 : S1;
B2 : S2;

Bn : Sn
else
Sn+1
end case
Chng 1. Dn nhp Nguyn V Quc Hng-Nguyn Qunh Dip
6

* Câu lnh lp:
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

×