TRƯNGĐIHCKHOAHCTNHIÊN
CHUYÊNNGHÀNHKHOAHCMÁYTÍNH
VÀTHÔNGTIN
BÁOCÁOBĐỀTÀICUỐI KỲ
CẤUTRÚCDỮLIỆU GIẢI
THUẬT
ĐTÀI:
NG DNGCATHUTTOÁN TÌM
ĐƯNG ĐITRONGMÊCUNG
Nhóm:16
Sinhviênthựchin:NguyễnTuấnAnh
ĐinhTrườngAn
Lp:K67A3
HàNi, tháng12,năm 2023
LỜINÓIĐẦU.................................................................. 4
NHẬNXÉT CỦAGIẢNGVIÊN ....................................5
PHẦNI:SỞTHUYẾT........................................6
1.Cácthuật toántìmkiếm.........................................6
1.1ThuậttoántìmkiếmDFS(Tìmkiếmtheo
chiều sâu)............................................................6
1.1.1 Khái niệm...........................................6
1.1.2Ýtưởng...............................................6
1.1.4KếtluậnvềthuậttoánDFS..............10
1.2ThuậttoántìmkiếmBFS(Tìmkiếmtheo
chiềurộng)........................................................12
1.2.2Ýtưởng.............................................13
1.2.3dụ.................................................14
1.2.4KếtluậnvềthuậttoánBFS..............17
1.3ThuậttoánDijkstra.....................................19
1.3.2Ýtưởng.............................................20
1.3.3dụ.................................................20
1.3.4KếtluậnvềthuậttoánDijkstra........25
PHẦN2:PHÂNTÍCHTHIẾTKẾBỘ...................26
1.Biểuđồlớp...........................................................26
2.Phântíchchươngtrình........................................ 26
DANHMỤCCÁCHÌNH NH
Hình1.VídDFS.............................................................. 7
Hình2 . Bước 1 ví d DFS.....................................................8
Hình3.Bước2ví dDFS.................................................. 8
Hình4.Bước3ví dDFS.................................................. 9
Hình5.Bước4ví dDFS.................................................. 9
Hình6.Bước5ví dDFS................................................ 10
Hình7.VídBFS............................................................ 14
Hình8.Bước1ví dBFS.................................................15
Hình9.Bước2ví dBFS.................................................15
Hình10.Bước3vídBFS..............................................16
Hình11.Bước4vídBFS ..............................................16
Hình12.Bước5vídBFS..............................................17
LINÓIĐU
Chúngemxintrântrnggiithiubáocáongdngthut
toántìmkiếmtronggiiquyếtbàitoánđườngđitrongmêcung.
Báocáonàytptrungvàovickhámphávàứngdngcácthut
toántìm kiếmtrongvic giiquyết bàitoán tìmđườngđitrong
mêcung,mtchđquantrngtrong hcphnCutrúcd
liuvàthuttoán.
Bàitoánđườngđi trongmêcunglàmtbàitoánthúv vàcó
ứngdngrngtrongnhiulĩnhvực,trobotdichuyntđng
đếnlpkế hochđườngđitrong hthngđnhtuyếnmng.
Mctiêucabàitoánlà tìmmtđườngđitmtđimxutphát
đếnmtđimđíchtrongmtmêcungphứctp.Đ giiquyết
bàitoánnày,các thuttoántìmkiếmđượcsdngđtoracác
chiếnlượcđiuhướngthôngminhvàtìmra đườngđitiưu.
Báocáonàynhmmcđíchkhámphávàgiithiuvcácthut
toántìm kiếmphbiến tronggiiquyếtbàitoán đưngđitrong
mêcung.Chúngemsgiithiucácthuttoánnhưtìmkiếm
theochiurng(BFS),tìmkiếmtheochiusâu (DFS),thut
toánA*vàthuttoánDijkstra.Mithuttoánsđượctrìnhbày
chitiết,baogm nguyênlýhotđngvàưuđim, nhượcđim
cachúng.
Chúngem hyvngrngbáocáonàys giúpcácbn hiurõhơn
vứngdngvàliíchcavicápdngcácthuttoántìmkiếm
tronggiiquyếtbàitoánđườngđitrongmêcung.Bncũngs
tìmthythôngtinchitiếtvcácthuttoántìmkiếmvànhững
ứngdngcthcachúngtrongthựctế.
NHNXÉTCAGINGVIÊN
...
..
..
..
..
..
..
....
..
..
..
..
..
..
...
...
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
PHN I:CƠ S LÝTHUYT
1.Cácthuậttoántìmkiếm
1.1ThuậttoántìmkiếmDFS(Tìmkiếmtheochiều
sâu)
1.1.1Kháinim
-Tìmkiếmtheochiusâu(DFS) làmtthuttoánđduytqua
hoctìmkiếmcutrúcdliudngcâyhocđth.Thut toán
btđutinútgc(chnmt snúttùy ýlàmnútgctrong
trường hpđ th)và kimtratừngnhánhcàngxacàngtt
trướckhiquaylui.
-KếtqucamtDFS là mtcây baotrùm (spanningtree).Cây
khung(spanningtree)là mtđ thkhôngcóvònglp.Đthc
hinduyttheoDFS,chúngtacnsdngcutrúcdliungăn
xếpcókíchthướctiđabngtngsđnhtrongbiuđ.
1.1.2Ýtưởng
Đcàiđt DFS,tacnthchincác bướcsau:
1. Lymtđnhbtktrongđthìđưavàongănxếp.
2. Lytopvaluecangănxếpđduytvàthêmvàovisited
list.
3. Tomtlist baogmcác đnhlinkcađnhđangxét,
4. thêmnhữngđnhkhôngcótrongvisitedlistvàongănxếp.
5. Tiếptclplibước2vàbước3đếnkhingănxếprng.
1.1.3Víd
Hãyxemthuttoántìmkiếm DFShot đngthếnàovi1víd.
Chúngtacó1đthvôhướng5đnh:
Visited
Stack
Hình1.dụDFS
1. Chúngtabt đutđnh0,thuttoánDFS btđubng
cáchđưanóvàoVisitedvàđưattccác cnhlinkđnh
đangxétvàoStack:
Visited
0
Stack
1
2
3
0
1
3
2
4
0
3
Hình2.Bước1vídụDFS
2. Tiếptheochúngtatruycpphntđungănxếp,tứclà1
vàđiđếncácnútlinkcanó.Vì0đãđượctruycpnên
tiếptheo2sđượcxét:
Visited
0
1
Stack
2
3
Hình3.Bước2vídụDFS
3. Chúngtađangxéttiđnh2,đnh2có1nútlink chưa
đượcxétlà4,vìvytathêmđnhđóvào vtríđucaStack
vàduytnó:
Visited
0
1
2
Stack
4
3
1
2
4
0
1
3
2
4
Hình4.Bước3vídụDFS
4. Vìđnh4khôngcòncácđnhnàolinkchưaxét, vìvyta
sduytnóvàđưavàoStack
Visited
0
1
2
4
Stack
3
Hình5.Bước4vídụDFS
5. Vàcuicùnglàduytđnh3trongStack,nó cũngkhôngcó
btkđnhlinknàochưađượcduyt,vìthếtađãhoàn
thànhtìmkiếmtheochiusâutrongđthvíd:
Visited
0
1
2
4
3
Stack
0
1
3
2
4
0
1
3
2
4
Hình6.Bước5vídụDFS
VìStacktrng,vynênchúngtađãhoànthànhvictìm
kiếmtheochiusâu(DFS) cađthtrên
1.1.4KếtlunvthuttoánDFS
1. Đphứctp
Trongtrườnghpttnht,khiduytqua ttccácđnhvà cnh
trongđth, đphức tp thigian caDFS là O(V+ E),trong
đóVlàslượng đnh và Elà slượngcnhtrong đth.Tuy
nhiên,nếuđthkhôngliênthông,thuttoánDFS chduytqua
cácđnhthucthànhphnliênthôngchứa đnhbtđu,dođó
đphứctpthigiancóthlàO(V +E')vi E'làslượngcnh
trongthànhphnliênthôngchứađnhbtđu.
2. ƯuđimcathuttoánDFS
-Đơnginvàdhiu:ThuttoánDFSddàngtrinkhaivà
hiu,khôngyêucunhiukiếnthứcphứctp.
0
1
3
2
4
-Hiuqutrongtìmkiếmđườngđi:DFScóthtìmkiếmđường
đitmtđnhđến mtđnhkháctrongđth.Nếu cómt
đườngđitnti,DFSstìmrađườngđiđutiênmànógp
được.
-Sdngít bnh:ThuttoánDFSchsdng mtngăn xếp
đlưutrcácđnhtrongquátrìnhduyt,dođótiêuthítb
nhhơnsovithuttoánBFS(Breadth-FirstSearch).
3. NhượcđimcathuttoánDFS
-Khôngtìmkiếmtiưu:DFSkhôngđmbotìmkiếmđường
đingnnhttrongđth.NếucónhiuđườngđitđnhAđến
đnhB,DFS cóthtìmramtđườngđidàihơnsoviđườngđi
ngnnht.
-Drơivàovònglpvôhn:Nếuđthcóchutrình,vàkhông
cócơchếđkimtravàtránhviclplicácđnh,DFScóth
rơivàovònglpvôhn,khôngbaogikếtthúc.
-Phthucvàoth tduyt:KếtqucathuttoánDFScóth
thayđidatrênthtduytquacácđnh.Nếutht duyt
đượcthayđi,kếtqucũngsthayđi.
-Khôngphùhpchođthlnvàsâu:Nếuđthrtlnvàcó
đsâuln,DFScóthgpkhókhăntrongvicduytquatoàn
bđthvàtiêutnnhiuthigianvàbnh.
4. Kếtlun
-McdùDFScónhữngưuđimnhưđơngin,hiuqutrong
tìmkiếmđườngđivàsdngítbnh,nhưngnócũngcó
nhượcđim.DFSkhôngđmbotìmkiếmđườngđingnnht,
cóthrơivàovònglpvôhntrongtrườnghpđthcóchu
trình,phthucvàothtduytvàkhókhănkhiápdngcho
đthln vàsâu.
-Tuynhiên,thuttoánDFSvncógiátrvàứngdngrngrãi
trongvicgiiquyếtcácbàitoánliênquanđếntìmkiếm, đường
đi,cutrúcdliuđthvànhiulĩnhvựckhác.Nócungcp
mtcáchtiếpcnđơnginvà linhhotđ khámphávàtìmhiu
vcác thành phntrongđth.
-Tómli,DFSlàmtthuttoánquantrngvàhữuíchtrong
lĩnhvựcđth,tuy cónhượcđimnhtđnh,nhưngvnđáng
xemxétvàápdngtrongcácbàitoántươngứng.
1.2ThuậttoántìmkiếmBFS(Tìmkiếmtheochiều
rộng)
1.2.1Kháinim
-Tìmkiếm theochiurng (BFS)là mtthuttoánđduytđ
thhoccây.BFSápdngchocâyvàđthgnnhưgingnhau.
Skhácbitduynhtlàđthcóthchứacácchutrình,vìvy
chúngtacóthduytlicùngmtnút.Đ tránhxlýlicùng
mtnút,chúngtasdngmngbooleanđãtruycp,mngnày
sđánhducácđnhđãtruycp.BFSsdngcutrúcdliu
hàngđi(queue)đ tìmđườngđingnnhttrongbiuđ.
-ThuttoánBFSduytquacácđnhtheocpđ,btđut
đnhgcvàđisâuvàocácđnhktrướckhiđisâuvàocácđnh
khác.Dođó,BFStìmkiếmtheochiurngtrongđthvà
thườngđượcsdngđtìmkiếmđườngđingnnhtgiữahai
đnhtrongđth khôngcótrngshoccótrngsbngnhau
trêncáccnh.
1.2.2Ýtưởng
-TrinkhaiBFS tiêuchunsđtmi đnhcađth vàomt
tronghailoi:visited,notvisited.Mcđích cathuttoán là
đánhdu mi đnhlà đãthămđ tránh cácchu trình.
Cáchthuttoánhot đngnhưsau:
1. Lymtđnhbtktrongđththêmvàocuihàngđi.
2. Lyphântđutiêncahàngđivàthêmnóvàodanhsách
đãduyt.
3. Tomtdanhsáchcácđnhlinkcađnhđangxét.Thêm
nhữngđnhkhôngcótrongdanhsáchđãduyt vàocuihàng
đi.
4. Tiếptclplibước2và3chođếnkhihàngđitrng.
Lưuý:Đthcóthchứahaithànhphnkhôngliênkếtkhác
nhau,vìvyđđmborngmiđnhđuđãđược thăm,
chúngtacũngcóthchythuttoánBFStrênmiđnh.
1.2.3Víd
Hãyxemthuttoán tìmkiếm BFShotđngthế nàovi1víd.
Chúngtacó1đthvôhướng5đnh:
Visited
Queue
Hình7.dụBFS
1. Chúngtabt đutđnh0,thuttoánBFSbtđubngcách
đtnóvàoVisited vàđt ttccác đnhlinkcanóvào
Queue:
Visited
0
Queue
1
2
3
0
1
3
2
4
Hình8.Bước1vídụBFS
2. Tiếptheo,chúngtatruycpvàophntđucahàng đi
là1vàđiđến cácnút linkca nó,vì0đã đượctruy cp
nêntathăm2:
Visited
0
1
Queue
2
3
Hình9.Bước2vídụBFS
3. Lnnày,đnh2sđượcduytvàoVisited,đnh2có đnh
linkchưađượcthămlà4, vìvychúngtathêmđnh đó
vàocuiQueue:
Visited
0
1
2
0
1
3
2
4
0
1
3
2
4
Queue
3
4
Hình10.Bước3 dụBFS
4. Lnnàytastiếptcduytđếnđnh3Queuevàcho vào
Visited,vìđnh3khôngcònđnhlinknàochưaduytnên
Queuesginguyên:
Visited
0
1
2
3
Queue
4
Hình11.Bước4 dụBFS
5. Cuicùngchcònđnh4chưađượcduyttrongQueue,
đnhlinkduynhtcanólà2đãđược truycpnên
Queuevnginguyên:
0
1
3
2
4
0
1
3
2
4
Visited
0
1
2
3
4
Queue
Hình12.Bước5 dụBFS
VìQueue trng,vynênchúng tađãhoànthành victìm
kiếmtheochiurng(BFS) cađth trên
1.2.4KếtlunvthuttoánBFS
1.Đ phứctp:
LàO(V+E),trongđóVlàslượngđnhvàElàslượngcnh
trongđth.Thuttoánduytquattccácđnhvàcnhmt
ln,dođóđphứctplàtuyếntínhtheotngsđnhvàcnh.
2.ƯuđimcathuttoánBFS:
-Tìmkiếmtheochiurng(BFS)đmbotìmkiếmtđnhgc
đếncácđnhxanhttrướckhitìmđếncácđnhgnhơn.Điu
nàyđmbothuttoántìmkiếmBFStìmkiếmtheocpđvà
tìmrađườngđingnnhttđnhgcđếncácđnhkhác.
0
1
3
2
4
-BFS đượcsdngrngrãitrong các bàitoán tìm kiếmđường
đingn nht,kimtra tínhliênthôngcađth,tìm kiếm các
thànhphnliênthông,tìmkiếmtrongcáccây, vànhiubàitoán
khác.
3.Nhược đimcathuttoánBFS:
-Thuttoán BFSs dng mthàngđi đlưu trcác đnhch
duyt.Điunàycóthdnđếns dngkhônggianlnnếuđ
thcóslượngđnhln.
-Trongtrườnghpđthcóchutrình,nếukhôngcócơchếđ
xácđnhđnhđãđược duyt quahaychưa,thuttoáncó thrơi
vàovònglpvôhn.Đkhcphcvnđnày,cnsdngmt
mngvisitedđđánhducác đnhđãđượcduytqua.
4.Kết lun:
-BFSđmbotìmkiếmtheocpđvàtìmrađườngđingn
nhttđnhgc đếncácđnhkháctrongđth.Điunàylàm
choBFShữuíchtrongvictìmkiếmđườngđingnnhthoc
kimtratínhliênthôngcađth.
-Tuynhiên,BFScũngcónhược đim.Thuttoánsdng
khônggianlnđlưu trhàngđivà mngvisitedđđánhdu
cácđnhđãđượcduytqua.Điunàycóthgâyraslãngphí
khônggiankhiđthcóslượngđnhln.
-Tómli,BFSlàmtthuttoánquantrngvàhữuíchtrong
victìmkiếmđườngđingnnhtvàkimtratínhliênthông
cađth.Mcdùnócónhượcđimnhưsdngkhônggian
lnvàcóthrơivàovònglpvôhn,nhưngviưuđimca
mình,BFSvnlàmtcôngcmnhmtrongvicgiiquyết
cácbàitoánliênquanđếnđth.
1.3ThuậttoánDijkstra
1.3.1Kháinim
-TheoWikipedia,thuttoánDijkstra,mangtêncanhàkhoa
hcmáytínhngườiHàLanEdsgerDijkstravàonăm1956vàn
bnnăm1959,làmtthuttoángiiquyếtbàitoánđườngđi
ngnnhtngunđơntrongmt đthcóhướngkhôngcócnh
mangtrngsâm.
- Trng skhôngâm làcáccnhmangtínhtngthhơnlà
khongcáchhìnhhcgiữa2đnh,vìvythuttoánscótính
chínhxáccaohơn.
-Víd,đbiudinđườngđingnnhttthànhphAđến
thànhph B,chúngta dùng cácđnhca đth đthphm các
thànhphvàcác cnhđbiudincác đườngnigiachúng.
Trngscáccnh sđượcxemnhư đdàicacácconđường,
vìvymà chúngkhôngâm,nh đóthuttoánschracon
đườngngnnht.
-Thuttoán thường đượcsdngtrongđnhtuyếnvi mt
chương trìnhcon trong cácthuttoánđthhay trong công
nghHthngđnhv toàncu (GPS).
1.3.2Ýtưởng
Ýtưởngcơbncathuttoánnhưsau:
Bước1:T đnhgc,khitokhongcáchti chínhnó là00,
khitokhongcáchnhnhtbanđuticácđnhkháclà+∞.
Tađượcdanhsáchcáckhongcáchticácđnh.
Bước2:Chnđnhacókhongcáchnhnhttrongdanhsách
nàyvàghinhn.Cáclnsauskhôngxéttiđnhnàynữa.
Bước3:Lnlượtxétcácđnhkbcađnha. Nếu khongcách
tđnhgcti đnhbnhhơnkhongcáchhintiđangđược
ghinhnthìcpnhtgiátrvà đnhkavàokhongcáchhin
ticab.
Bước4:Saukhixétttcđnhkbcađnh a.Lúcnàytađược
danhsáchkhongcáchticácđimđãđượccpnht.Quay
liBước2vidanhsáchnày.Thuttoánkết thúckhichnđược
khongcách nh nhtttt ccácđim.
1.3.3Víd
Đddànghiuýtưởngcathuttoán.Chúngtacùngxemví
dviđ thvôhướngG.ThuttoánDijkstrastìmkhong
cáchtđnhgc0 titt ccácđnhcònlitrongđth G:
1. Đutiên,khitokhongcáchnhnhtbanđuticácđnh
kháclà +∞vàkhongcáchtiđnh gclà0.Tađượcdanh
sáchcáckhongcách ticác đnh:
0
1
2
3
4
5
0
(∞,-)
(∞,-)
(∞,-)
(∞,-)
(∞,-)

Preview text:

TRƯỜNGĐẠIHỌCKHOAHỌCTỰNHIÊN
CHUYÊNNGHÀNHKHOAHỌCMÁYTÍNH VÀTHÔNGTIN
BÁOCÁOSƠBỘĐỀTÀICUỐI KỲ CẤUTRÚCDỮLIỆUVÀ GIẢI THUẬT ĐỀTÀI:
ỨNG DỤNGCỦATHUẬTTOÁN TÌM
KIẾMĐỂ GIẢIQUYẾTBÀI TOÁN ĐƯỜNG ĐITRONGMÊCUNG Nhóm:16
Sinhviênthựchiện:NguyễnTuấnAnh ĐinhTrườngAn Lớp:K67A3 HàNội, tháng12,năm 2023
LỜINÓIĐẦU .................................................................. 4
NHẬNXÉT CỦAGIẢNGVIÊN ....................................5
PHẦNI:CƠSỞLÝTHUYẾT ........................................6
1.Cácthuật toántìmkiếm .........................................6
1.1ThuậttoántìmkiếmDFS(Tìmkiếmtheo
chiều sâu) ............................................................6
1.1.1 Khái niệm ...........................................6
1.1.2Ýtưởng ...............................................6
1.1.3 Ví dụ ...................................................7
1.1.4KếtluậnvềthuậttoánDFS ..............10
1.2ThuậttoántìmkiếmBFS(Tìmkiếmtheo
chiềurộng) ........................................................ 12
1.2.1 Khái niệm .........................................12
1.2.2Ýtưởng .............................................13
1.2.3Vídụ ................................................. 14
1.2.4KếtluậnvềthuậttoánBFS ..............17
1.3ThuậttoánDijkstra .....................................19
1.3.1 Khái niệm .........................................19
1.3.2Ýtưởng .............................................20
1.3.3Vídụ ................................................. 20
1.3.4KếtluậnvềthuậttoánDijkstra ........25
PHẦN2:PHÂNTÍCHTHIẾTKẾSƠBỘ ................... 26
1.Biểuđồlớp ...........................................................26
2.Phântíchchươngtrình ........................................ 26 DANHMỤCCÁCHÌNH ẢNH
Hình1.VídụDFS .............................................................. 7
Hình2 . Bước 1 ví dụ DFS.....................................................8
Hình3.Bước2ví dụDFS .................................................. 8
Hình4.Bước3ví dụDFS .................................................. 9
Hình5.Bước4ví dụDFS .................................................. 9
Hình6.Bước5ví dụDFS ................................................ 10
Hình7.VídụBFS ............................................................ 14
Hình8.Bước1ví dụBFS .................................................15
Hình9.Bước2ví dụBFS .................................................15
Hình10.Bước3vídụBFS ..............................................16
Hình11.Bước4vídụBFS ..............................................16
Hình12.Bước5vídụBFS ..............................................17 LỜINÓIĐẦU
Chúngemxintrântrọnggiớithiệubáocáo“Ứngdụngthuật
toántìmkiếmtronggiảiquyếtbàitoánđườngđitrongmêcung”.
Báocáonàytậptrungvàoviệckhámphávàứngdụngcácthuật
toántìm kiếmtrongviệc giảiquyết bàitoán tìmđườngđitrong
mêcung,mộtchủđềquantrọngtrong họcphần“Cấutrúcdữ liệuvàthuậttoán”.
Bàitoánđườngđi trongmêcunglàmộtbàitoánthúvị vàcó
ứngdụngrộngtrongnhiềulĩnhvực,từrobotdichuyểntựđộng
đến lập kế hoạch đường đi trong hệ thống định tuyến mạng.
Mụctiêucủabàitoánlà tìmmộtđườngđitừmộtđiểmxuấtphát
đếnmộtđiểmđíchtrongmộtmêcungphứctạp.Để giảiquyết
bàitoánnày,các thuậttoántìmkiếmđượcsửdụngđểtạoracác
chiếnlượcđiềuhướngthôngminhvàtìmra đườngđitốiưu.
Báocáonàynhằmmụcđíchkhámphávàgiớithiệuvềcácthuật
toántìm kiếmphổbiến tronggiảiquyếtbàitoán đườngđitrong
mêcung.Chúngemsẽgiớithiệucácthuậttoánnhưtìmkiếm
theo chiều rộng (BFS), tìm kiếm theo chiều sâu (DFS), thuật
toánA*vàthuậttoánDijkstra.Mỗithuậttoánsẽđượctrìnhbày
chitiết,baogồm nguyênlýhoạtđộngvàưuđiểm, nhượcđiểm củachúng.
Chúngem hyvọngrằngbáocáonàysẽ giúpcácbạn hiểurõhơn
vềứngdụngvàlợiíchcủaviệcápdụngcácthuậttoántìmkiếm
tronggiảiquyếtbàitoánđườngđitrongmêcung.Bạncũngsẽ
tìmthấythôngtinchitiếtvềcácthuậttoántìmkiếmvànhững
ứngdụngcụthểcủachúngtrongthựctế. NHẬNXÉTCỦAGIẢNGVIÊN
….……………………………………………………….….……
………………………………………………….….……………
………………………………………….….……………………
………………………………….….……………………………
………………………….….……………………………………
………………….….……………………………………………
………….….……………………………………………………
….….……………………………………………………….….
……………………………………………………….….………
……………………………………………….….………………
……………………………………….….………………………
……………………………….….………………………………
……………………….….………………………………………
……………….….………………………………………………
……….….……………………………………………………….
….……………………………………………………….….……
………………………………………………….….……………
………………………………………….….……………………
………………………………….….……………………………
………………………….….……………………………………
………………….….……………………………………………
………….….……………………………………………………
………………………….….……………………………………
………………….….……………………………………………
………….….……………………………………………………
………………………….….……………………………………
………………….….……………………………………………
………….….……………………………………………………
………………………….….……………………………………
………………….….……………………………………………
………….….…………………………………………………… PHẦN I:CƠ SỞ LÝTHUYẾT 1.Cácthuậttoántìmkiếm
1.1ThuậttoántìmkiếmDFS(Tìmkiếmtheochiều sâu) 1.1.1Kháiniệm
-Tìmkiếmtheochiềusâu(DFS) làmộtthuậttoánđểduyệtqua
hoặctìmkiếmcấutrúcdữliệudạngcâyhoặcđồthị.Thuật toán
bắtđầutạinútgốc(chọnmột sốnúttùy ýlàmnútgốctrong
trường hợpđồ thị)và kiểmtratừngnhánhcàngxacàngtốt trướckhiquaylui.
-KếtquảcủamộtDFS là mộtcây baotrùm (spanningtree).Cây
khung(spanningtree)là mộtđồ thịkhôngcóvònglặp.Đểthực
hiệnduyệttheoDFS,chúngtacầnsửdụngcấutrúcdữliệungăn
xếpcókíchthướctốiđabằngtổngsốđỉnhtrongbiểuđồ. 1.1.2Ýtưởng
Đểcàiđặt DFS,tacầnthựchiệncác bướcsau:
1. Lấymộtđỉnhbấtkỳtrongđồthìđưavàongănxếp.
2. Lấytopvaluecủangănxếpđểduyệtvàthêmvàovisited list.
3. Tạomộtlist baogồmcác đỉnhliềnkềcủađỉnhđangxét,
4. thêmnhữngđỉnhkhôngcótrongvisitedlistvàongănxếp.
5. Tiếptụclặplạibước2vàbước3đếnkhingănxếprỗng. 1.1.3Vídụ
Hãyxemthuậttoántìmkiếm DFShoạt độngthếnàovới1vídụ.
Chúngtacó1đồthịvôhướng5đỉnh: Visited Stack 0 3 1 2 4 Hình1.VídụDFS
1. Chúngtabắt đầutừđỉnh0,thuậttoánDFS bắtđầubằng
cáchđưanóvàoVisitedvàđưatấtcảcác cạnhliềnkềđỉnh đangxétvàoStack: Visited 0 Stack 1 2 3 0 3 1 2 4 Hình2.Bước1vídụDFS
2. Tiếptheochúngtatruycậpphầntừởđầungănxếp,tứclà1
vàđiđếncácnútliềnkềcủanó.Vì0đãđượctruycậpnên tiếptheo2sẽđượcxét: Visited 0 1 Stack 2 3 0 3 1 2 4 Hình3.Bước2vídụDFS
3. Chúngtađangxéttớiđỉnh2,đỉnh2có1nútliềnkề chưa
đượcxétlà4,vìvậytathêmđỉnhđóvào vịtríđầucủaStack vàduyệtnó: Visited 0 1 2 Stack 4 3 0 3 1 2 4 Hình4.Bước3vídụDFS
4. Vìđỉnh4khôngcòncácđỉnhnàoliềnkềchưaxét, vìvậyta
sẽduyệtnóvàđưavàoStack Visited 0 1 2 4 Stack 3 0 3 1 2 4 Hình5.Bước4vídụDFS
5. Vàcuốicùnglàduyệtđỉnh3trongStack,nó cũngkhôngcó
bấtkỳđỉnhliềnkềnàochưađượcduyệt,vìthếtađãhoàn
thànhtìmkiếmtheochiềusâutrongđồthịvídụ: Visited 0 1 2 4 3 Stack 0 3 1 2 4 Hình6.Bước5vídụDFS
VìStacktrống,vậynênchúngtađãhoànthànhviệctìm
kiếmtheochiềusâu(DFS) củađồthịtrên
1.1.4KếtluậnvềthuậttoánDFS 1. Độphứctạp
Trongtrườnghợptốtnhất,khiduyệtqua tấtcảcácđỉnhvà cạnh
trongđồthị, độphức tạp thờigian củaDFS là O(V+ E),trong
đóVlàsốlượng đỉnh và Elà sốlượngcạnhtrong đồthị.Tuy
nhiên,nếuđồthịkhôngliênthông,thuậttoánDFS chỉduyệtqua
cácđỉnhthuộcthànhphầnliênthôngchứa đỉnhbắtđầu,dođó
độphứctạpthờigiancóthểlàO(V +E')với E'làsốlượngcạnh
trongthànhphầnliênthôngchứađỉnhbắtđầu.
2. ƯuđiểmcủathuậttoánDFS
-Đơngiảnvàdễhiểu:ThuậttoánDFSdễdàngtriểnkhaivà
hiểu,khôngyêucầunhiềukiếnthứcphứctạp.
-Hiệuquảtrongtìmkiếmđườngđi:DFScóthểtìmkiếmđường
đitừmộtđỉnhđến mộtđỉnhkháctrongđồthị.Nếu cómột
đườngđitồntại,DFSsẽtìmrađườngđiđầutiênmànógặp được.
-Sửdụngít bộnhớ:ThuậttoánDFSchỉsửdụng mộtngăn xếp
đểlưutrữcácđỉnhtrongquátrìnhduyệt,dođótiêuthụítbộ
nhớhơnsovớithuậttoánBFS(Breadth-FirstSearch).
3. NhượcđiểmcủathuậttoánDFS
-Khôngtìmkiếmtốiưu:DFSkhôngđảmbảotìmkiếmđường
đingắnnhấttrongđồthị.NếucónhiềuđườngđitừđỉnhAđến
đỉnhB,DFS cóthểtìmramộtđườngđidàihơnsovớiđườngđi ngắnnhất.
-Dễrơivàovònglặpvôhạn:Nếuđồthịcóchutrình,vàkhông
cócơchếđểkiểmtravàtránhviệclặplạicácđỉnh,DFScóthể
rơivàovònglặpvôhạn,khôngbaogiờkếtthúc.
-Phụthuộcvàothứ tựduyệt:KếtquảcủathuậttoánDFScóthể
thayđổidựatrênthứtựduyệtquacácđỉnh.Nếuthứtự duyệt
đượcthayđổi,kếtquảcũngsẽthayđổi.
-Khôngphùhợpchođồthịlớnvàsâu:Nếuđồthịrấtlớnvàcó
độsâulớn,DFScóthểgặpkhókhăntrongviệcduyệtquatoàn
bộđồthịvàtiêutốnnhiềuthờigianvàbộnhớ. 4. Kếtluận
-MặcdùDFScónhữngưuđiểmnhưđơngiản,hiệuquảtrong
tìmkiếmđườngđivàsửdụngítbộnhớ,nhưngnócũngcó
nhượcđiểm.DFSkhôngđảmbảotìmkiếmđườngđingắnnhất,
cóthểrơivàovònglặpvôhạntrongtrườnghợpđồthịcóchu
trình,phụthuộcvàothứtựduyệtvàkhókhănkhiápdụngcho đồthịlớn vàsâu.
-Tuynhiên,thuậttoánDFSvẫncógiátrịvàứngdụngrộngrãi
trongviệcgiảiquyếtcácbàitoánliênquanđếntìmkiếm, đường
đi,cấutrúcdữliệuđồthịvànhiềulĩnhvựckhác.Nócungcấp
mộtcáchtiếpcậnđơngiảnvà linhhoạtđể khámphávàtìmhiểu
vềcác thành phầntrongđồthị.
-Tómlại,DFSlàmộtthuậttoánquantrọngvàhữuíchtrong
lĩnhvựcđồthị,tuy cónhượcđiểmnhấtđịnh,nhưngvẫnđáng
xemxétvàápdụngtrongcácbàitoántươngứng.
1.2ThuậttoántìmkiếmBFS(Tìmkiếmtheochiều rộng) 1.2.1Kháiniệm
-Tìmkiếm theochiềurộng (BFS)là mộtthuậttoánđểduyệtđồ
thịhoặccây.BFSápdụngchocâyvàđồthịgầnnhưgiốngnhau.
Sựkhácbiệtduynhấtlàđồthịcóthểchứacácchutrình,vìvậy
chúngtacóthểduyệtlạicùngmộtnút.Để tránhxửlýlạicùng
mộtnút,chúngtasửdụngmảngbooleanđãtruycập,mảngnày
sẽđánhdấucácđỉnhđãtruycập.BFSsửdụngcấutrúcdữliệu
hàngđợi(queue)để tìmđườngđingắnnhấttrongbiểuđồ.
-ThuậttoánBFSduyệtquacácđỉnhtheocấpđộ,bắtđầutừ
đỉnhgốcvàđisâuvàocácđỉnhkềtrướckhiđisâuvàocácđỉnh
khác.Dođó,BFStìmkiếmtheochiềurộngtrongđồthịvà
thườngđượcsửdụngđểtìmkiếmđườngđingắnnhấtgiữahai
đỉnhtrongđồthị khôngcótrọngsốhoặccótrọngsốbằngnhau trêncáccạnh. 1.2.2Ýtưởng
-TriểnkhaiBFS tiêuchuẩnsẽđặtmỗi đỉnhcủađồthị vàomột
tronghailoại:visited,notvisited.Mụcđích củathuậttoán là
đánhdấu mỗi đỉnhlà đãthămđể tránh cácchu trình.
Cáchthuậttoánhoạt độngnhưsau:
1. Lấymộtđỉnhbấtkỳtrongđồthịthêmvàocuốihàngđợi.
2. Lấyphântửđầutiêncủahàngđợivàthêmnóvàodanhsách đãduyệt.
3. Tạomộtdanhsáchcácđỉnhliềnkềcủađỉnhđangxét.Thêm
nhữngđỉnhkhôngcótrongdanhsáchđãduyệt vàocuốihàng đợi.
4. Tiếptụclặplạibước2và3chođếnkhihàngđợitrống.
Lưuý:Đồthịcóthểchứahaithànhphầnkhôngliênkếtkhác
nhau,vìvậyđểđảmbảorằngmọiđỉnhđềuđãđược thăm,
chúngtacũngcóthểchạythuậttoánBFStrênmọiđỉnh. 1.2.3Vídụ
Hãyxemthuậttoán tìmkiếm BFShoạtđộngthế nàovới1vídụ.
Chúngtacó1đồthịvôhướng5đỉnh: Visited Queue 0 3 1 2 4 Hình7.VídụBFS
1. Chúngtabắt đầutừđỉnh0,thuậttoánBFSbắtđầubằngcách
đặtnóvàoVisited vàđặt tấtcảcác đỉnhliềnkềcủanóvào Queue: Visited 0 Queue 1 2 3 0 3 1 2 4 Hình8.Bước1vídụBFS
2. Tiếptheo,chúngtatruycậpvàophầntửđầucủahàng đợi
là1vàđiđến cácnút liềnkềcủa nó,vì0đã đượctruy cập nêntathăm2: Visited 0 1 Queue 2 3 0 3 1 2 4 Hình9.Bước2vídụBFS
3. Lầnnày,đỉnh2sẽđượcduyệtvàoVisited,đỉnh2có đỉnh
liềnkềchưađượcthămlà4, vìvậychúngtathêmđỉnh đó vàocuốiQueue: Visited 0 1 2 Queue 3 4 0 3 1 2 4 Hình10.Bước3 vídụBFS
4. Lầnnàytasẽtiếptụcduyệtđếnđỉnh3ởQueuevàcho vào
Visited,vìđỉnh3khôngcònđỉnhliềnkềnàochưaduyệtnên Queuesẽgiữnguyên: Visited 0 1 2 3 Queue 4 0 3 1 2 4 Hình11.Bước4 vídụBFS
5. Cuốicùngchỉcònđỉnh4chưađượcduyệttrongQueue,
đỉnhliềnkềduynhấtcủanólà2đãđược truycậpnên Queuevẫngiữnguyên: Visited 0 1 2 3 4 Queue 0 3 1 2 4 Hình12.Bước5 vídụBFS
VìQueue trống,vậynênchúng tađãhoànthành việctìm
kiếmtheochiềurộng(BFS) củađồthị trên
1.2.4KếtluậnvềthuậttoánBFS 1.Độ phứctạp:
LàO(V+E),trongđóVlàsốlượngđỉnhvàElàsốlượngcạnh
trongđồthị.Thuậttoánduyệtquatấtcảcácđỉnhvàcạnhmột
lần,dođóđộphứctạplàtuyếntínhtheotổngsốđỉnhvàcạnh.
2.ƯuđiểmcủathuậttoánBFS:
-Tìmkiếmtheochiềurộng(BFS)đảmbảotìmkiếmtừđỉnhgốc
đếncácđỉnhxanhấttrướckhitìmđếncácđỉnhgầnhơn.Điều
nàyđảmbảothuậttoántìmkiếmBFStìmkiếmtheocấpđộvà
tìmrađườngđingắnnhấttừđỉnhgốcđếncácđỉnhkhác.
-BFS đượcsửdụngrộngrãitrong các bàitoán tìm kiếmđường
đingắn nhất,kiểmtra tínhliênthôngcủađồthị,tìm kiếm các
thànhphầnliênthông,tìmkiếmtrongcáccây, vànhiềubàitoán khác.
3.Nhược điểmcủathuậttoánBFS:
-Thuậttoán BFSsử dụng mộthàngđợi đểlưu trữcác đỉnhchờ
duyệt.Điềunàycóthểdẫnđếnsử dụngkhônggianlớnnếuđồ
thịcósốlượngđỉnhlớn.
-Trongtrườnghợpđồthịcóchutrình,nếukhôngcócơchếđể
xácđịnhđỉnhđãđược duyệt quahaychưa,thuậttoáncó thểrơi
vàovònglặpvôhạn.Đểkhắcphụcvấnđềnày,cầnsửdụngmột
mảngvisitedđểđánhdấucác đỉnhđãđượcduyệtqua. 4.Kết luận:
-BFSđảmbảotìmkiếmtheocấpđộvàtìmrađườngđingắn
nhấttừđỉnhgốc đếncácđỉnhkháctrongđồthị.Điềunàylàm
choBFShữuíchtrongviệctìmkiếmđườngđingắnnhấthoặc
kiểmtratínhliênthôngcủađồthị.
-Tuynhiên,BFScũngcónhược điểm.Thuậttoánsửdụng
khônggianlớnđểlưu trữhàngđợivà mảngvisitedđểđánhdấu
cácđỉnhđãđượcduyệtqua.Điềunàycóthểgâyrasựlãngphí
khônggiankhiđồthịcósốlượngđỉnhlớn.
-Tómlại,BFSlàmộtthuậttoánquantrọngvàhữuíchtrong
việctìmkiếmđườngđingắnnhấtvàkiểmtratínhliênthông
củađồthị.Mặcdùnócónhượcđiểmnhưsửdụngkhônggian
lớnvàcóthểrơivàovònglặpvôhạn,nhưngvớiưuđiểmcủa
mình,BFSvẫnlàmộtcôngcụmạnhmẽtrongviệcgiảiquyết
cácbàitoánliênquanđếnđồthị. 1.3ThuậttoánDijkstra 1.3.1Kháiniệm
-TheoWikipedia,thuậttoánDijkstra,mangtêncủanhàkhoa
họcmáytínhngườiHàLanEdsgerDijkstravàonăm1956vàấn
bảnnăm1959,làmộtthuậttoángiảiquyếtbàitoánđườngđi
ngắnnhấtnguồnđơntrongmột đồthịcóhướngkhôngcócạnh mangtrọngsốâm.
- Trọng sốkhôngâm làcáccạnhmangtínhtổngthểhơnlà
khoảngcáchhìnhhọcgiữa2định,vìvậythuậttoánsẽcótính chínhxáccaohơn.
-Vídụ,đểbiểudiễnđườngđingắnnhấttừthànhphốAđến
thànhphố B,chúngta dùng cácđỉnhcủa đồthị đểthịphạm các
thànhphốvàcác cạnhđểbiểudiễncác đườngnốigiữachúng.
Trọngsốcáccạnh sẽđượcxemnhư độdàicủacácconđường,
vìvậymà chúngkhôngâm,nhờ đóthuậttoánsẽchỉracon đườngngắnnhất.
-Thuậttoán thường đượcsửdụngtrongđịnhtuyếnvới một
chương trìnhcon trong cácthuậttoánđồthịhay trong công
nghệHệthốngđịnhvị toàncầu (GPS). 1.3.2Ýtưởng
Ýtưởngcơbảncủathuậttoánnhưsau:
Bước1:Từ đỉnhgốc,khởitạokhoảngcáchtới chínhnó là00,
khởitạokhoảngcáchnhỏnhấtbanđầutớicácđỉnhkháclà+∞.
Tađượcdanhsáchcáckhoảngcáchtớicácđỉnh.
Bước2:Chọnđỉnhacókhoảngcáchnhỏnhấttrongdanhsách
nàyvàghinhận.Cáclầnsausẽkhôngxéttớiđỉnhnàynữa.
Bước3:Lầnlượtxétcácđỉnhkềbcủađỉnha. Nếu khoảngcách
từđỉnhgốctới đỉnhbnhỏhơnkhoảngcáchhiệntạiđangđược
ghinhậnthìcậpnhậtgiátrịvà đỉnhkềavàokhoảngcáchhiện tạicủab.
Bước4:Saukhixéttấtcảđỉnhkềbcủađỉnh a.Lúcnàytađược
danhsáchkhoảngcáchtớicácđiểmđãđượccậpnhật.Quay
lạiBước2vớidanhsáchnày.Thuậttoánkết thúckhichọnđược
khoảngcách nhỏ nhấttừtất cảcácđiểm. 1.3.3Vídụ
Đểdễdànghiểuýtưởngcủathuậttoán.Chúngtacùngxemví
dụvớiđồ thịvôhướngG.ThuậttoánDijkstrasẽtìmkhoảng
cáchtừđỉnhgốc0 tớitất cảcácđỉnhcònlạitrongđồthị G:
1. Đầutiên,khởitạokhoảngcáchnhỏnhấtbanđầutớicácđỉnh
kháclà +∞vàkhoảngcáchtớiđỉnh gốclà0.Tađượcdanh
sáchcáckhoảngcách tớicác đỉnh: 0 1 2 3 4 5 0 (∞,-) (∞,-) (∞,-) (∞,-) (∞,-)