Giáo trình cấu trúc dữ liệu giải thuật
môc lôc
môc lôc............................................................................................................ 1
Ch¬ng 1: më ®Çu..........................................................................................4
1.1. Gi¶i thuËt....................................................................................................4
1.1.1 Kh¸i niÖm gi¶i thuËt.............................................................................4
1.1.2. C¸c ®Æc trng cña gi¶i thuËt..................................................................4
1.2. CÊu tróc d÷ liÖu vµ c¸c vÊn ®Ò liªn quan.....................................................5
1.2.1. CÊu tróc d÷ liÖu vµ gi¶i thuËt...............................................................5
1.2.2. CÊu tróc d÷ liÖu vµ ng«n ng÷ lËp tr×nh.................................................5
1.3. Ng«n ng÷ diÔn ®¹t gi¶i thuËt......................................................................6
1.3.1. §Æt vÊn ®Ò............................................................................................6
1.3.2. Quy c¸ch vÒ cÊu tróc ch¬ng tr×nh........................................................6
1.3.3. Ký tù vµ biÓu thøc................................................................................7
1.3.4. C¸c c©u lÖnh........................................................................................7
Ch¬ng 2 : ThiÕt kÕ vµ ph©n tÝch gi¶i thuËt.............................11
2.1. Tõ bµi to¸n ®Õn ch¬ng tr×nh......................................................................11
2.1.1 M« - ®un ho¸ vµ viÖc gi¶i quyÕt bµi to¸n............................................11
2.1.2. Ph¬ng ph¸p tinh chØnh tõng bíc........................................................13
2.2. Ph©n tÝch gi¶i thuËt...................................................................................24
2.2.1. §Æt vÊn ®Ò..........................................................................................24
2.2.2. Ph©n tÝch thêi gian thùc hiÖn gi¶i thuËt..............................................25
2.3. Bµi tËp......................................................................................................32
Ch¬ng 3 : §Ö quy vµ gi¶i thuËt ®Ö quy........................................36
3.1. Kh¸i niÖm vÒ ®Ö quy.................................................................................36
3.2. Gi¶i thuËt ®Ö quy vµ ch¬ng tr×nh con ®Ö quy............................................36
3.3. ThiÕt kÕ gi¶i thuËt ®Ö quy.........................................................................38
3.3.1. Hµm N !.............................................................................................38
3.3.2. Bµi to¸n Th¸p Hµ Néi........................................................................39
3.3.3. Bµi to¸n 8 qu©n hËu vµ gi¶i thuËt quay lui.........................................41
3.4. HiÖu lùc cña ®Ö quy..................................................................................45
3.5. §Ö quy vµ quy n¹p to¸n häc.....................................................................46
3.6. Bµi tËp......................................................................................................49
Ch¬ng 4: m¶ng vµ danh s¸ch............................................................51
4.1. C¸c kh¸i niÖm...........................................................................................51
4.2. CÊu tróc lu tr÷ cña m¶ng..........................................................................52
4.3. Lu tr÷ kÕ tiÕp cña danh s¸ch tuyÕn tÝnh....................................................55
4.4. Ng¨n xÕp (Stack)......................................................................................56
4.4.1. §Þnh nghÜa.........................................................................................56
4.4.2. Lu tr÷ Stack kÕ tiÕp............................................................................56
4.4.3. C¸c gi¶i thuËt PUSH, POP.................................................................57
4.4.4. øng dông cña Stack...........................................................................59
4.4.5. Stack vµ viÖc cµi ®Æt thñ tôc ®Ö quy...................................................64
4.5. Hµng ®îi (Queue).....................................................................................67
4.5.1. §Þnh nghÜa.........................................................................................67
4.5.2. Lu tr÷ Queue kÕ tiÕp..........................................................................67
4.5.3. C¸c gi¶i thuËt chÌn (INSERT), xo¸ (DELETE).................................68
4.6. Bµi tËp......................................................................................................70
Ch¬ng 5: danh s¸ch mãc nèi..............................................................75
5.1. Danh s¸ch nèi ®¬n....................................................................................75
5.1.1. Nguyªn t¾c.........................................................................................75
5.1.2. Mét sè gi¶i thuËt................................................................................76
5.2. Danh s¸ch nèi vßng..................................................................................79
5.2.1. Nguyªn t¾c.........................................................................................79
5.2.2. Mét sè gi¶i thuËt................................................................................80
5.3. Danh s¸ch nèi kÐp....................................................................................81
5.3.1. Nguyªn t¾c.........................................................................................81
5.3.2. Mét sè gi¶i thuËt................................................................................81
5.4. VÝ dô ¸p dông...........................................................................................83
5.4.1. BiÓu diÔn ®a thøc...............................................................................83
5.4.2. Gi¶i thuËt céng hai ®a thøc................................................................84
5.4.3. BiÓu diÔn tËp hîp...............................................................................86
5.4.3. C¸c phÐp to¸n....................................................................................87
5.5. Ng¨n xÕp vµ Hµng ®îi mãc nèi................................................................91
5.6. CÊu tróc ®a danh s¸ch...............................................................................93
5.6.1. BiÓu diÔn ma trËn tha.........................................................................93
5.6.2. Mét sè gi¶i thuËt................................................................................95
5.7. Danh s¸ch tæng qu¸t.................................................................................99
5.7.1. §Þnh nghÜa.........................................................................................99
5.7.2. BiÓu diÔn danh s¸ch tæng qu¸t...........................................................99
5.7.3. Mét sè gi¶i thuËt xö lý danh s¸ch tæng qu¸t....................................100
5.8. Bµi tËp.....................................................................................................104
5.9. KiÓm tra..................................................................................................105
Ch¬ng 6 : c©y.............................................................................................106
6.1. §Þnh nghÜa vµ kh¸i niÖm.........................................................................106
6.2. C©y nhÞ ph©n...........................................................................................109
6.2.1. §Þnh nghÜa vµ tÝnh chÊt....................................................................109
6.2.2. BiÓu diÔn c©y nhÞ ph©n.....................................................................111
6.2.3. PhÐp duyÖt c©y nhÞ ph©n..................................................................113
6.3. C©y nhÞ ph©n nèi vßng............................................................................118
6.3.1. Kh¸i niÖm vµ lu tr÷..........................................................................118
6.3.2. C¸c gi¶i thuËt...................................................................................120
6.4. C©y tæng qu¸t.........................................................................................123
6.4.1. BiÓu diÔn c©y tæng qu¸t...................................................................123
6.4.2. Gi¶i thuËt duyÖt c©y tæng qu¸t.........................................................126
6.4.3. ¸p dông...........................................................................................127
6.5. Bµi tËp.....................................................................................................131
6.6. KiÓm tra..................................................................................................134
Ch¬ng 7 : s¾p xÕp.....................................................................................135
7.1. §Æt vÊn ®Ò...............................................................................................135
7.2. Mét sè ph¬ng ph¸p s¾p xÕp....................................................................137
7.2.1. S¾p xÕp lùa chän (selection - Sort)...................................................137
7.2.2. S¾p xÕp thªm dÇn (Insert - Sort).......................................................138
7.2.3. S¾p xÕp næi bät (Bubble - Sort)........................................................139
7.2.4. S¾p xÕp nhanh (Quick- Sort)............................................................140
7.2.5. S¾p xÕp vun ®èng (Heap –Sort)......................................................142
7.2.6. S¾p xÕp hoµ nhËp (Merge – Sort)...................................................147
7.3. Ph©n tÝch ®¸nh gi¸ c¸c thuËt to¸n...........................................................149
7.4. Bµi tËp.....................................................................................................151
Ch¬ng 8: T×m kiÕm..................................................................................153
8.1. Bµi to¸n t×m kiÕm...................................................................................153
8.2. T×m kiÕm tuÇn tù....................................................................................153
8.3. T×m kiÕm nhÞ ph©n..................................................................................154
8.4. C©y nhÞ ph©n t×m kiÕm............................................................................156
8.4.1. §Þnh nghÜa.......................................................................................156
8.4.2. C¸c gi¶i thuËt...................................................................................157
8.5. Bµi tËp – Tæng kÕt vµ «n tËp.................................................................161
tµi liÖu tham kh¶o..............................................................................187
Ch¬ng 1: më ®Çu
1.1. Gi¶i thuËt
1.1.1 Kh¸i niÖm gi¶i thuËt
Gi¶i thuËt (Algorithms): lµ mét d·y c¸c c©u lÖnh (statements) chÆt chÏ vµ râ
rµng x¸c ®Þnh mét tr×nh tù c¸c thao t¸c trªn mét sè ®èi tîng nµo ®ã sao cho sau
mét sè h÷u h¹n bíc thùc hiÖn ta ®¹t ®îc kÕt qu¶ mong muèn. §Ó minh ho¹ cho
kh¸i niÖm gi¶i thuËt ta xÐt gi¶i thuËt gi¶i bµi to¸n t×m phÇn tö lín nhÊt trong mét
d·y h÷u h¹n c¸c sè nguyªn.
Gi¶i thuËt gåm c¸c bíc sau:
Bíc 1. §Æt gi¸ trÞ cùc ®¹i t¹m thêi b»ng sè nguyªn ®Çu tiªn trong d·y.
Bíc 2. So s¸nh sè nguyªn tiÕp sau víi gi¸ trÞ cùc ®¹i t¹m thêi, nÕu nã lín h¬n
gi¸ trÞ cùc ®¹i t¹m thêi, th× ®Æt cùc ®¹i t¹m thêi b»ng sè nguyªn ®ã.
Bíc 3. LÆp l¹i bíc 2 nÕu cßn c¸c sè nguyªn trong d·y
Bíc 4. Cùc ®¹i t¹m thêi thu ®îc ë bíc nµy chÝnh lµ sè nguyªn lín nhÊt cña d·y.
1.1.2. C¸c ®Æc trng cña gi¶i thuËt
Gi¶i thuËt cã c¸c ®Æc trng sau:
§Çu vµo (Input): Gi¶i thuËt nhËn d÷ liÖu ®Çu vµo tõ mét tËp nµo ®ã.
§Çu ra (Output): Víi mçi tËp c¸c d÷ liÖu ®Çu vµo, gi¶i thuËt ®a ra c¸c d÷
liÖu t¬ng øng víi lêi gi¶i cña bµi to¸n.
TÝnh chÝnh x¸c: C¸c bíc cña mét gi¶i thuËt ph¶i ®îc x¸c ®Þnh mét c¸ch
chÝnh x¸c.
TÝnh h÷u h¹n: Mét gi¶i thuËt cÇn ph¶i t¹o ra c¸c gi¸ trÞ ®Çu ra mong
muèn sau mét sè h÷u h¹n ( nhng cã thÓ rÊt lín) c¸c bíc ®èi víi mäi tËp
®Çu vµo.
TÝnh hiÖu qu¶: Mçi bíc cña gi¶i thuËt cÇn ph¶i thùc hiÖn ®îc mét c¸ch
chÝnh x¸c vµ trong mét kho¶ng thêi gian h÷u h¹n.
TÝnh tæng qu¸t: Thñ tôc cÇn ph¶i ¸p dông ®îc cho mäi bµi to¸n cã d¹ng
mong muèn, chø kh«ng ph¶i chØ cho mét tËp ®Æc biÖt c¸c gi¸ trÞ ®Çu vµo.
VÝ dô 1.1: Cho 3 sè nguyªn a, b, c. M« t¶ gi¶i thuËt t×m sè lín nhÊt trong 3 sè ®·
cho.
Gi¶i: Tuy r»ng bµi to¸n ®Æt ra lµ rÊt ®¬n gi¶n, nhng môc ®Ých cña chóng ta lµ
dïng nã ®Ó gi¶i thÝch kh¸i niÖm gi¶i thuËt. Gi¶i thuËt gåm c¸c bíc sau:
Bíc 1: §Æt x := a;
Bíc 2: NÕu b > x th× ®Æt x := b;
Bíc 3: NÕu c > x th× ®Æt x := c;
T tëng cña gi¶i thuËt lµ duyÖt lÇn lît gi¸ trÞ cña tõng sè vµ gi÷ l¹i gi¸ trÞ lín nhÊt
vµo biÕn x. KÕt thóc gi¶i thuËt x cho sè nguyªn lín nhÊt trong 3 sè ®· cho.
1.2. CÊu tróc d÷ liÖu vµ c¸c vÊn ®Ò liªn quan
1.2.1. CÊu tróc d÷ liÖu vµ gi¶i thuËt
Cã thÓ cã lóc khi nãi ®Õn viÖc gi¶i quyÕt bµi to¸n trªn m¸y tÝnh ngêi ta chØ chó
ý ®Õn gi¶i thuËt, tuy nhiªn gi¶i thuËt chØ ph¶n ¸nh c¸c phÐp xö lý, cßn ®èi tîng ®Ó
xö lý trªn m¸y tÝnh ®iÖn tö chÝnh lµ d÷ liÖu (data), chóng biÓu diÔn c¸c th«ng tin
cÇn thiÕt cho bµi to¸n: C¸c d÷ kiÖn ®a vµo (input), c¸c kÕt qu¶ trung gian,...B¶n
th©n c¸c phÇn tö cña d÷ liÖu thêng cã mèi quan hÖ víi nhau: Víi mét m« t¶ kiÓu
d÷ liÖu trõu tîng cã thÓ cã nhiÒu c¸ch cµi ®Æt kh¸c nhau ®Ó h×nh thµnh nhiÒu cÊu
tróc d÷ liÖu kh¸c nhau. Ngoµi ra, nÕu l¹i biÕt “tæ chøc” theo cÊu tróc thÝch hîp th×
viÖc thùc hiÖn c¸c phÐp xö lý trªn c¸c d÷ liÖu sÏ cµng thuËn lîi h¬n, ®¹t hiÖu qu¶
cao h¬n. Víi mét cÊu tróc d÷ liÖu ®· chän ta sÏ cã gi¶i thuËt xö lý t¬ng øng. CÊu
tróc d÷ liÖu thay ®æi, gi¶i thuËt còng thay ®æi theo.
Nh vËy, gi÷a cÊu tróc d÷ liÖu vµ gi¶i thuËt cã mèi quan hÖ mËt thiÕt: Kh«ng thÓ
nãi tíi gi¶i thuËt mµ kh«ng nghÜ tíi gi¶i thuËt ®ã ®îc t¸c ®éng trªn cÊu tróc d÷
liÖu nµo, cßn khi xÐt tíi cÊu tróc d÷ liÖu th× còng ph¶i xÐt ®Õn d÷ liÖu ®ã cÇn ®îc
t¸c ®éng gi¶i thuËt g× ®Ó ®a l¹i kÕt qu¶ mong muèn.
1.2.2. CÊu tróc d÷ liÖu vµ ng«n ng÷ lËp tr×nh
C¸c ng«n ng÷ lËp tr×nh ngoµi viÖc cung cÊp c¸c kiÓu d÷ liÖu c¬ b¶n, nã cßn
cung cÊp c¬ chÕ hiÖu qu¶ vµ dÔ sö dông cho phÐp chóng ta ®Þnh nghÜa c¸c kiÓu d÷
liÖu míi (kiÓu d÷ liÖu trõu tîng) theo yªu cÇu. ViÖc chän mét ng«n ng÷ lËp tr×nh
tøc lµ chÊp nhËn c¸c cÊu tróc tiÒn ®Þnh cña ng«n ng÷ Êy vµ ph¶i biÕt linh ho¹t vËn
dông chóng ®Ó m« pháng c¸c cÊu tróc d÷ liÖu ®· cho cho bµi to¸n cÇn gi¶i quyÕt.
Tuy nhiªn, trong thùc tÕ viÖc lùa chän mét ng«n ng÷ kh«ng ph¶i chØ xuÊt ph¸t
tõ yªu cÇu cña bµi to¸n mµ cßn phô thuéc vµo rÊt nhiÒu yÕu tè kh¸ch quan còng
nh chñ quan cña ngêi lËp tr×nh n÷a. Tho¹t ®Çu, khi øng dông cña m¸y tÝnh ®iÖn tö
chØ míi cã trong ph¹m vi c¸c bµi to¸n khoa häc kü thuËt th× ta chØ gÆp c¸c cÊu
tróc d÷ liÖu ®¬n gi¶n nh biÕn, vÐct¬, ma trËn,...nhng khi c¸c øng dông ®ã ®· ®îc
më réng sang c¸c lÜnh vùc kh¸c mµ ta thêng gäi lµ bµi to¸n phi sè (non-numerical
proplems), víi ®Æc ®iÓm thÓ hiÖn ë chç: khèi lîng d÷ liÖu lín, ®a d¹ng, biÕn
®éng; phÐp xö lý thêng kh«ng chØ lµ c¸c phÐp sè häc..th× c¸c cÊu tróc d÷ liÖu tiÒn
®Þnh do c¸c ng«n ng÷ lËp tr×nh cung cÊp thêng kh«ng ®ñ ®Æc trng cho c¸c mèi
quan hÖ míi cña d÷ liÖu míi. V× vËy, viÖc ®i s©u nghiªn cøu c¸c cÊu tróc d÷ liÖu
phøc t¹p h¬n chÝnh lµ sù quan t©m cña chóng ta trong gi¸o tr×nh nµy.
Bµi bµi to¸n phi sè ®i ®«i víi c¸c cÊu tróc d÷ liªu míi còng xuÊt hiÖn c¸c phÐp
to¸n míi t¸c ®éng trªn c¸c cÊu tróc d÷ liÖu nµy, c¸c phÐp to¸n ®ã sÏ cã nh÷ng t¸c
dông kh¸c nhau ®èi víi tõng cÊu tróc d÷ liÖu. Cã phÐp h÷u hiÖu ®èi víi cÊu tróc
nµy nhng l¹i tá ra kh«ng h÷u hiÖu trªn cÊu tróc kh¸c.
C¸ch biÓu diÔn mét cÊu tróc d÷ liÖu trong bé nhí ®îc gäi lµ cÊu tróc lu tr÷. §ã
chÝnh lµ c¸ch cµi ®Æt cÊu tróc Êy trªn m¸y tÝnh ®iÖn tö vµ trªn c¬ së c¸c cÊu tróc lu tr÷ nµy mµ ta thùc hiÖn c¸c phÐp xö lý. Cã thÓ cã nhiÒu cÊu tróc lu tr÷ kh¸c
nhau cho cïng mét cÊu tróc d÷ liÖu; còng nh cã nh÷ng cÊu tróc d÷ liÖu kh¸c nhau
mµ ®îc thÓ hiÖn trong bé nhí bëi cïng mét kiÓu cÊu tróc lu tr÷. Khi ®Ò cËp ®Õn
cÊu tróc lu tr÷ ta còng cÇn ph©n biÖt cÊu tróc lu tr÷ t¬ng øng víi bé nhí trong- lu
tr÷ trong, hay øng víi bé nhí ngoµi- lu tr÷ ngoµi.
1.3. Ng«n ng÷ diÔn ®¹t gi¶i thuËt
1.3.1. §Æt vÊn ®Ò
§Ó diÔn ®¹t c¸c gi¶i thuËt mµ ta sÏ tr×nh bµy trong gi¸o tr×nh, ta cÇn mét ng«n
ng÷ diÔn ®¹t. Ta cã thÓ lùa chän mét ng«n ng÷ lËp tr×nh nµo ®ã nh C, Pascal, v.v...
, nhng nh vËy ta sÏ gÆp mÊy h¹n chÕ sau:
- Ph¶i lu«n lu«n tu©n thñ c¸c quy t¾c chÆt chÏ vÒ có ph¸p cña ng«n ng÷ ®ã,
khiÕn cho viÖc tr×nh bµy vÒ gi¶i thuËt vµ cÊu tróc d÷ liÖu cã thiªn híng nÆng
nÒ, gß bã.
- Ph¶i phô thuéc vµo cÊu tróc d÷ liÖu tiÒn ®Þnh cña ng«n ng÷, nªn cã lóc
kh«ng thÓ hiÖn ®îc ®Çy ®ñ c¸c ý nghÜa vÒ cÊu tróc mµ ta muèn biÓu ®¹t.
- Ng«n ng÷ nµo ®îc chän còng kh«ng h¼n ®· ®îc mäi ngêi a thÝch vµ muèn
sö dông.
V× vËy, ë ®©y ta sÏ dïng mét ng«n ng÷ “th« h¬n”, cã ®ñ kh¶ n¨ng diÔn ®¹t ®îc
gi¶i thuËt trªn c¸c cÊu tróc ®Ò cËp ®Õn (mµ ta giíi thiÖu b»ng tiÕng ViÖt), víi mét
møc ®é linh ho¹t nhÊt ®Þnh, kh«ng qu¸ gß bã, kh«ng c©u nÖ nhiÒu vÒ có ph¸p nhng còng gÇn gòi víi c¸c ng«n ng÷ chuÈn, ®Ó khi cÇn thiÕt dÔ dµng chuyÓn ®æi. Ta
t¹m gäi nã b»ng c¸i tªn: “ng«n ng÷ tùa PASCAL”.
1.3.2. Quy c¸ch vÒ cÊu tróc ch¬ng tr×nh
Mçi ch¬ng tr×nh ®Òu ®îc g¾n mét tªn ®Ó ph©n biÖt, tªn nµy ®îc viÕt b»ng ch÷
in hoa, cã thÓ cã thªm dÊu g¹ch nèi vµ b¾t ®Çu b»ng tõ kho¸ Program.
VÝ dô 1.2: Program NHAN_MA_TRAN
§é dµi cña tªn kh«ng h¹n chÕ.
Sau tªn cã thÓ kÌm theo lêi thuyÕt minh (ë ®©y ta quy íc dïng tiÕng ViÖt) ®Ó
giíi thiÖu tãm t¾t nhiÖm vô cña gi¶i thuËt hoÆc mét sè chi tiÕt cÇn thiÕt. PhÇn
thuyÕt minh ®îc ®Æt gi÷a hai dÊu { …….. }.
Ch¬ng tr×nh bao gåm nhiÒu ®o¹n (bíc), mçi ®o¹n ®îc ph©n biÖt bëi sè thø tù,
cã thÓ kÌm theo nh÷ng lêi thuyÕt minh.
1.3.3. Ký tù vµ biÓu thøc
Ký tù dïng ë ®©y còng gièng nh trong c¸c ng«n ng÷ chuÈn, nghÜa lµ gåm:
- 26 ch÷ c¸i latinh in hoa hoÆc in thêng.
- 10 ch÷ sè thËp ph©n.
- C¸c dÊu phÐp to¸n sè häc +, -, *, /, (luü thõa)
- C¸c dÊu phÐp to¸n quan hÖ <, =, >, ≤, ≥, ≠
- Gi¸ trÞ logic: true, false
- DÊu phÐp to¸n logic: and, or, not
- Tªn biÕn: d·y ch÷ c¸i vµ ch÷ sè, b¾t ®Çu b»ng ch÷ c¸i.
- BiÕn chØ sè cã d¹ng: A[i], B[i, j], v.v...
Cßn biÓu thøc còng nh thø tù u tiªn cña c¸c phÐp to¸n trong biÓu thøc còng
theo quy t¾c nh trong PASCAL hay c¸c ng«n ng÷ chuÈn kh¸c.
1.3.4. C¸c c©u lÖnh
C¸c c©u lÖnh trong ch¬ng tr×nh ®îc viÕt c¸ch nhau bëi dÊu ; chóng bao gåm:
1- C©u lÖnh g¸n
Cã d¹ng V := E;
Víi V chØ tªn biÕn, tªn hµm; E chØ biÓu thøc. ë ®©y cho phÐp dïng phÐp g¸n
chung.
VÝ dô: A :=B := 0.1;
2- C©u lÖnh ghÐp
Cã d¹ng: begin S1; S2; …; Sn; end;
Víi Si (i = 1, .., n) lµ c¸c c©u lÖnh. Nã cho phÐp ghÐp nhiÒu c©u lÖnh l¹i ®Ó ®îc
coi nh mét c©u lÖnh.
3- C©u lÖnh ®iÒu kiÖn
Cã d¹ng:
if B then S;
Víi B lµ biÓu thøc logic,
S lµ mét c©u lÖnh kh¸c.
Cã thÓ diÔn t¶ bëi s¬ ®å
B
true
S
hoÆc
then
false
if
B
else S2;
B
true
S1
false
S2
S1
4- C©u lÖnh tuyÓn
Cã d¹ng: Case
B1: S1;
….
Bn: Sn;
Else: Sn+1;
End case;
Víi Bi (i = 1, 2, .., n) lµ c¸c ®iÒu kiÖn, S i (i = 1, 2, .., n) lµ c¸c c©u lÖnh. C©u
lÖnh nµy cho phÐp ph©n biÖt c¸c t×nh huèng xö lý kh¸c nhau trong c¸c ®iÒu kiÖn
kh¸c nhau mµ kh«ng ph¶i dïng tíi c¸c c©u lÖnh if- then- else lång nhau. Cã thÓ
biÓu diÔn bëi s¬ ®å:
B1
false
true
B2
true
S1
false…
Bn
false
Sn+1
true
S2
S2
Vµi ®iÓm linh ®éng
Else cã thÓ kh«ng cã mÆt. S i (i = 1, 2, .., n) cã thÓ ®îc thay b»ng mét d·y
c¸c c©u lÖnh thÓ hiÖn mét d·y xö lý khi cã ®iÒu kiÖn B i mµ kh«ng cÇn ph¶i ®Æt
gi÷a begin vµ end.
5- C©u lÖnh lÆp
Víi sè lÇn lÆp biÕt tríc.
For i := m to n do S;
Nh»m thùc hiÖn c©u lÖnh S víi i lÊy gi¸ trÞ nguyªn tõ m tíi n ( n >= m) víi bíc
nh¶y t¨ng b»ng 1;
HoÆc:
For i:= n downto m do S;
T¬ng tù nh c©u lÖnh trªn víi bíc nh¶y gi¶m b»ng 1.
Víi sè lÇn lÆp kh«ng biÕt tríc
While B do S;
true
B
S
false
Chõng nµo mµ B cã gi¸ trÞ b»ng true th× thùc hiÖn S
HoÆc:
Repeat S until B;
LÆp l¹i S cho tíi khi B cã gi¸ trÞ true (S cã thÓ lµ mét d·y lÖnh)
S
B
true
false
6- C©u lÖnh chuyÓn
Goto n; (n lµ sè hiÖu cña mét bíc trong ch¬ng tr×nh)
Thêng ngêi ta h¹n chÕ viÖc sö dông goto. Tuy nhiªn, víi môc ®Ých diÔn ®¹t
cho tù nhiªn, trong mét chõng mùc nµo ®ã ta vÉn sö dông.
7- C©u lÖnh vµo, ra
Cã d¹ng:
Read ();
Write ();
C¸c biÕn trong danh s¸ch c¸ch nhau bëi dÊu phÈy. Dßng ký tù lµ mét d·y c¸c
ký tù ®Æt gi÷a hai dÊu nh¸y ‘ vµ ‘.
8- C©u lÖnh kÕt thóc ch¬ng tr×nh.
End.
1.3.4 Ch¬ng tr×nh con.
Ch¬ng tr×nh con hµm
Cã d¹ng:
Function ()
S1; S2; … ; Sn;
Return ;
C©u lÖnh kÕt thóc ch¬ng tr×nh con ë ®©y lµ return thay cho end.
Ch¬ng tr×nh con thñ tôc
Procedure ()
S1; S2; … ; Sn;
Return ;
Lêi gäi ch¬ng tr×nh con hµm thÓ hiÖn b»ng tªn hµm cïng danh s¸ch tham sè
thùc sù, n»m trong biÓu thøc. Cßn víi ch¬ng tr×nh con thñ tôc lêi gäi ®îc thÓ hiÖn
b»ng c©u lÖnh call cã d¹ng:
Call ()
Chó ý: Trong c¸c ch¬ng tr×nh diÔn ®¹t mét sè gi¶i thuËt ë ®©y phÇn khai b¸o
d÷ liÖu ®îc bá qua. Nã ®îc thay bëi phÇn m« t¶ cÊu tróc d÷ liÖu b»ng ng«n ng÷ tù
nhiªn, mµ ta sÏ nªu ra tríc khi bíc vµo gi¶i thuËt.
Nh vËy, nghÜa lµ c¸c ch¬ng tr×nh ®îc nªu ra chØ lµ ®o¹n thÓ hiÖn c¸c phÐp xö lý
theo gi¶i thuËt ®· ®Þnh, trªn c¸c cÊu tróc d÷ liÖu ®îc m« t¶ tríc ®ã, b»ng ng«n
ng÷ tù nhiªn.
Ch¬ng 2 : ThiÕt kÕ vµ ph©n tÝch gi¶i thuËt
2.1. Tõ bµi to¸n ®Õn ch¬ng tr×nh
2.1.1 M« - ®un ho¸ vµ viÖc gi¶i quyÕt bµi to¸n
C¸c bµi to¸n ®îc gi¶i trªn m¸y tÝnh ®iÖn tö ngµy cµng ®a d¹ng vµ phøc t¹p. C¸c
gi¶i thuËt vµ ch¬ng tr×nh ®Ó gi¶i chóng còng ngµy cµng cã quy m« lín vµ cµng
khã khi thiÕt lËp còng nh khi muèn t×m hiÓu.
Tuy nhiªn, ta còng thÊy r»ng mäi viÖc sÏ ®¬n gi¶n h¬n nÕu nh cã thÓ ph©n chia
bµi to¸n lín cña ta thµnh c¸c bµi to¸n nhá. §iÒu ®ã còng cã nghÜa lµ nÕu coi bµi
to¸n cña ta nh mét m«-®un chÝnh th× cÇn chia nã thµnh c¸c m«-®un con, vµ dÜ
nhiªn, víi tinh thÇn nh thÕ, ®Õn lît nã, mçi m«-®un nµy l¹i ®îc ph©n chia tiÕp cho
tíi nh÷ng m«-®un øng víi c¸c phÇn viÖc c¬ b¶n mµ ta ®· biÕt c¸ch gi¶i quyÕt. Nh
vËy, viÖc tæ chøc lêi gi¶i cña bµi to¸n sÏ ®îc thÓ hiÖn theo mét cÊu tróc ph©n cÊp,
cã d¹ng nh h×nh sau:
A
B
E
F
C
G
D
H
I
H×nh 2.1
ChiÕn thuËt gi¶i quyÕt bµi to¸n theo tinh thÇn nh vËy chÝnh lµ chiÕn thuËt “chia
®Ó trÞ” (divide and conquer). §Ó thÓ hiÖn chiÕn thuËt ®ã, ngêi ta dïng c¸ch thiÕt
kÕ “®Ønh- xuèng” (top-down design). §ã lµ c¸ch ph©n tÝch tæng qu¸t toµn bé vÊn
®Ò, xuÊt ph¸t tõ d÷ kiÖn vµ c¸c môc tiªu ®Æt ra, ®Ó ®Ò cËp ®Õn nh÷ng c«ng viÖc
chñ yÕu, råi sau ®ã míi ®i dÇn vµo gi¶i quyÕt c¸c phÇn cô thÓ mét c¸ch chi tiÕt
h¬n (còng v× vËy mµ ngêi ta gäi lµ c¸ch thiÕt kÕ tõ kh¸i qu¸t ®Õn chi tiÕt). VÝ dô ta
nhËn ®îc tõ chñ tÞch héi ®ång xÐt cÊp häc bæng cña trêng mét yªu cÇu lµ:
“Dïng m¸y tÝnh ®iÖn tö ®Ó qu¶n lý vµ b¶o tr× hå s¬ vÒ häc bæng cña c¸c sinh
viªn ë diÖn ®îc tµi trî, ®ång thêi thêng kú ph¶i lËp c¸c b¸o c¸o tæng kÕt ®Ó ®Ö
tr×nh lªn bé”
Nh vËy, tríc hÕt ta ph¶i h×nh dung ®îc cô thÓ h¬n ®Çu vµo vµ ®Çu ra cña bµi
to¸n. Cã thÓ coi nh ta ®· cã mét tËp hå s¬ (mµ ta gäi lµ tÖp file) bao gåm c¸c b¶n
ghi (records) vÒ c¸c th«ng tin liªn quan tíi häc bæng cña sinh viªn, Ch¼ng h¹n: sè
hiÖu sinh viªn, ®iÓm trung b×nh (theo häc kú), ®iÓm ®¹o ®øc, kho¶n tiÒn tµi trî.
Vµ ch¬ng tr×nh lËp ra ph¶i t¹o ®iÒu kiÖn cho ngêi sö dông gi¶i quyÕt ®îc c¸c yªu
cÇu sau:
1. T×m l¹i vµ hiÓn thÞ ®îc b¶n ghi cña bÊt kú sinh viªn nµo t¹i thiÕt bÞ cuèi
(terminal) cña ngêi dïng.
2. CËp nhËp (update) ®îc b¶n ghi cña mét sinh viªn cho tríc b»ng c¸ch thay
®æi ®iÓm trung b×nh, ®iÓm ®¹o ®øc, kho¶n tiÒn tµi trî, nÕu cÇn.
3. In b¶n tæng kÕt chøa nh÷ng th«ng tin hiÖn thêi ( ®· ®îc cËp nhËp mçi khi
cã thay ®æi) gåm sè liÖu, ®iÓm trung b×nh, ®iÓm ®¹o ®øc, kho¶n tiÒn tµi trî.
XuÊt ph¸t tõ nh÷ng nhËn ®Þnh nªu trªn, gi¶i thuËt xö lý sÏ ph¶i gi¶i quyÕt ba
nhiÖm vô chÝnh nh sau:
1. Nh÷ng th«ng tin vÒ sinh viªn ®îc häc bæng, lu tr÷ trªn ®Üa ph¶i ®îc ®äc
vµo bé nhí trong ®Ó cã thÓ xö lý ( ta gäi lµ nhiÖm vô “®äc tÖp”).
2. Xö lý c¸c th«ng tin nµy ®Ó t¹o ra kÕt qu¶ mong muèn (nhiÖm vô ”xö lý
tÖp”).
3. Sao chÐp nh÷ng th«ng tin ®· ®îc cËp nhËp vµo tÖp trªn ®Üa ®Ó lu tr÷ cho
viÖc xö lý sau nµy (nhiÖm vô ”ghi tÖp”)
Cã thÓ h×nh dung, c¸ch thiÕt kÕ nµy theo s¬ ®å cÊu tróc ë h×nh 2.2.
HÖ hç trî qu¶n lý häc
bæng
§äc tÖp
Xö lý tÖp
Ghi tÖp
H×nh 2.2
C¸c nhiÖm vô ë møc ®Çu nµy thêng t¬ng ®èi phøc t¹p, cÇn ph¶i chia thµnh c¸c
nhiÖm vô con. Ch¼ng h¹n nhiÖm vô “xö lý tÖp” sÏ ®îc ph©n thµnh ba, t¬ng øng
víi viÖc gi¶i quyÕt ba yªu cÇu chÝnh ®· ®îc nªu ë trªn:
1) T×m l¹i b¶n ghi cña mét sinh viªn cho tríc
2) CËp nhËp th«ng tin trong b¶n ghi sinh viªn
3) In b¶n tæng kÕt nh÷ng th«ng tin vÒ c¸c sinh viªn ®îc häc bæng.
Nh÷ng nhiÖm vô con nµy còng cã thÓ ®îc chia thµnh nh÷ng nhiÖm vô nhá h¬n.
Cã thÓ h×nh dung theo s¬ ®å cÊu tróc nh sau:
Xö lý tÖp
T×m b¶n ghi
T×m kiÕm
HiÓn thÞ b¶n ghi
CËp nhËt b¶n ghi
T×m kiÕm
In b¶n tæng
CËp nhËt
H×nh 2.3
C¸ch thiÕt kÕ gi¶i thuËt theo kiÓu top-down nh trªn gióp cho viÖc gi¶i quyÕt bµi
to¸n ®îc ®Þnh híng râ rµng, tr¸nh sa ®µ ngay vµo c¸c chi tiÕt phô. Nã còng lµ nÒn
t¶ng cho viÖc lËp tr×nh cã cÊu tróc.
Th«ng thêng ®èi víi c¸c bµi to¸n lín, viÖc gi¶i quyÕt nã ph¶i do nhiÒu ngêi
cïng lµm. ChÝnh ph¬ng ph¸p m«-®un hãa sÏ cho phÐp t¸ch bµi to¸n ra thµnh c¸c
phÇn ®éc lËp t¹o ®iÒu kiÖn cho c¸c nhãm gi¶i quyÕt phÇn viÖc cña m×nh mµ
kh«ng lµm ¶nh hëng g× ®Õn nhãm kh¸c. Víi ch¬ng tr×nh ®îc x©y dùng trªn c¬ së
cña c¸c gi¶i thuËt ®îc thiÕt kÕ theo c¸ch nµy th× viÖc t×m hiÓu còng nh söa ch÷a,
chØnh lý sÏ dÔ dµng h¬n.
ViÖc ph©n bµi to¸n thµnh c¸c bµi to¸n con nh thÕ kh«ng ph¶i lµ mét viÖc lµm
dÔ dµng. ChÝnh v× vËy mµ cã nh÷ng bµi to¸n nhiÖm vô ph©n tÝch vµ thiÕt kÕ gi¶i
thuËt gi¶i bµi to¸n ®ã cßn mÊt nhiÒu thêi gian vµ c«ng søc h¬n c¶ nhiÖm vô lËp
tr×nh.
2.1.2. Ph¬ng ph¸p tinh chØnh tõng bíc
1) Ph¬ng ph¸p
Tinh chØnh tõng bíc lµ ph¬ng ph¸p thiÕt kÕ gi¶i thuËt g¾n liÒn víi lËp tr×nh. Nã
ph¶n ¸nh tinh thÇn cña qu¸ tr×nh m«-®un ho¸ bµi to¸n thiÕt kÕ kiÓu top-down.
Tho¹t ®Çu ch¬ng tr×nh thÓ hiÖn gi¶i thuËt ®îc tr×nh bµy b»ng ng«n ng÷ tù nhiªn
ph¶n ¸nh ý chÝnh cña c«ng viÖc cÇn lµm. Tõ c¸c bíc sau nh÷ng lêi, nh÷ng ý ®ã sÏ
®îc chi tiÕt ho¸ dÇn dÇn t¬ng øng víi nh÷ng c«ng viÖc nhá h¬n. Ta gäi ®ã lµ c¸c
bíc tinh chØnh, sù tinh chØnh nµy sÏ ®îc híng vÒ phÝa ng«n ng÷ lËp tr×nh mµ ta ®·
chän. Cµng ë c¸c bíc sau c¸c lêi lÏ ®Æc t¶ c«ng viÖc xö lý sÏ ®îc thay thÕ dÇn bëi
c¸c c©u lÖnh híng tíi c©u lÖnh cña ng«n ng÷ lËp tr×nh. Muèn vËy, ë c¸c giai ®o¹n
trung gian ngêi ta thêng dïng pha t¹p c¶ ng«n ng÷ tù nhiªn lÉn ng«n ng÷ lËp
tr×nh, mµ ngêi ta gäi lµ gi¶ ng«n ng÷ (pseudo-language) hay gi¶ m· (pseudo
code). Nh vËy, nghÜa lµ qu¸ tr×nh thiÕt kÕ gi¶i thuËt vµ ph¸t triÓn ch¬ng tr×nh sÏ ®îc thÓ hiÖn dÇn dÇn tõ d¹ng ng«n ng÷ tù nhiªn, qua gi¶ ng«n ng÷ råi ®Õn ng«n
ng÷ lËp tr×nh vµ ®i tõ møc “lµ c¸i g×” ®Õn møc “lµm thÕ nµo”, ngµy cµng s¸t víi
c¸c chøc n¨ng øng víi c¸c c©u lÖnh cña ng«n ng÷ lËp tr×nh ®· chän. Trong qu¸
tr×nh nµy d÷ liÖu còng ®îc “tinh chÕ” tõ d¹ng cÊu tróc ®Õn d¹ng lu tr÷ cµi ®Æt cô
thÓ.
2) Bµi to¸n s¾p xÕp
Gi¶ sö ta muèn lËp mét ch¬ng tr×nh s¾p xÕp mét d·y n sè nguyªn kh¸c
nhau theo thø tù t¨ng dÇn.
Cã thÓ ph¸c th¶o gi¶i thuËt nh sau: “Tõ d·y c¸c sè nguyªn cha ®îc s¾p xÕp
chän ra sè nhá nhÊt, ®Æt nã vµo cuèi d·y ®· ®îc s¾p xÕp. Cø lÆp l¹i quy tr×nh ®ã
cho tíi khi d·y cha ®îc s¾p xÕp chØ cßn mét sè”.
Ta thÊy ph¸c ho¹ trªn cßn ®ang rÊt th«, nã chØ thÓ hiÖn nh÷ng ý c¬ b¶n. H×nh
dung cô thÓ h¬n mét chót ta thÊy, tho¹t ®Çu d·y sè cha ®îc s¾p xÕp chÝnh lµ d·y
sè ®· cho. D·y sè ®· ®îc s¾p xÕp cßn rçng, cha cã phÇn tö nµo. VËy th× nÕu chän
®îc sè nhá nhÊt ®Çu tiªn vµ ®Æt vµo cuèi d·y ®· ®îc s¾p th× còng chÝnh lµ ®Æt vµo
vÞ trÝ ®Çu tiªn cña d·y nµy. Nhng d·y nµy ®Æt ë ®©u?
ThÕ th× ph¶i hiÓu d·y sè mµ ta sÏ s¾p xÕp ®îc ®Æt t¹i chç cò hay ®Æt ë chç
kh¸c? §iÒu ®ã ®ßi hái ph¶i chi tiÕt h¬n vÒ cÊu tróc d÷ liÖu vµ cÊu tróc lu tr÷ cña
d·y sè cho.
Tríc hÕt ta Ên ®Þnh: d·y sè cho ë ®©y ®îc coi nh d·y c¸c phÇn tö cña mét vect¬
(sau nµy ta nãi: nã cã cÊu tróc cña m¶ng mét chiÒu) vµ d·y nµy ®îc lu tr÷ bëi mét
vect¬ lu tr÷ gåm n tõ m¸y kÕ tiÕp ë bé nhí trong (a 1, a2, .., an) mçi tõ m¸y ai lu tr÷
phÇn tö thø i (1 ≤ i ≤ n) cña d·y sè.
Ta còng qui íc: d·y sè ®îc s¾p xÕp råi vÉn ®Ó t¹i chç cò nh d·y ®· cho.
VËy th× viÖc ®Æt “sè nhá nhÊt” võa ®îc chän, ë mét lît nµo ®ã, vµo cuèi d·y ®·
®îc s¾p xÕp ph¶i thùc hiÖn b»ng c¸ch ®æi chç cho sè hiÖn ®ang ë vÞ trÝ ®ã (nÕu
nh nã kh¸c sè nµy).
Gi¶ sö ta ®ang ®Þnh híng ch¬ng tr×nh cña ta vµo vµo ng«n ng÷ tùa PASCAL,
nªu ë ch¬ng 1, th× bíc tinh chØnh ®Çu tiªn sÏ nh sau:
For i :=1 to n-1 do
begin
-
XÐt tõ ai ®Õn an ®Ó t×m sè nhá nhÊt aj
-
§æi chç gi÷a ai vµ aj nÕu ai kh¸c aj
end
Tíi ®©y ta thÊy cã hai nhiÖm vô con, cÇn lµm râ thªm.
1. T×m sè nguyªn nhá nhÊt aj trong c¸c sè tõ ai ®Õn an
2. §æi chç gi÷a aj víi ai nÕu ai kh¸c aj
NhiÖm vô ®Çu cã thÓ thùc hiÖn b»ng c¸ch:
“Tho¹t tiªn coi ai lµ “sè nhá nhÊt” t¹m thêi; lÇn lît so s¸nh ai víi ai+1, ai+2, v.v…
Khi thÊy sè nµo nhá h¬n th× l¹i coi ®ã lµ “sè nhá nhÊt” míi. Khi ®· so s¸nh víi a n
råi th× sè nhá nhÊt sÏ ®îc x¸c ®Þnh”
Nhng x¸c ®Þnh b»ng c¸ch nµo? Cã thÓ b»ng c¸ch chØ ra chç cña nã, nghÜa lµ
n¾m ®îc chØ sè cña phÇn tö Êy. Ta cã bíc tinh chØnh 2.1:
j := i;
For k :=j +1 to n do
If ak < aj then j := k;
Víi nhiÖm vô thø hai th× cã thÓ gi¶i quyÕt b»ng c¸ch t¬ng tù nh khi ta muèn
chuyÓn hai thø rîu trong hai ly, tõ ly nä sang ly kia: ta sÏ ph¶i dïng mét ly thø ba
(kh«ng ®ùng g×) ®Ó lµm ly trung chuyÓn. Ta cã bíc tinh chØnh 2.2:
B := ai ;
ai := aj ; aj := B;
Sau khi ®· chØnh l¹i c¸ch viÕt biÕn chØ sè cho ®óng víi quy íc ta cã ch¬ng
tr×nh s¾p xÕp díi d¹ng thñ tôc nh sau:
Procedure SORT (A, n)
1. for i := 1 to n-1 do
begin
2. j := i;{chän sè nhá nhÊt}
for k :=j +1 to n do
if A[k] < A[j] then j := k;
3. if A[i] ≠ A[j] then
begin
B := A[i]; A[i] := A[j]; A[j] := B; {§æi chç}
end;
end;
4. Return;
3) Bµi to¸n hiÓn thÞ c¸c ®êng chÐo cña ma trËn
Ph¸t biÓu bµi to¸n: Cho mét ma trËn vu«ng n x n c¸c sè nguyªn. H·y in ra c¸c
phÇn tö thuéc ®êng chÐo song song víi ®êng chÐo chÝnh.
VÝ dô: Cho ma trËn vu«ng víi n = 3
3
5
11
4
7
9
2
0
8
Gi¶ sö ta chän c¸ch in tõ ph¶i sang tr¸i, th× cã kÕt qu¶:
11
5
0
3
7
4
2
8
9
Ta sÏ híng viÖc thÓ hiÖn gi¶i thuËt vÒ mét ch¬ng tr×nh PASCAL. Gi¶i thuËt cã
thÓ ph¸c ho¹ nh sau:
1- NhËp n
2- NhËp c¸c phÇn tö cña ma trËn
3- In c¸c ®êng chÐo song song víi ®êng chÐo chÝnh
Hai nhiÖm vô 1 vµ 2 cã thÓ diÔn ®¹t dÔ dµng b»ng PASCAL:
1.
readln (n);
2.
for i := 1 to n do
for j := 1 to n do readln(a[i, j]);
NhiÖm vô 3 cÇn ph©n tÝch kü h¬n. Ta thÊy vÒ ®êng chÐo, cã thÓ ph©n lµm hai
lo¹i:
- §êng chÐo øng víi cét tõ n ®Õn 1
- §êng chÐo øng víi hµng tõ 2 ®Õn n
V× vËy, ta t¸ch thµnh hai nhiÖm vô con:
3.1. for j := n down to 1 do { in ®êng chÐo øng víi cét j }
3.2. for i := 2 to n do { in ®êng chÐo øng víi hµng i }
Tíi ®©y ta l¹i ph¶i chi tiÕt h¬n c«ng viÖc: “in ®êng chÐo øng cét j”
Víi j = n th× in mét phÇn tö hµng 1 cét j
j = n - 1 th× in 2 phÇn tö hµng 1 cét j vµ hµng 2 cét j + 1
j = n - 2 th× in 3 phÇn tö hµng 1 cét j, hµng 2 cét j + 1 vµ hµng 3 cét j + 2
Ta thÊy sè lîng c¸c phÇn tö ®îc in chÝnh lµ (n- j + 1), cßn phÇn tö ®îc in chÝnh
lµ A[i, j + i-1], víi i lÊy gi¸ trÞ tõ 1 tíi (n- j + 1)
VËy 3.1 cã thÓ tinh chØnh tiÕp t¸c vô “in ®êng chÐo øng víi cét j” thµnh:
for i := 1 to (n-j +1) do Write (a[i, j + i - 1] : 8);
Writeln;
ë ®©y, ta tËn dông kh¶ n¨ng cña PASCAL ®Ó in mçi phÇn tö trong mét qu·ng 8
vµ mçi ®êng chÐo sÏ ®îc in trªn mét dßng, sau ®ã ®Ó c¸ch mét dßng trèng.
Víi 3.2 còng t¬ng tù
for j := 1 to n- i + 1 do Write (a[i + j - 1, j)]:8);
Writeln;
§Ó cã mét ch¬ng tr×nh Pascal hoµn chØnh tÊt nhiªn ta ph¶i tu©n thñ mäi quy
®Þnh cña PASCAL: ch¼ng h¹n tríc khi bíc vµo phÇn c©u lÖnh thÓ hiÖn phÇn xö lý,
ph¶i cã phÇn khai b¸o d÷ liÖu.
Ngoµi ra cã thÓ thªm vµo phÇn thuyÕt minh cho c¸c bíc (víi mét ngo¹i lÖ lµ ta
viÕt b»ng tiÕng ViÖt).
Sau ®©y lµ ch¬ng tr×nh hoµn chØnh:
Program INCHEO;
Const
max = 30;
Type
matran = array [1…max, 1…max] of integer;
Var
a: matran; n, i, j:integer;
Begin
Repeat
Write (‘nhËp kÝch thíc n cña ma trËn’); Readln (n);
Until (0 < n) and (n <= max);
Writeln (‘NhËp phÇn tö ma trËn’);
For i := 1 to n do
For j := 1 to n do readln (a[i, j]);
Writeln (‘In c¸c ®êng chÐo’)
For j := n downto 1 do
Begin
For i := 1 to n- j + 1 do Write (a[i, j + i - 1] : Writeln;
End;
For i := 2 to n do
Begin
For j := 1 to n- i + 1 do Write(a[i + j - 1, j] : 8);
Writeln;
End;
End.
4) Bµi to¸n thiÕt lËp quy tr×nh ®iÒu khiÓn ®Ìn giao th«ng
Ph¸t biÓu bµi to¸n: Gi¶ sö ta cÇn thiÕt lËp mét quy tr×nh ®Ìn giao th«ng ë mét
chèt giao th«ng phøc t¹p, cã nhiÒu giao lé.
Nh vËy nghÜa lµ ®iÒu khiÓn ®Ìn b¸o sao cho trong mét kho¶ng thêi gian Ên
®Þnh mét sè tuyÕn ®êng ®îc th«ng, trong khi mét sè tuyÕn kh¸c bÞ cÊm, tr¸nh x¶y
ra ®ông ®é.
§èi víi bµi to¸n nµy ta thÊy: Ta nhËn ë ®Çu vµo mét sè tuyÕn ®êng cho phÐp
(t¹i chèt giao th«ng ®ã) vµ ph¶i ph©n ho¹ch tËp nµy thµnh mét sè Ýt nhÊt c¸c
nhãm, sao cho mäi tuyÕn trong mét nhãm ®Òu cã thÓ cho th«ng ®ång thêi mµ
kh«ng x¶y ra ®ông ®é. Ta sÏ g¾n mçi pha cña viÖc ®iÒu khiÓn ®Ìn giao th«ng víi
mét nhãm trong ph©n ho¹ch nµy vµ viÖc t×m mét ph©n ho¹ch víi sè pha Ýt nhÊt.
§iÒu ®ã cã nghÜa lµ thêi gian chê ®îi tèi ®a ®Ó ®îc th«ng còng Ýt nhÊt.
VÝ dô nh ë
D
®Çu mèi sau
E
C
B
A
H×nh 2.4
ë ®©y C vµ E lµ ®êng mét chiÒu (1 tuyÕn) cßn c¸c ®êng kh¸c ®Òu hai chiÒu (2
tuyÕn). Nh vËy, sÏ cã 13 tuyÕn cã thÓ thùc hiÖn qua ®Çu mèi nµy. Nh÷ng tuyÕn
nh AB (tõ A tíi B), EC cã thÓ th«ng ®ång thêi. Nh÷ng tuyÕn nh AD vµ EB th×
kh«ng thÓ th«ng ®ång thêi ®îc v× chóng giao nhau, cã thÓ g©y ra ®ông ®é ( ta sÏ
gäi lµ c¸c tuyÕn xung kh¾c). Nh vËy ®Ìn tÝn hiÖu ph¶i b¸o sao cho AD vµ EB
kh«ng thÓ ®îc th«ng cïng mét lóc, trong khi ®ã l¹i ph¶i cho phÐp AB vµ EC
ch¼ng h¹n ®îc th«ng ®ång thêi.
Ta cã thÓ m« h×nh ho¸ bµi to¸n cña ta dùa vµo mét kh¸i niÖm, vèn ®· ®îc ®Ò
cËp tíi trong to¸n häc, ®ã lµ ®å thÞ (graph).
§å thÞ bao gåm mét tËp c¸c ®iÓm gäi lµ ®Ønh (vetices) vµ c¸c ®êng nèi c¸c
®Ønh gäi lµ cung (edges). Nh vËy ®èi víi bµi to¸n “®iÒu khiÓn híng ®Ìn giao
th«ng”cña ta th× cã thÓ h×nh dung mét ®å thÞ mµ c¸c ®Ønh biÓu thÞ cho c¸c tuyÕn
®êng, cßn cung lµ mét cÆp ®Ønh øng víi hai tuyÕn ®êng xung kh¾c.
Víi mét ®Çu mèi giao th«ng nh ë h×nh 2.4 ®å thÞ biÓu diÔn nã sÏ nh sau:
AB
AC
A
D
BA
BC
BD
D
A
DB
DC
EA
EB
ED
EC
H×nh 2.5
B©y giê ta sÏ t×m lêi gi¶i cho bµi to¸n cña ta dùa trªn m« h×nh ®å thÞ ®· nªu. Ta
sÏ thªm vµo kh¸i niÖm “t« mµu cho ®å thÞ”. §ã lµ viÖc g¸n mµu cho mçi ®Ønh cña
®å thÞ sao cho kh«ng cã hai ®Ønh nµo nèi víi nhau bëi mét cung l¹i t« mét mµu.
Víi kh¸i niÖm nµy, nÕu ta h×nh dung mçi mµu ®¹i diÖn cho mét pha ®iÒu khiÓn
®Ìn b¸o (cho th«ng mét sè tuyÕn vµ cÊm mét sè tuyÕn kh¸c) th× bµi to¸n ®ang ®Æt
ra chÝnh lµ bµi to¸n: t« mµu cho ®å thÞ øng víi c¸c tuyÕn ®êng ë mét ®Çu mèi, nh
®· quy íc ë trªn ( xem h×nh 2.5) sao cho ph¶i dïng Ýt mÇu nhÊt.
Bµi to¸n t« mµu cho ®å thÞ ®îc nghiªn cøu tõ nhiÒu thËp kû nay. Tuy nhiªn, bµi
to¸n t« mµu cho mét ®å thÞ bÊt kú, víi sè mµu Ýt nhÊt l¹i thuéc vµo mét líp kh¸
réng c¸c bµi to¸n, ®îc gäi lµ “Bµi to¸n N-P ®Çy ®ñ”, mµ ®èi víi chóng th× nh÷ng
bµi gi¶i hiÖn cã chñ yÕu thuéc lo¹i “cè hÕt mäi kh¶ n¨ng”. Trong trêng hîp bµi
to¸n t« mµu cña ta th× “cè hÕt mäi kh¶ n¨ng” nghÜa lµ cè g¸n mµu cho c¸c ®Ønh,
tríc hÕt b»ng mét mµu ®·, kh«ng thÓ ®îc n÷a th× míi dïng mµu thø hai, thø ba
v.v… Cho tíi khi ®¹t ®îc môc ®Ých, nghe ra th× cã vÎ tÇm thêng, nhng ®èi víi bµi
to¸n lo¹i nµy, ®©y l¹i chÝnh lµ mét gi¶i thuËt cã hiÖu lùc thùc tÕ. VÊn ®Ò gay cÊn
nhÊt ë ®©y vÉn lµ kh¶ n¨ng t×m ®îc lêi gi¶i tèi u cho bµi to¸n.
NÕu ®å thÞ nhá, ta cã thÓ cè g¾ng theo mäi ph¬ng ¸n, ®Ó cã thÓ ®i tíi mét lêi
gi¶i tèi u. Nhng víi ®å thÞ lín th× c¸ch lµm nµy sÏ tæn phÝ rÊt nhiÒu thêi gian, trªn
thùc tÕ khã chÊp nhËn ®îc. Còng cã thÓ cã trêng hîp do dùa vµo mét sè th«ng tin
phô cña bµi to¸n mµ viÖc t×m lêi gi¶i tèi u kh«ng cÇn ph¶i thö tíi mäi kh¶ n¨ng.
Nhng ®ã chØ lµ “nh÷ng dÞp may hiÕm cã”. Cßn mét c¸ch kh¸c n÷a lµ thay ®æi
c¸ch nh×n nhËn vÒ lêi gi¶i cña bµi to¸n ®i ®«i chót: Thay v× ®i t×m lêi gi¶i tèi u, ta
- Xem thêm -