89
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

nguyen ly ngon ngu lap trinh

Embed Size (px)

DESCRIPTION

nguyen ly ngon ngu lap trinh

Citation preview

Page 1: nguyen ly ngon ngu lap trinh

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

Page 2: nguyen ly ngon ngu lap trinh

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.

Page 3: nguyen ly ngon ngu lap trinh

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

Page 4: nguyen ly ngon ngu lap trinh

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

Page 5: nguyen ly ngon ngu lap trinh

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

Page 6: nguyen ly ngon ngu lap trinh

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

Page 7: nguyen ly ngon ngu lap trinh

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

Page 8: nguyen ly ngon ngu lap trinh

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

Page 9: nguyen ly ngon ngu lap trinh

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%

Page 10: nguyen ly ngon ngu lap trinh

10

Chöông trình vaø laäp trình

NHÖÕNG NGUYEÂN LYÙ

CÔ BAÛN VEÀ LAÄP TRÌNH

Page 11: nguyen ly ngon ngu lap trinh

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

Page 12: nguyen ly ngon ngu lap trinh

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

Page 13: nguyen ly ngon ngu lap trinh

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. …

Page 14: nguyen ly ngon ngu lap trinh

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.

Page 15: nguyen ly ngon ngu lap trinh

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.

Page 16: nguyen ly ngon ngu lap trinh

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...

Page 17: nguyen ly ngon ngu lap trinh

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}

Page 18: nguyen ly ngon ngu lap trinh

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

Page 19: nguyen ly ngon ngu lap trinh

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;

Page 20: nguyen ly ngon ngu lap trinh

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.

Page 21: nguyen ly ngon ngu lap trinh

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:

Page 22: nguyen ly ngon ngu lap trinh

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;

Page 23: nguyen ly ngon ngu lap trinh

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;

Page 24: nguyen ly ngon ngu lap trinh

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;

Page 25: nguyen ly ngon ngu lap trinh

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;

Page 26: nguyen ly ngon ngu lap trinh

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.

Page 27: nguyen ly ngon ngu lap trinh

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

Page 28: nguyen ly ngon ngu lap trinh

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;

Page 29: nguyen ly ngon ngu lap trinh

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.

Page 30: nguyen ly ngon ngu lap trinh

30

MOÂ HÌNH THAÙC NÖÔÙC

CUÛA PHAÀN MEÀM (waterfall)

REQUIREMENTS

DESIGN

IMPLEMENTATION

TESTING

SPECIFICATIONS

ADAPTATION

Page 31: nguyen ly ngon ngu lap trinh

31

Caùc PHAÅM CHAÁT

caàn coù cuûa

CHÖÔNG TRÌNH

Page 32: nguyen ly ngon ngu lap trinh

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

Page 33: nguyen ly ngon ngu lap trinh

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)

Page 34: nguyen ly ngon ngu lap trinh

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

Page 35: nguyen ly ngon ngu lap trinh

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

Page 36: nguyen ly ngon ngu lap trinh

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

Page 37: nguyen ly ngon ngu lap trinh

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

Page 38: nguyen ly ngon ngu lap trinh

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

Page 39: nguyen ly ngon ngu lap trinh

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

Page 40: nguyen ly ngon ngu lap trinh

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

Page 41: nguyen ly ngon ngu lap trinh

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

Page 42: nguyen ly ngon ngu lap trinh

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

Page 43: nguyen ly ngon ngu lap trinh

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

Page 44: nguyen ly ngon ngu lap trinh

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

Page 45: nguyen ly ngon ngu lap trinh

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

Page 46: nguyen ly ngon ngu lap trinh

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)

Page 47: nguyen ly ngon ngu lap trinh

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

Page 48: nguyen ly ngon ngu lap trinh

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

Page 49: nguyen ly ngon ngu lap trinh

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}

Page 50: nguyen ly ngon ngu lap trinh

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

Page 51: nguyen ly ngon ngu lap trinh

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 …

Page 52: nguyen ly ngon ngu lap trinh

52

MOÄT SOÁ KYÕ THUAÄT

TOÁI ÖU HOAÙ

CHÖÔNG TRÌNH

Page 53: nguyen ly ngon ngu lap trinh

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

…...

Page 54: nguyen ly ngon ngu lap trinh

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

Page 55: nguyen ly ngon ngu lap trinh

55

CAÙC KYÕ THUAÄT

TOÁI ÖU THÔØI GIAN THÖÏC HIEÄN

CHÖÔNG TRÌNH

Page 56: nguyen ly ngon ngu lap trinh

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

Page 57: nguyen ly ngon ngu lap trinh

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

Page 58: nguyen ly ngon ngu lap trinh

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;

Page 59: nguyen ly ngon ngu lap trinh

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;

Page 60: nguyen ly ngon ngu lap trinh

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 + ...

...

Page 61: nguyen ly ngon ngu lap trinh

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;

Page 62: nguyen ly ngon ngu lap trinh

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]

Page 63: nguyen ly ngon ngu lap trinh

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.

Page 64: nguyen ly ngon ngu lap trinh

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)

Page 65: nguyen ly ngon ngu lap trinh

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

Page 66: nguyen ly ngon ngu lap trinh

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;

Page 67: nguyen ly ngon ngu lap trinh

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;

Page 68: nguyen ly ngon ngu lap trinh

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

...

Page 69: nguyen ly ngon ngu lap trinh

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)

Page 70: nguyen ly ngon ngu lap trinh

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ä

Page 71: nguyen ly ngon ngu lap trinh

71

CAÙC KYÕ THUAÄT

TOÁI ÖU HOAÙ KHOÂNG GIAN

CHÖÔNG TRÌNH

Page 72: nguyen ly ngon ngu lap trinh

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ôù

Page 73: nguyen ly ngon ngu lap trinh

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

Page 74: nguyen ly ngon ngu lap trinh

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

Page 75: nguyen ly ngon ngu lap trinh

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,…)(…)

Page 76: nguyen ly ngon ngu lap trinh

76

GIAÛM KHOAÛNG TROÁNG

Ví duï: baøi toaùn soá ngaén

52

41

123

52 49 123

Page 77: nguyen ly ngon ngu lap trinh

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

Page 78: nguyen ly ngon ngu lap trinh

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%

Page 79: nguyen ly ngon ngu lap trinh

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

Page 80: nguyen ly ngon ngu lap trinh

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 ,,,.,

Page 81: nguyen ly ngon ngu lap trinh

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

Page 82: nguyen ly ngon ngu lap trinh

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û

Page 83: nguyen ly ngon ngu lap trinh

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

Page 84: nguyen ly ngon ngu lap trinh

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

Page 85: nguyen ly ngon ngu lap trinh

85

NEÙN AÛNH

range i domain IMATCH

1 IV

2 III

…. ….

100 V

IV 1

V 100

f1

Page 86: nguyen ly ngon ngu lap trinh

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

Page 87: nguyen ly ngon ngu lap trinh

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

Page 88: nguyen ly ngon ngu lap trinh

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

Page 89: nguyen ly ngon ngu lap trinh

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 )