You are on page 1of 13

Ph­¬ng ph¸p tham lam

ý t­ëng ph­¬ng ph¸p


• Ph­¬ng ph¸p tham lam lµ kü thuËt thiÕt kÕ th­êng ®­îc dïng ®Ó gi¶i c¸c bµi
to¸n tèi ­u. Ph­¬ng ph¸p ®­îc tiÕn hµnh trong nhiÒu b­íc. T¹i mçi b­íc,
theo mét lùa chän nµo ®ã, sÏ t×m mét lêi gi¶i tèi ­u cho bµi to¸n nhá t­¬ng
øng. Lêi gi¶i cña bµi to¸n ®­îc bæ sung dÇn tõng b­íc tõ lêi gi¶i cña c¸c bµi
to¸n con.
• C¸c lêi gi¶i t×m ®­îc b»ng ph­¬ng ph¸p tham lam th­êng chØ lµ chÊp nhËn
®­îc theo ®iÒu kiÖn nµo ®ã, ch­a ch¾c lµ tèi ­u.
• Cho tr­íc mét tËp A gåm n ®èi t­îng, ta cÇn ph¶i chän mét tËp con S cña A.
Víi mét tËp con S ®­îc chän ra tho¶ m·n c¸c yªu cÇu cña bµi to¸n, ta gäi lµ
mét nghiÖm chÊp nhËn ®­îc. Mét hµm môc tiªu g¾n víi mçi nghiÖm chÊp
nhËn ®­îc víi mét gi¸ trÞ. NghiÖm tèi ­u lµ nghiÖm chÊp nhËn ®­îc mµ t¹i
®ã hµm môc tiªu ®¹t gi¸ trÞ nhá nhÊt (Lín nhÊt).
• §Æc tr­ng tham lam cña ph­¬ng ph¸p thÓ hiÖn bëi: Trong mçi b­íc viÖc xö
lý sÏ tu©n theo mét lùa chän tr­íc, kh«ng kÓ ®Õn t×nh tr¹ng kh«ng tèt cã thÓ
x¶y ra khi thùc hiÖn lùa chän lóc ®Çu.
M« h×nh
• Chän S tõ tËp A
TÝnh chÊt tham lam cña thuËt to¸n ®Þnh h­íng bëi hµm chän
- Khëi ®éng S= ∅
- Trong khi A<> ∅ :
+ Chän phÇn tö tèt nhÊt cña A g¸n vµo x: x = chän(A)
+ CËp nhËt ®èi t­îng ®Ó chän: A = A – {x}
+ NÕu S ∪ {x} tho¶ m·n yªu cÇu bµi to¸n th× cËp nhËt lêi
gi¶i: S = S ∪ {x}
Bµi to¸n ng­êi du lÞch
• Mét ng­êi du lÞch muèn tham quan n thµnh phè
T1, T2, …, Tn. XuÊt ph¸t tõ mét thµnh phè nµo
®ã ng­êi du lÞch muèn ®i qua tÊt c¶ c¸c thµnh
phè cßn l¹i, mçi thµnh phè ®i qua ®óng mét lÇn
råi quay l¹i ®óng thµnh phè xuÊt ph¸t.
• Gäi CP(i,j) lµ chi phÝ ®i tõ thµnh phè Ti ®Õn Tj.
H·y t×m hµnh tr×nh tho¶ m·n yªu cÇu bµi to¸n
sao cho chi phÝ lµ nhá nhÊt
ý t­ëng
• §©y lµ bµi to¸n t×m chu tr×nh cã träng sè nhá
nhÊt trong mét ®¬n ®å thÞ v« h­íng cã träng sè.
• ThuËt to¸n tham lam cho bµi to¸n lµ chon thµnh
phè cã chi phÝ nhá nhÊt tÝnh tõ thµnh phè hiÖn
thêi ®Õn c¸c thµnh phè ch­a qua.
ThuËt to¸n
• §Çu vµo: Sè thµnh phè n, chi phÝ tõ thµnh phè i
®Õn thµnh phè j (cp(i,j))
• §Çu ra: Hµnh tr×nh tèi ­u vµ chi phÝ t­¬ng øng
• M« t¶:
tour = 0
cost = 0
v=u
Víi mäi k = 1 ®Õn n:
Chän (v,w) lµ ®o¹n nèi hai thµnh phè cã chi phÝ
nhá nhÊt tÝnh tõ thµnh phè v ®Õn c¸c thµnh phè ch­a
qua.
tour = tour + (v,w)
cost = cost + cp(v,w)
Tour = tour + (v,u)
Cost = cost + cp(v,u)
Minh ho¹:
BTNDL.exe
§é phøc t¹p cña thuËt to¸n
• Thao t¸c chän ®Ønh thÝch hîp trong n ®Ønh ®­îc
tæ chøc b»ng mét vßng lÆp ®Ó duyÖt. Nªn chi
phÝ cho thuËt to¸n x¸c ®Þnh bëi hai vßng lÆp
2
lång nhau, nªn T(n) lµ O(n )
Cµi ®Æt
Dim v1 As Byte
Dim k As Byte
Dim w As Byte
Dim m As Byte
Dim mini As Integer
Dim cost As Integer
Dim daxet(30) As Boolean
Dim cp(30, 30) As Integer
Dim dau As Byte
Dim tour(30) As Integer
Private Sub Cmdkq_Click()
m = txtstp.Text
Dim i As Integer
cost = 0
For k = 1 To m
daxet(k) = False
Next k
dau = InputBox("Chän ®Ønh xuÊt ph¸t")
v1 = dau
i=1
tour(i) = v1
daxet(v1) = True
While i < m
mini = 32767
For k = 1 To m
If Not daxet(k) Then
If mini > cp(v1, k) Then
mini = cp(v1, k)
w=k
End If
End If
Next k
v1 = w
i=i+1
tour(i) = v1
daxet(v1) = True
cost = cost + mini
Wend
cost = cost + cp(v1, dau)
txttcp.Text = cost
txtct.Text = ""
For i = 1 To m
txtct.Text = txtct & tour(i) & " ==> "
Next i
txtct.Text = txtct & dau
End Sub
Ch­¬ng tr×nh
BTNDL.exe
Danh s¸ch nhãm 1
NguyÔn ThiÕu Thõa §Æng §×nh Phóc

Vâ ThÞ Hång Phóc Lª ThÞ T©m

Vò Hïng Biªn Th¸i Danh H¶i

NguyÔn M¹nh C­êng NguyÔn ThÞ T©m

T¹ ThÞ H¶i NguyÔn ThÞ NguyÖt

Lª ThÞ Mai NguyÔn ThÞ Thanh HuyÒn

You might also like