Upload
phat-huynh-vinh
View
175
Download
9
Embed Size (px)
DESCRIPTION
nguyen ly ngon ngu lap trinh
Citation preview
GS.TSKH. HOAØNG KIEÁM
NGUYEÂN LYÙ & PHÖÔNG PHAÙP
NGOÂN NGÖÕ LAÄP TRÌNH
ÑAÏI HOÏC QUOÁC GIA TP.HOÀ CHÍ MINH
1
2
ÑEÀ CÖÔNG MOÂN HOÏC
Toùm taét moân hoïc:
Moân hoïc naøy nhaèm cung caáp cho hoïc vieân nhöõng kieán
thöùc cô baûn vaø naâng cao veà ngoân ngöõ laäp trình, nhöõng
nguyeân taéc nguyeân lyù, nhöõng phöông phaùp vaø kyõ thuaät cuûa
caùc ngoân ngöõ laäp trình cuõng nhö cuûa caùc doøng ngoân ngöõ
laäp trình.
Toùm taét baèng tieáng anh:
This course provides students advanced and basic
knowledges, principles, methods, technologies and
fundamentals of programming languages and types of
programming languages.
Caùc moân hoïc tröôùc:
Kyõ thuaät laäp trình, Laäp trình höôùng ñoái töôïng.
3
Noäi dung moân hoïc:
Phaàn 1: Chöông trình vaø laäp trình
1.1 Toång quan veà chöông trình vaø laäp trình
1.1.1 Lòch söû phaùt trieån cuûa ngoân ngöõ laäp trình
1.1.2 Caùc theá heä ngoân ngöõ laäp trình
1.2 Nhöõng phong caùch laäp trình
1.2.1 Laäp trình thuû tuïc (laäp trình haøm)
1.2.2 Laäp trình höôùng ñoái töôïng
1.2.3 Laäp trình Logic
1.2.4 Laäp trình Genetic
ÑEÀ CÖÔNG MOÂN HOÏC
4
1.3 Ngoân ngöõ laäp trình Bare Bone
1.3.1 Caùc khaùi nieäm
1.3.2 Nguyeân lyù hoaït ñoäng
1.3.3 Caùc ví duï minh hoïa
Phaàn 2: Caùc nguyeân lyù cô baûn cuûa laäp trình
2.1 Caùc phaåm chaát caàn coù cuûa chöông trình
2.2 Tính döøng cuûa chöông trình
2.2.1 YÙ nghóa
2.2.2 Caùc nguyeân lyù kieåm tra
ÑEÀ CÖÔNG MOÂN HOÏC
5
2.3 Tính ñuùng ñaén cuûa chöông trình
2.3.1 YÙ nghóa
2.3.2 Caùc nguyeân lyù kieåm tra
2.4 Moät soá kyõ thuaät toái öu hoùa chöông trình
2.4.1 Toái öu hoùa thôøi gian thöïc hieän chöông trình
2.4.2 Toái öu hoùa khoâng gian thöïc hieän chöông trình
Phaàn 3: Caùc ngoân ngöõ laäp trình minh hoïa
3.1 Ngoân ngöõ laäp trình C vaø C++
3.1.1 Caùc minh hoïa cho ngoân ngöõ C nhö laø ngoân ngöõ
laäp trình coù caáu truùc
3.1.2 Caùc minh hoïa cho ngoân ngöõ C++ nhö laø ngoân
ngöõ laäp trình höôùng ñoái töôïng
ÑEÀ CÖÔNG MOÂN HOÏC
6
3.2 Ngoân ngöõ laäp trình Java
3.2.1 Caùc minh hoïa nhö laø ngoân ngöõ laäp trình coù caáu
truùc
3.2.2 Caùc minh hoïa nhö laø ngoân ngöõ laäp trình höôùng ñoái
töôïng
3.2.3 Caùc minh hoïa nhö laø ngoân ngöõ laäp trình maïng
3.2.4 Caùc minh hoïa nhö laø ngoân ngöõ laäp trình song song
3.2.5 Caùc minh hoïa nhö laø ngoân ngöõ laäp trình phaân taùn
ÑEÀ CÖÔNG MOÂN HOÏC
7
Taøi lieäu tham khaûo:
[1]. Mitchell Wand, anh Christopher T.Haynes. Essential of
programming languages. second edition (Cambridge,
Massachusetts: The MIT Press, 2000), ISBN 0-262-06217-
8, http://www.cs.indiana.edu/eopl/
[2]. EllissHorowitz. Fundamentals of pogramming
languages. 2003
[3]. Bruce J. MacLennan. Principles of Programming
Languages. Design, Evaluation, and Implementation. Third
Editon hardback, 528 pages. University of Tennessee,
knoxville. Mar 2003
[4]. Website http://java.sun.com
ÑEÀ CÖÔNG MOÂN HOÏC
8
Taøi lieäu tham khaûo (tt):
[5]. Harvey M. Deitel. Paul J. Deitel. Java How to
Program. Prentice Hall, 4th
E d (Deitel) 2002.
[6]. Cay S. Horstmann, Gary Cornell. Core Java 2 Volume
II Advanced Features. Prentice Hall ‟ 2001
[7]. Kathy Schwalbe, Information Technology Project
Management. Course Technology, a division of Thomson
Learning ‟ 2000.
[8]. Jack T. Marchewka. Information Technology Project
Management, 2nd
Edition. Wiley 2005
[9]. Carlo Ghezzi, Mehdi Jazayeri, Dino Mandrioli.
Fundamentals of Software Engineering (2nd
Edition).
Prentice hall 2002
9
ÑEÀ CÖÔNG MOÂN HOÏC
Hình thöùc ñaùnh giaù:
Thi vieát taïi lôùp: 30%
Laøm baøi thu hoaïch: 70%
10
Chöông trình vaø laäp trình
NHÖÕNG NGUYEÂN LYÙ
CÔ BAÛN VEÀ LAÄP TRÌNH
11
CHÖÔNG TRÌNH VAØ LAÄP TRÌNH
CHÖÔNG
TRÌNH
NGOÂN NGÖÕ
THEÅ HIEÄN
Laø moät caùch bieåu dieãn
thuaät giaûi ñeå thöïc hieän treân
maùy tính
Ñôn giaûn:
Caùc leänh maùy
Phöùc taïp:
caùc meänh ñeà
theo vaên phaïm
qui öôùc
12
* Quaù trình laäp trình chuyeån ñoåi theo höôùng töø
KHOÙ LAÄP TRÌNH LAÄP TRÌNH DEÃ
Quaù trình chuyeån ñoåi
naøy raát khoù khaên
* Lòch söû phaùt trieån cuûa ngoân ngöõ laäp trình
WHAT HOW
Moâ taû nhieäm vuï
phaûi laøm
P1 Pm
Nhöõng leänh ñeå thöïc hieän vieäc
chuyeån P1 Pm
Leänh L1, L2, ..Ln
CHÖÔNG TRÌNH VAØ LAÄP TRÌNH
13
CHÖÔNG TRÌNH VAØ LAÄP TRÌNH
Caùc theá heä ngoân ngöõ laäp trình
1. Ngoân ngöõ maùy
2. FORTRAN, COBOL, ...
3. Pascal, C ...
4. …
14
PHONG CAÙCH LAÄP TRÌNH
LAÄP TRÌNH THUÛ TUÏC (laäp trình haøm)
Traùnh söï nhaäp nhaèng.
Ví duï: f(x) + g(x)= g(x) + f(x)
Laäp trình coù theå trong suoát trong toaùn hoïc
Chuyeån nhöõng chöông trình phöùc taïp, ñeä qui veà nhöõng
haøm ñôn giaûn
Laäp trình döïa treân thuaät toaùn.
15
PHONG CAÙCH LAÄP TRÌNH
LAÄP TRÌNH HÖÔÙNG ÑOÁI TÖÔÏNG
Mang tính phaân caáp, keá thöøa.
Ñoäc laäp
Laäp trình döïa treân thuaät toaùn.
LAÄP TRÌNH LOGIC
Moâ taû baøi toaùn döôùi daïng vò töø, döõ lieäu töøng caëp ñænh vaø
moät luaät ñöôøng ñi.
Laäp trình döïa treân luaät.
16
PHONG CAÙCH LAÄP TRÌNH
LAÄP TRÌNH GENETIC
Laäp trình theo töï nhieân
Chæ caàn ñöa baøi toaùn thöïc teá veà baøi toaùn sinh hoïc, nghóa laø
taïo neân caùc ñôn theå vaø chaïy qua nhieàu theá heä. Döøng ôû thôøi
ñieåm naøo thì taïm chaáp nhaän keát quaû ôû thôøi ñieåm ñoù.
Laäp trình döïa treân thöøa höôûng
Öùng duïng trong laäp trình cho maùy bay, ñoäng cô, quaù trình
tieán hoaù trong xaõ hoäi...
17
CHÖÔNG TRÌNH VAØ LAÄP TRÌNH
DÒCH
DÒCHCHÖÔNG
TRÌNH
Meänh ñeà 1
Meänh ñeà 2
„
„
„
Caâu leänh maùy
Caâu leänh maùy
„
„
„
INTERPRETER: thoâng dòch töøng leänh.
COMPILER: bieân dòch toaøn boä caùc leänh, thöïc hieän sau.
HEÄ
“Trong suoát”
CHÖÔNG TRÌNH
“Trong suoát”
E = { e1, e2, …., en}
18
NGOÂN NGÖÕ BARE BONE
Ngoân ngöõ BARE BONE raát ñôn giaûn. Laäp trình baèng ngoân ngöõ Bare Bone
söû duïng:
3 caâu leänh:
CLEAR: xoùa moät oâ nhôù
clear X X := 0
INCR: taêng giaù trò bieán leân 1
incr X X := X + 1
DECR: giaûm giaù trò bieán xuoáng 1
decr X X := X - 1
1 caáu truùc laëp: while ... do
19
NGOÂN NGÖÕ BARE BONE
Ví duï minh hoïa caùch duøng ngoân ngöõ Bare Bone moâ phoûng
caùc caáu truùc ñieàu kieän vaø caùc pheùp toaùn…
Ngoân ngöõ BB coù theå bôùt ñi moät leänh, chaúng haïn leänh
clear.
Leänh clear x coù theå ñöôïc thay theá baèng moät caáu truùc laëp
while vaø leänh decr nhö sau:
while x not 0 do
decr x;
20
NGOÂN NGÖÕ BARE BONE
Moâ phoûng caáu truùc if … then … else
Caáu truùc ñieàu kieän coù daïng sau:
if ñk then S1 else S2
Ví duï: if x<>0 then x:=0 else x:=1;
Hoaït ñoäng cuûa noù laø bieán ñoåi giaù trò cuûa x thaønh
0 neáu giaù trò ban ñaàu khaùc 0
1 neáu giaù trò ban ñaàu laø 0.
21
NGOÂN NGÖÕ BARE BONE
1. clear y;
2. incr y;
3. while x not 0 do
4. clear x;
5. clear y;
6. end;
7. while y not 0 do
8. clear x;
9. incr x;
10. clear y;
11. end;
Moâ phoûng baèng ngoân ngöõ BB caáu truùc ñieàu kieän
if x<>0 then x:=0 else x:=1 baèng caáu truùc laëp while…do nhö
sau:
22
NGOÂN NGÖÕ BARE BONE
Xaây döïng caùc pheùp toaùn coäng, tröø, nhaân, chia, pheùp gaùn,
pheùp so saùnh
Pheùp coäng: X + Y => Z
1. clear Z;
2. while X not 0 do
3. incr Z;
4. decr X;
5. end;
6. while Y not 0 do
7. incr Z;
8. decr Y;
9. end;
23
NGOÂN NGÖÕ BARE BONE
Pheùp tröø : X ‟ Y => Z
1. clear Z;
2. while X not 0 do
3. incr Z;
4. decr X;
5. end;
6. while Y not 0 do
7. decr Z;
8. decr Y;
9. end;
24
NGOÂN NGÖÕ BARE BONE Pheùp nhaân: X * Y => Z
Löu yù caàn duøng theâm bieán taïm W ñeå löu giaù trò cuûa Y
1. clear Z;
2. while X not 0 do
3. clear W;
4. while Y not 0 do
5. incr Z;
6. incr W;
7. decr Y;
8. end;
9. while W not 0 do
10. incr Y;
11. decr W;
12. end;
13. decr X;
14. end;
25
NGOÂN NGÖÕ BARE BONE
Pheùp gaùn: Y X ( Gaùn X cho Y )
Löu yù caàn duøng theâm bieán taïm Temp
1. clear Y;
2. clear Temp;
3. while X not 0 do
4. incr Y;
5. incr Temp;
6. decr X;
7. end;
8. while Temp not 0 do
9. incr X;
10. decr Temp;
11. end;
26
NGOÂN NGÖÕ BARE BONE
1. clear kq;
2. X1- X;
3. Y1- Y;
4. while Y1 not 0 do
5. incr kq;
6. decr Y1;
7. end;
8. while X1 not 0 do
9. decr kq;
10. decr X1;
11. end;
12. if kq not 0 then
kq:=0;
13. else
kq:=1;
Pheùp so saùnh X,Y:
Neáu X<Y ñuùng thì keát quaû laø 0
Ngöôïc laïi thì keát quaû laø 1.
27
NGOÂN NGÖÕ BARE BONE
1. clear Z;
2. clear kq;
3. incr kq;
4. while Y not 0 do
5. while kq not 0 do
6. clear W;
7. while X not 0 do
8. decr X;
9. decr Y;
10. incr W;
11. end;
12. while W not 0 do
13. incr Y;
14. decr W;
15. end;
16. incr Z;
17. kq = sosaùnh (x,y);
18. Neáu X<Y thì
19. kq:=0,
20. Ngöôïc laïi kq:=1.
21. end;
22. clear Y;
23. end;
Pheùp chia nguyeân X/ Y => Z
28
NGOÂN NGÖÕ BARE BONE
Leänh invert X
Thöïc hieän bieán ñoåi giaù trò cuûa X (ñaõ giaûi trong baøi taäp 2)
Thaønh 0 neáu giaù trò ban ñaàu khaùc 0
Thaønh 1 neáu gía trò ban ñaàu laø 0
Thöïc hieän chuyeån soá döông thaønh soá aâm
Phöông phaùp: Duøng theâm moät bieán daáu keøm theo moät
bieán x. Neáu bieán daáu = 0 thì x >= 0 .Ngöôïc laïi neáu bieán
daáu = 1 thì x < 0.
if dau not 0 then
clear dau
else incr dau;
29
CAÙC NGUYEÂN LYÙ CÔ BAÛN
1. Phaân nhỏ baøi toaùn
2. Ñaëc taû hình thức caùc điều kiện trước vaø sau cuûa moãi thuû
tuïc caøng ñôn giaûn caøng toátù
3. Moät haøm hay thuû tuïc chæ thöïc hieän moät coâng vieäc
4. Giao dieän töôøng minh
5. Söï giao tieáp giöõa caùc haøm phaûi thaät “khít khao”
6. Nguyeân lyù che daáu thoâng tin: nhöõng thuaät giaûi, ñaëc taû
trong moät haøm phaûi ñöôïc che daáu ñeå ñôõ röôøm raø, khoù
hieåu.
30
MOÂ HÌNH THAÙC NÖÔÙC
CUÛA PHAÀN MEÀM (waterfall)
REQUIREMENTS
DESIGN
IMPLEMENTATION
TESTING
SPECIFICATIONS
ADAPTATION
31
Caùc PHAÅM CHAÁT
caàn coù cuûa
CHÖÔNG TRÌNH
32
Caùc PHAÅM CHAÁT cuûa CT
1. Ñuùng ñaén, chính xaùc (correctness)
2. Chaéc chaén (robustness)
3. Thaân thieän (user friendliness)
4. Khaû naêng thích nghi (adapability): chöông trình coù khaû
naêng ñeå phaùt trieån, tieán hoaù theo yeâu caàu
33
Caùc PHAÅM CHAÁT cuûa CT
5. Tính taùi söû duïng (reuseabitilty): chöông trình coù theå duøng
ñeå laøm moät phaàn trong moät chöông trình lôùn khaùc.
6. Tính töông lieân (interoperability)
7. Tính hieäu quaû (efficiency)
8. Tính khaû chuyeån (porability): khaû naêng chuyeån ñoåi deã daøng
giöõa caùc moâi tröôøng
9. Tính an toaøn (security)
34
TÍNH DÖØNG cuûa CT
Ngoaøi 9 phaåm chaát treân coøn coù TÍNH DÖØNG (halt) cuûa chöông trình.
coù hay khoâng moät chöông trình kieåm tra tính döøng cuûa moät
chöông trình?
1985-1986 LENARD noùi raèng: “Khoâng theå toàn taïi moät chöông
trình kieåm tra tính döøng cuûa moät chöông trình”
Ví duï: chöùng minh raèng chöông trình döøng laïi vôùi moät soá höõu haïn böôùc,
x
35
TÍNH DÖØNG cuûa CT
1. Program D
2. Var x: interger;
3. Begin
4. Readln (x);
5. While (x > 1) do
6. Begin
7. If ( x div 2) * 2 = x then
8. x := x div 2;
9. Else
10. x := 3 * x + 1
11. End;
12. Readln;
13. End.
X = 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1 --> döøng
36
TÍNH DÖØNG cuûa CT
Toùm taét chöùng minh phaùt bieåu LENARD qua caûm nhaän ñoái
vôùi caùc vaán ñeà töông töï.
1.Soá Gôden cuûa chöông trình:
Taäp hôïp caùc kyù hieäu
P g (P): { $ A … } {101101, 10111, ... }
Taäp hôïp caùc soá nhò phaân
Soá thaäp phaân
2. Toàn taïi moät chöông trình H( P, A)
P döøng x, a = 1
a = 0
37
TÍNH DÖØNG cuûa CT
3. Xaây döïng moät chöông trình môùi H
Input
While a not do
Voøng laëp voâ haïn
End
H
h
Döøng
Khoâng döøng
H( , a) ?
Output döøng
Output khoâng döøng
38
TÍNH ÑUÙNG ÑAÉN cuûa CT
Chöông
trình
Chöông
trình
bò loãi
Taùc ñoäng 1
Taùc ñoäng 2
Taùc ñoäng n
Coù 10 loaïi loãi:
1. Sai soùt nhoû
2.
…
…
9. Thaûm hoïa
10. Ñaïi dòch
TESTING
(kieåm)
DEBUGGING
(söûa)
2 caùch kieåm loãi
chöông trình
39
TÍNH ÑUÙNG ÑAÉN cuûa CT
Nguoàn goác caùc sai soùt coù 3 loaïi:
1. Döõ lieäu
Duøng boä kieåm tra döõ lieäu
2. Cuù phaùp: Duøng trình bieân dòch
3. Ngöõ nghóa: Khoù phaùt hieän, duøng
Test noäi boä: test
Test ngöôøi duøng: test
Thaønh phaåm: user
Ngaãu nhieân test
Ñaëc tröng test
Ñaëc bieät
Toå hôïp
Logic test
Heuristic test
100% - 150% thôøi gian
40
PHÖÔNG PHAÙP KIEÅM SÖÛA NGAÃU NHIEÂN
NGUYEÂN TAÉC:
1. Baûo ñaûm moïi tröôøng hôïp ñeàu ñöôïc kieåm tra.
2. Thöôøng bò loãi ôû nhöõng ngaõ reõ, phaûi duyeät qua ít nhaát moät laàn
41
3. Theâm vaøo m loãi giaû trong chöông trình N loãi
m loãi giaû, k < m loãi giaû
m’ loãi môùi, m’ loãi môùi
Nguyeân taéc theâm loãi giaû phaûi tinh vi
N loãi Random input
n loãi
n N
PHÖÔNG PHAÙP KIEÅM SÖÛA NGAÃU NHIEÂN
42
Coâng thöùc tính ñoä tin caäy cuûa vieäc kieåm loãi:
Tröôøng hôïp ñaëc bieät:
s = S ( loãi giaû )
n = N ( loãi thaät )
1
12
1
1
11
1
)(N
nkskSN
sk
SN
sSs
S
k
N
Nconf
1
1 1
1)(
N
nk
SN
SN
s
S
Nconf
PHÖÔNG PHAÙP KIEÅM SÖÛA NGAÃU NHIEÂN
43
PHÖÔNG PHAÙP KIEÅM SÖÛA NGAÃU NHIEÂN
s = S n = N conf( N)
5 0 0.83
10 0 0.91
20 0 0.95
5 1 0.71
10 1 0.83
20 1 0.81
thöôûng tin caäy
5 2 0.62
10 2 0.77
20 2 0.87
44
PHÖÔNG PHAÙP KIEÅM SÖÛA NGAÃU NHIEÂN
Coù chöông trình taïo caùc loãi sai ngaãu nhieân raát tinh vi, chöông
trình dòch khoâng phaùt hieän ra
Coù chöông trình test ôû caùc ñieåm then choát (key).
Moät chöông trình caàn test nhieàu laàn xaây döïng quaù trình test
CHÖÔNG
TRÌNH
Module 1
Module n
Kieåm tra
Kieåm tra
Giaûm ñoä
phöùc taïp
45
PHÖÔNG PHAÙP KIEÅM SÖÛA NGAÃU NHIEÂN
Coâng thöùc tính sai soá khi gheùp caùc phaàn trong chöông trình
khi caùc phaàn ñaõ kieåm tra
N = 2 ( 0.9 M + 0.15 D ) + 23 ( 0.15 M + 0.06 D )
Vôùi
D: soá module cuõ;
M: soá mudule môùi
46
KIEÅM TRA TÍNH ÑUÙNG ÑAÉN CUÛA CT
Moãi chöông trình coù raøng buoäc veà tính ÑUÙNG ÑAÉN
vôùi ñieàu kieän input. Vôùi
x, P(x): ñieàu kieän ñoái vôùi x
Q(y): ñieàu kieän ñoái vôùi y
P(x) Program(x,y) Q(y)
Program(x,y)Input: x Output: y
x, P(x) Q(y)
47
KIEÅM TRA TÍNH ÑUÙNG ÑAÉN CUÛA CT
Ví duï 1: Xeùt chöông trình giaûi phöông trình baäc 2
Program
ax2+bx+c=0
Input: a,b,c Output: x1,x2
a,b,c: P(a,b,c): b2-4ac0
ax1
2+bx
1+c=0
ax2
2+bx
2+c=0
x1,x2:Q
48
Ví duï 2: Xeùt chöông trình
r:=x;
q:=0
While ( r > y ) do
Begin
r := r ‟ y;
q := q + 1;
End;
Neáu y = 0 voøng laëp döøng sai
Caùc caän x = y sai vì : dö = x (r)
thöông = 0 (q)
KIEÅM TRA TÍNH ÑUÙNG ÑAÉN CUÛA CT
49
KIEÅM TRA TÍNH ÑUÙNG ÑAÉN CUÛA CT
Chöông trình ñuùng
1. { 0 x and 0 y}
2. r := x;
3. q:=0
4. { 0 r and 0 y and x = y * q + r}
5. While ( r y ) do
6. Begin
7. { 0 r and 0 y r and x = y * q + r}
8. r := r – y;
9. q := q + 1;
10. { 0 r and 0 y and x = y * q + r}
11. End;
12. { 0 r y and x = y * q + r}
50
KIEÅM TRA TÍNH ÑUÙNG ÑAÉN CUÛA CT
COÙ 4 CAÙCH KIEÅM TRA CHÖÔNG TRÌNH
TAÏO BOÄ
DÖÕ LIEÄU
Toaøn boä caùc
nhaùnh cuûa
chöông trình
Moãi leänh cuûa
chöông trình
ñeàu chaïy qua ít
nhaát moät laàn
Ngaãu nhieân
Loãi giaû
Loãi thaät
P ñuùng
Kieåm tra ôû
nhöõng ñieåm nuùt
Switch
Loop
Cheøn leänh kieåm
tra logic ôû moãi
ñoaïn (doøng)
leänh.
Kieåm tra baèng
leänh ñaûo
White-boxBlack-box
51
TÍNH CHAÉC CHAÉÉN CUÛA CT
Phaân tích chöông trình thaønh caùc chöông trình con (sub-program)
Tính ñoäc laäp giöõa caùc chöông trình con cuûa chöông trình caøng cao
caøng toát.
Ví duï:
i := n
while i > 0 do
begin
read(a[i]);
i := i - 1;
end;
for j := 1 to n do
i := i + a[j];
writeln(‘the sum equal’, i);
Chöông trình sai: neáu n <0 ( i duøng chung giöõa 2 voøng laëp)
phaûi khôûi ñoäng bieán tröôùc khi duøng …
52
MOÄT SOÁ KYÕ THUAÄT
TOÁI ÖU HOAÙ
CHÖÔNG TRÌNH
53
TOÁI ÖU
THÔØI GIAN
TOÁI ÖU THÔØI GIAN
VAØ KHOÂNG GIAN
Taêng
khoâng gian
Thuaät toaùn thay ñoåi
TOÁI ÖU HOÙA
CHÖÔNG TRÌNH
TOÁI ÖU
KHOÂNG GIAN
Taêng
thôøi gian
Thay ñoåi caáu truùc döõ lieäu vaø
caáu truùc chöông trình
Thuaät toaùn khoâng ñoåi
Laëp,
reõ nhaùnh,
Caáu truùc ñieàu khieån
…...
54
TOÁI ÖU HOAÙ CHÖÔNG TRÌNH
Thuaät toaùn thay ñoåi
Toái öu hoaù chöông trình ôû ñaây chæ quan taâm ñeán toái öu thôøi
gian vaø toái öu khoâng gian
…P
A1
Ai
An
…
Pi1
Pi2
Pim
55
CAÙC KYÕ THUAÄT
TOÁI ÖU THÔØI GIAN THÖÏC HIEÄN
CHÖÔNG TRÌNH
56
TOÁI ÖU HOAÙ THÔØI GIAN
1. Kyõ thuaät toái öu vieäc reõ nhaùnh
2. Kyõ thuaät toái öu caùc voøng laëp
3. Traùnh goïi laëp moät thuû tuïc
4. Thay ñoåi, boá trí caáu truùc döõ lieäu
5. Moät soá nguyeân lyù trong toái öu hoaù chuông trình
57
TOÁI ÖU VIEÄC REÕ NHAÙNH
Khoâng theå ñeå caùc ñieàu kieän Ai
theo thöù töï ngaãu nhieân
Phaûi saép caùc Aitheo xaùc suaát sai cuûa A
igiaûm daàn
A1
and A2
……. and An
xaùc suaát sai Ai
giaûm daàn
A1
or A2
……. or An
xaùc suaát ñuùng Ai
giaûm daàn
58
TOÁI ÖU CAÙC VOØNG LAËP
1. Taùch caùc leänh khoâng phuï thuoäc vaøo chæ soá laëp ra khoûi voøng
laëp.
Löu yù thôøi gian xöû lyù cuûa caùc pheùp toaùn, ñeå toái öu thôøi gian
thöïc hieän chöông trình. T pheùp coäng < T pheùp nhaân.
Ví duï1:
ÑOAÏN CT GOÁC ÑOAÏN CT TOÁI ÖU
For i := 1 to 100 do
Begin
j := 2*k + i;
A(j) := k-1;
End;
//toái öu thôøi gian thöïc hieän n
n:= k+k ;
m := k-1;
For i := 1 to 100 do
Begin
j := n + i;
A(j) := m;
End;
59
TOÁI ÖU CAÙC VOØNG LAËP
Ví duï2:
ÑOAÏN CT GOÁC ÑOAÏN CT TOÁI ÖU
For i := 1 to …
Begin
a:=b(i)+sin(x)
b:=c(j)+cos(x);
End;
t := sin(x);
c := cos(x);
For i := 1 to ….
Begin
a:=b(i)+t;
b:=c(j)+c;
End;
60
TOÁI ÖU CAÙC VOØNG LAËP
2. Giaûm soá toaùn töû phöùc taïp trong voøng laëp nhôø caùc bieán
phuï.
Ví duï:
ÑOAÏN CT GOÁC ÑOAÏN CT TOÁI ÖU
...
voøng laëp
...
sin(x) + ...
...
sx := sin(x)
...
voøng laëp
...
sx + ...
...
61
TOÁI ÖU CAÙC VOØNG LAËP
3. Giaûm soá voøng laëp trong chöông trình. Thöïc hieän nhieàu coâng vieäc
hôn trong moãi voøng laëp.
Ví duï1:
ÑOAÏN CT GOÁC ÑOAÏN CT TOÁI ÖU
For i:=1 to 1000 do
A(i) := 0;
For i:=1 to 500 step 2 do
Begin
A(i) := 0;
A(i+1) := 0;
End;
62
TOÁI ÖU CAÙC VOØNG LAËP
Ví duï 2:Baøi toaùn nhaân ma traän
tính 4 phaàn töû moät laàn ii = i+1 vaø jj = j+1
50 * 50 = 125 000 voøng laëp
15 625 laàn laëp giaûm gaàn 90%
=x
A B C
Cij
c[i,j} c[i,j+1]
c[i+1,j] c[i+1,j+1]
c[i,j] c[i,jj]
c[ii,j] c[ii,jj]
63
TOÁI ÖU CAÙC VOØNG LAËP
Coù moät ngöôõng traû giaù giöõa thôøi gian vaø ñoä phöùc taïp coâng vieäc trong
voøng laëp. Giaûm toái ña log2n trong n coâng vieäc.
Ví duï: (100 log2n 7)
BAØI TAÄP
Cho chöông trình goàm 1000 voøng laëp, toái öu coøn 200 voøng laëp.
64
TOÁI ÖU CAÙC VOØNG LAËP
4. Voøng laëp naøo coù soá laàn laëp ít seõ naèm ngoaøi voøng laëp coù soá laàn laëp
nhieàu hôn.
For i := 1 to N do
For j :=1 to M do
For k :=1 to L do
ÑIEÀU KIEÄN: N M L
Chi phí khôûi ñoäng voøng laëp ngoaøi > chi phí khôûi ñoäng voøng laëp
trong (2 laàn)
65
TOÁI ÖU CAÙC VOØNG LAËP
NGUYEÂN TAÉC:
Aùp duïng cho vieäc hoaùn ñoåi thöù töï caùc voøng laëp maø khoâng
laøm sai yù nghóa chöông trình. (mang tính cuù phaùp)
CNM
= N(C1
+ M.C2) N.C
1+ MN.C
2
CMN
= M(C1
+ N.C2) M.C1 + MN.C
2
CNM
< CMN
N < M
66
TOÁI ÖU CAÙC VOØNG LAËP
5. Thöïc hieän hôïp nhaát caùc voøng laëp coù theå (mang tính chaát
ngöõ nghóa).
Ví duï:
ÑOAÏN CT GOÁC ÑOAÏN CT TOÁI ÖU
For i := 1 to 50 do
For j := 1 to 50 do
A(i,j) := 0;
For k := 1 to 50 do
A(k,k) := 1;
For i := 1 to 50 do
For i := 1 to 50 do
Begin
A(i,j) := 0;
A(i,i) := 1;
End;
67
TRAÙNH GOÏI LAËP MOÄT THUÛ TUÏC
Giaûm toái ña vieäc goïi caùc thuû tuïc, haøm.
NGUYEÂN LYÙ: haõy laøm nhieàu nhaát trong moät voøng laëp, trong
moät thuû tuïc.
Ví duï:
ÑOAÏN CT GOÁC ÑOAÏN CT TOÁI ÖU
Procedure P(i)
…..
end;
For i := 1 to N do
Call P(i);
Procedure P(i)
For i := 1 to N do
…..
end;
Call P;
68
THAY ÑOÅI, BOÁ TRÍ DÖÕ LIEÄU
1. Duøng bieán phuï thay cho caùc bieåu thöùc phaûi tính toaùn nhieàu.
Ñaët:
uvw = u + v +w
kl = k + l
Suy ra
lk
hwvuf
lk
wvuA
...
kl
huvwf
kl
uvwA
...
69
THAY ÑOÅI, BOÁ TRÍ DÖÕ LIEÄU
2. Duøng baûng truy caäp (table-lookup) ñeå tính toaùn (caùch naøy
aùp duïng raát nhieàu)
Duøng baûng truy caäp thoâng minh coá gaéng laäp baûng tính
saün cho caùc tröôøng hôïp phoå bieán.
N
…
B(x,y)-->x*y3x*y:
2
1
Y
N…321X
case(i) {phoå bieán}
table (i)
Tính case(i)
70
MOÄT SOÁ NGUYEÂN LYÙ
NGUYEÂN LYÙ VANWIK
Laø nguyeân lyù phaân caáp boä nhôù
Döõ lieäu thöôøng ñöôïc truy caäp nhieàu phaûi ñöôïc truy caäp
nhanh nhaát
NGUYEÂN LYÙ ÑOÁI XÖÙNG
Laø nguyeân lyù ñoái ngaãu, hay nguyeân lyù tính phaàn buø
Tính moät phaàn roài laáy ñoái xöùng, khoâng caàn tính toaøn boä
71
CAÙC KYÕ THUAÄT
TOÁI ÖU HOAÙ KHOÂNG GIAN
CHÖÔNG TRÌNH
72
TOÁI ÖU HOAÙ KHOÂNG GIAN
1. Nguyeân lyù neùn döõ lieäu
a) Giaûm khoaûng troáng
b) Maõ laëp
c) Maõ hoaù döïa vaøo taàn suaát
d) Maõ neàn
e) Aùnh xaï co döõ lieäu
f) Neùn aûnh
2. Nguyeân lyù phaân caáp boä nhôù
3. Nguyeân lyù duøng coâng thöùc thay boä nhôù
73
TOÁI ÖU HOAÙ KHOÂNG GIAN
TOÁI ÖU
KHOÂNG GIAN CT
TOÁI ÖU
BOÄ NHÔÙ
TOÁI ÖU KHOÂNG
GIAN LAØM VIEÄC
74
NGUYEÂN LYÙ NEÙN DÖÕ LIEÄU
NEÙN
CHÖÔNG TRÌNH
NEÙN
DÖÕ LIEÄU
Baûo ñaûm deã baûo quaûn
vaø baûo veä
Tieát kieäm boä nhôù laø
haøng ñaàu
CHÖÔNG TRÌNH
P = DATA + ALGORITHM
DATA M free
Giaûm thieåu vuøng nhôù laøm vieäc
caàn cho chöông trình
75
GIAÛM KHOAÛNG TROÁNG
Tröôùc khi tính caàn kieåm tra coù trong döõ lieäu neùn hay khoâng?
caàn khoaûng thôøi gian chaáp nhaän ñöôïc.
Aûnh laø baøi toaùn ñaëc bieät
Ma traän M x N
1 0 0 1 0 1
0 1 1 ..
..
..
..
..
Bieåu dieãn
khoâng coøn
giaù trò 0
((i1, j
1), (i
1, j
1),…, (i
1, j
1))
Caùch 1: bieåu dieãn danh saùch
toaï ñoä caùc giaù trò 1
Kieåm tra coù trong danh saùch
(i1, j
1)
Tính
Test (i, j) List (data) ?
Caùch 2:
(i1, j
i
k,…)(…)
76
GIAÛM KHOAÛNG TROÁNG
Ví duï: baøi toaùn soá ngaén
52
41
123
52 49 123
77
Coù nhöõng döõ lieäu thöôøng xuyeân laëp laïi duøng pheùp maõ laëp
Runlength-Coding ñeå neùn.
Ví duï:
5, 5, 5, 6, 7, 7, 7, …….. 3( 5 ), 6, 4( 7 )
……...
AAABBCCCD A(3), B(2), C(3), D(1)
Cô sôû döõ lieäu very large
Maõ hoùa khoái döõ lieäu: toaøn khoái döõ lieäu maõ hoùa laïi theo soá laàn xuaát
hieän cuûa töø trong vaên baûn. Neáu töø xuaát hieän nhieàu nhaát thì cho giaù trò
beù nhaát neùn laïi döõ lieäu 0 1 ñaõ coù töø vaên baûn
Ví duï: Cong hoa xa hoi chu nghia Viet Nam
Cong xuaát hieän nhieàu nhaát 0
…..
hoa xuat hien 1 lan 1
000101
MAÕ LAËP
78
MAÕ HOÙA DÖÏA VAØO TAÀN SUAÁT
BAÛN TEXT BAÛN ENCRYPTION
e $1
15%
i $2
10%
….
$n
0.01%
79
MAÕ NEÀN
Ví duï:
157, 158, 162, 174, ….
(+100) 57, 58, 62, 74……
- Xöû lyù tín hieäu tieáng noùi xem xeùt döõ lieäu ñeå choïn
neàn cho döõ lieäu
+
- Base line
80
AÙNH XAÏ CO DÖÕ LIEÄU
(x,y)
S(x,y)
(f(x), f(y))
f: aùnh xaï co
f
y
f(x)
f(y)x
S(x,y) . f
fk(x,y) fk (fk(x), fk(y)) ……
yxfyxfyx ,,,.,
81
AÙNH XAÏ CO DÖÕ LIEÄU
f = 5x +4y +6
x*,y*
1000 laàn
Ví duï:
(x,y)
x*,y*
f
- Moät aùnh xaï co khoâng phuï thuoäc vaøo input
82
AÙNH XAÏ CO DÖÕ LIEÄU
„ Thay vì löu tröõ aûnh maøu coù 256 maøu coù kích thöôùc raát
lôùn thì chæ löu tröõ aùnh xaï co.
„ Lôùp aùnh xaï co (affine)
x’ = ax + by + c
y’ = dx + ey + f
(a, b, c, d, e, f)
(x, y) (x’, y’)
(x’1, y’
1) (x
1, y
1)
(x’2, y’
2) (x
2, y
3)
(x’3, y’
3) (x
3, y
3)
*1
*2
*3
*1
*3*2
Lôùn
Nhoû
83
AÙNH XAÏ CO DÖÕ LIEÄU
Ñeå tìm ñöôïc 6 heä soá caàn phaûi :
Tìm ñöôïc 3 caëp ñieåm giöõa 2 beân
Tìm ñöôïc aùnh xaï co
Tìm ñöôïc 6 phöông trình
a, b, c, d, f
x’1
= ax1
+ by1
+ c
y’1
= dx1
+ ey1
+ f
..
..
..
x’3
= ax3
+ by3
+ c
y’3
= dx3
+ ey3
+ f
84
NEÙN AÛNH
Töø aûnh goác chia theo löôùi vuoâng, tam giaùc, chöõ nhaät
Chia thaønh caùc
range khoâng giao
nhau
I II
IV V
III
Aûnh goác ñöôïc chia
thaønh caùc domain,
caùc domain coù theå
giao nhau
85
NEÙN AÛNH
range i domain IMATCH
1 IV
2 III
…. ….
100 V
IV 1
V 100
f1
86
NEÙN AÛNH
- NGUYEÂN LYÙ TÖÏ ÑOÀNG DAÏNG: moïi ñoái töôïng ñeàu töï
ñoàng daïng vôùi nhau
- Aûnh neùn raát nhoû, neân caàn thôøi gian tìm söï ñoàmg daïng lôùn.
- Coù 3 daïng döõ lieäu caàn quan taâm ñeå neùn: vaên baûn, soá lieäu
(ma traän,…), hình aûnh, tieáng noùi
87
NGUYEÂN LYÙ PHAÂN CAÁP BOÄ NHÔÙ
NGUYEÂN LYÙ VANWIK: döõ lieäu thöôøng ñöôïc truy
caäp phaûi ñöôïc truy caäp toát nhaát
1000000 töø
TÖØ ÑIEÅN
TÖØ ÑIEÅN THOÂNG DUÏNG
90% - 3000 töø
997000 từ BN ngoaøi
BN trong
88
NGUYEÂN LYÙ PHAÂN CAÁP BOÄ NHÔÙ
- Baøi toaùn vôùi khoái löôïng döõ lieäu lôùn, ña daïng.
Ví duï: saép xeáp 1 000 000 soá
2000 thöù töï cuïc boä thöù töï toaøn phaàn
Ví du: baøi toaùn nhaän daïng phaân caáp theo maãu töï hay xuaát hieän
phaân caáp theo font thöôøng duøng
A
B
C
..
$
?
….
…
…
Boä nhôù trong
FONT $ FONT 1000
89
NGUYEÂN LYÙ DUØNG COÂNG THÖÙC THAY BOÄ NHÔÙ
(Ngöôïc laïi vôùi toái öu thôùi gian)
- Duøng boä nhôù thay coâng thöùc tính
Ví duï:
Daõy Fibonaci: 1, 1, 2, 3, 5, 8, 13
Un = Un-1
+ Un-2
U1000 buøng noå khoâng gian vuøng nhôù
- Moïi ñeä qui ñeàu coù theå ñöa veà coâng thöùc ñuùng, gaàn ñuùng 1 laàn
Ví duï: traéc ñòa
1/ x, y, z,…… , , …..
2/
…..
A, B
A, t ( A B )