Tải bản đầy đủ (.pdf) (134 trang)

Giáo trình cấu trúc dữ liệu Trần Cao Đệ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.78 MB, 134 trang )

DATA STRUCTURES

TR NăCAOă

2012



M CăL C
CH

NGăI:ăM ă
T

U ......................................................................................................................................... 4

1.
2.
3.
4.

BĨẤ TOÁN
N Cả NẢ TậÌNả .................................................................................................... 4
Mô hình hóa bài toán ............................................................................................................................ 4
Gi iăthu tă(algorithms) ......................................................................................................................... 7
Ngônăng ăgi ăvàătinhăch ăt ngăb că(Pseudo-language and stepwise refinement) ............................ 10
Tómăt t ............................................................................................................................................... 13

1.
2.
3.



KẤ U D LẤ U Tậ U T NẢ (ABSTậACT DATA TYPE -ADT) ....................................................... 13
Kháiăni mătr uăt ngăhóa ................................................................................................................... 13
Tr uăt ngăhóaăch ngătrình ............................................................................................................. 14
Tr uăt ngăhóaăd ăli u ....................................................................................................................... 14

I.

II.

III.
KẤ U D LẤ U - C U TậÚC D LẤ U VĨ KẤ U D LẤ U Tậ U T NẢ (DATA TYPES, DATA
STRUCTURES, ABSTRACT DATA TYPES) ..................................................................................................... 15
BĨẤ T P ............................................................................................................................................................ 17
CH

NGăII:ăCỄCăKI UăD ăLI UăTR UăT

I.
1.
2.
3.

KẤ U D LẤ U Tậ U T NẢ DANả SÁCả (LẤST) ........................................................................... 18
Kháiăni mădanhăsách .......................................................................................................................... 18
Các phép toán trên danh sách ............................................................................................................. 18
Càiăđ tădanhăsách ................................................................................................................................ 20
a.
b.
c.


II.
1.
2.
3.

Cài đ t danh sách b ng m ng (danh sách đ c) ............................................................................................... 20
Cài đ t danh sách b ng con tr (danh sách liên k t đ n) ............................................................................. 25
Cài đ t b ng con nháy ............................................................................................................................................... 30

NẢ N X P (STACK) .............................................................................................................................. 35
nhăngh aăng năx p ........................................................................................................................... 35
Cácăphépătoánătrênăng năx p ............................................................................................................... 35
Càiăđ tăng năx p ................................................................................................................................. 35
a.
b.

Cài đ t ng n x p b ng danh sách ......................................................................................................................... 36
Cài đ t b ng m ng ...................................................................................................................................................... 37

ngăd ngăng năx păđ ălo iăb ăđ ăquiăc aăch

4.

ngătrình ..................................................................... 39

ảĨNẢ
Ấ (ẬUEUE) ........................................................................................................................ 43
nhăNgh a ......................................................................................................................................... 43
Cácăphépătoánăc ăb nătrênăhàng .......................................................................................................... 44

Càiăđ tăhàngăđ i .................................................................................................................................. 44

III.
1.
2.
3.
a.
b.
c.
d.

4.

NGăC ăB Năă(BASICăABSTRACTăDATAăTYPES) ... 18

Cài đ
Cài đ
Cài đ
Cài đ

t hàng b
t hàng b
t hàng v
t hàng b

ng m ng ........................................................................................................................................... 44
ng m ng theo ph ng pháp t nh ti n .................................................................................... 45
i m ng xoay vòng ......................................................................................................................... 47
ng danh sách liên k t ( hay cài đ t b ng con tr ) .............................................................. 49


M tăs ă ngăd ngăc aăc uătrúcăhàng .................................................................................................... 51
DANả SÁCả LẤÊN K T KÉP (ếỊỐbệe - lists) ........................................................................................ 51

IV.

BĨẤ T P ............................................................................................................................................................ 56
CH

NGăIII:ăC UăTRÚCăCỂY (TREES) ...................................................................................................... 60

I.
1.
2.
3.
4.
II.
III.
1.

CÁC TảU T NẢ C B N TậÊN CÂY ................................................................................................ 60
nhăngh aăcây.................................................................................................................................... 60
Th ăt ăcácănútătrongăcây ..................................................................................................................... 61
Cácăth ăt ăduy tăcâyăquanătr ng ......................................................................................................... 61
Câyăcóănhãnăvàăcâyăbi uăth c ............................................................................................................. 62
KẤ U D

LẤ U Tậ U T

NẢ CÂY .................................................................................................... 64


CĨẤ
T CÂY ..................................................................................................................................... 65
Càiăđ tăcâyăb ngăm ng ....................................................................................................................... 65

i


2.
3.
4.

Bi uădi năcâyăb ngădanhăsáchăcácăcon ............................................................................................... 70
Bi uădi nătheoăconătráiănh tăvàăanhăemăru tăph i ............................................................................... 71
Càiăđ tăcâyăb ngăconătr ..................................................................................................................... 73

1.
2.
3.

CÂY Nả PảÂN (BẤNAậY TậEES) ........................................................................................................ 75
nhăngh a.......................................................................................................................................... 75
Duy tăcâyănh ăphân ............................................................................................................................ 75
Càiăđ tăcâyănh ăphân ........................................................................................................................... 76

1.
2.

CÂY TÌM KẤ M Nả PảÂN (BINARY SEARCH TREES) ...................................................................... 79
nhăngh a.......................................................................................................................................... 79
Càiăđ tăcâyătìmăki mănh ăphân............................................................................................................ 80


IV.

V.

BĨẤ T P ........................................................................................................................................................... 85
CH

NGăIV:ăT PăH P ................................................................................................................................... 88

I.

KảÁẤ NẤ M T P ả P ........................................................................................................................... 88

II.

KẤ U D

LẤ U Tậ U T

NẢ T P ả P ........................................................................................... 88

CĨẤ
T T P ả P ........................................................................................................................... 89
Càiăđ tăt păh păb ngăvectorăBit .......................................................................................................... 89
Càiăđ tăb ngădanhăsáchăliênăk t .......................................................................................................... 90

III.
1.
2.

1.
2.

T

Ấ N (DẤCTẤONAậY) ...................................................................................................................... 93
Càiăđ tăt ăđi năb ngăm ng ................................................................................................................. 94
Càiăđ tăt ăđi năb ngădanhăsáchăliênăk t .............................................................................................. 95

1.
2.
3.
4.

C U TậÚC B NẢ B M (ảASả TABLE) .............................................................................................. 96
K ăthu tăb m ...................................................................................................................................... 96
B ngăb măm ..................................................................................................................................... 97
B ngăb măđóng ................................................................................................................................ 100
Cácăph ngăphápăxácăđ nhăhàmăb m ............................................................................................... 103

1.
2.

ảĨNẢ U TẤÊN (ịrỄỊrỄỏy qỐeỐe) ......................................................................................................... 105
Kháiăni măhàngă u tiên .................................................................................................................... 105
Càiăđ tăhàngă uătiên ......................................................................................................................... 105

IV.

V.


VI.

Cây có th t t ng ph n ......................................................................................................................................... 105
Cài đ t cây có th t t ng ph n b ng m ng ................................................................................................... 108

a.
b.

BĨẤ T P ......................................................................................................................................................... 112
CH

NGăV:ă

ăTH ă(GRAPH) .................................................................................................................... 114

I.

CÁC

Nả NẢả A ............................................................................................................................... 114

II.

KẤ U D

LẤ U Tậ U T

NẢ


Tả ............................................................................................ 115

BẤ U DẤ N
Tả ........................................................................................................................ 116
Bi uădi năđ ăth ăb ngămaătr năk ..................................................................................................... 116
Bi uădi năđ ăth ăb ngădanhăsáchăcácăđ nhăk ................................................................................... 118

III.
1.
2.
1.
2.

CÁC PảÉP DUY T
Tả (TậAVEậSALS Oạ ẢậAPả) ................................................................. 118
Duy tătheoăchi uăsâuă(depth-first search) ......................................................................................... 118
Duy tătheoăchi uăr ngă(breadth-first search).................................................................................... 120

1.
2.
3.
4.

M T S BĨẤ TOÁN TậÊN
Tả ..................................................................................................... 122
Bàiătoánătìmăđ ngăđiăng nănh tăt ăm tăđ nhăc aăđ ăth ă(theăsingleăsourceăshortedăpathăproblem) . 122
Tìmăđ ngăđiăng nănh tăgi aăt tăc ăcácăc păđ nh ............................................................................. 124
Bàiătoánătìmăbaoăđóngăchuy năti pă(transitiveăclosure) .................................................................... 125
Bàiătoánătìmăcâyăbaoătrùmăt iăthi uă(minimum-cost spanning tree) ................................................. 125


IV.

V.

a.
b.

Gi i thu t Prim ............................................................................................................................................................ 125
Gi i thu t Kruskal....................................................................................................................................................... 126

BĨẤ T P ......................................................................................................................................................... 128
TĨẤ LẤ U TảAM Kả O ................................................................................................................................ 130

ii


L IăNịIă

U

ăđápă ngănhuăc uăh căt păc aăcácăb năsinhăviên,ănh tălàăsinhăviênăchuyênăngànhă
Tinăh c,ăKhoaăCôngăngh ăThôngătin vàăTruy năthôngă- Tr ngă iăh căC năTh ăđãă
ti năhànhăbiênăso năcácăgiáoătrình,ăbàiăgi ngăchínhătrongăch ngătrìnhăh c.ăGiáoătrìnhă
mônă C uă trúcă D ă li uă đ că biênă so nă c ă b nă d aă trênă quy nă "Dataă Structuresă andă
Algorithms"ăc aăAlfredăV.ăAho,ăJohnăE.ăHopcroftăvàăJeffreyăD.ăUllmanădoăAddisonWesley.
Giáo trình này đ căso nătheoăđ ăc ngăchiăti tămônăC uătrúc d ăli uăc aăsinhăviênă
chuyên ngành Tină h că c aă Khoaă Côngă ngh ă Thôngă tin - Tr ngă iă h că C nă Th .ă
M cătiêuălà giúpăcácăb năsinhăviênăchuyênăngànhăcóăm tătàiăli uăcôăđ ngădùngălàmătàiă
li uăh căt p.ăTuyăv y,ăcácăđ iăt ngăsinh viên khác v năcóăth ăs ăd ngăgiáoătrìnhănàyă
làmă tàiă li uă thamă kh oă hayă t ă h c.ă Chúngă tôiă ngh ă r ngă cácă b nă sinhă viênă khôngă

chuyênătinăvàănh ngăng iăquanătâmăt iăcác c uătrúcăd ăli uăvàăgi iăthu tăs ătìmăđ că
trongănàyănh ngăđi uăh uăích.
Giáoătrìnhăđ căphátăhànhăn iăb ăl năđ uătiênăvàoăn mă1998,ăvàăđ căch nhăs a,ătuă
b ăhàngăn m.ăL năch nhăs aăvàoăn mă2007ă(vàăhoànăch nhăn mă2008)ăđãăchuy năcácă
càiăđ tăb ngăPascalăsangăCăchoăsátăh năv iăsinhăviênăchuyênăngànhă- hi năđangăđ că
trangăb ăngônăng ăCănh ălàăngônăng ăl pătrìnhăc năb n.ăVi căcàiăđ tăcácăc uătrúcăd ă
li uă trong m tă ngônă ng ă l pă trìnhă c ă th ă nh ă Că hayă Pascală khôngă ph iă làă m că đíchă
chínhăc aăgiáoătrình.ăTuyănhiên,ăh uăh tăcácă đo năch ngătrìnhă đ căvi tătrongăgiáoă
trìnhăđãăđ căbiênăd chătrongămôiătr ngăVisual C++ 6.0.
N iădungăgiáoătrìnhămôn C uătrúcăD ăli uănàyăs ăcungăc păchoăsinhăviênăcácăki nă
th căc ăb năv ăcácăki uăd ăli uătr uăt ngăvàăcácăphépătoánăc ăb nătrên các ki uăd ă
li uătr uăt ngăđó.ăSauăkhiăh căxongămônănày,ăsinhăviênăs :
 N măđ

căkháiăni măki uăd ăli u,ăki uăd ăli uătr uăt

ng.

 N măv ngăvàăcàiăđ tăđ căcácăki uăd ăli uătr uăt ngăc ăb nănh ădanhăsách,ă
ng năx p,ăhàngăđ i,ăcây,ăt păh p,ăb ngăb m,ăđ ăth ăb ngăm tăngônăng ăl pă
trìnhăc năb n.
 V năd ngăđ căcácăki uăd ăli uătr uăt
t hayătrongăKhoaăh cămáyătính.
Giáoă trìnhă nàyă đ
ngành :

ngăđ ăgi iăquy tăbàiătoánătrongăth că

că biênă so nă đ ă gi ngă d yă choă sinhă viênă b că đ iă h că chuyênă


 Tinăh că
 Toán-Tin
 Lý-Tin


i năt ă- Vi năthôngăvàăT ăđ ngăhóa.

Giáoă trìnhă cònă cóă th ă dùngă đ ă gi ngă d yă nh ă làă mônă h că c ă b n trongă t tă c ă cácă
ngànhăg năv iăTinăh c.
1


ăh căt tămônăC uătrúcăD ăli uănày,ăsinhăviênăc năph iăcóăcácăki năth căc ăb n:
 Ki năth căvàăk ăn ngăl pătrìnhăc năb n.ăVi cădùngăm tăngônăng ăl pătrìnhăc ă
th ăkhôngăph iălàăm tăyêuăc uăb tăbu c.ăGiáoătrìnhănàyăminhăh aăcácăcàiăđ tă
c ă th ă b ngă ngônă ng ă C/C++ đóă làă m tă ngônă ng ă quenă thu că đ iă v iă sinhă
viênăchuyênăngànhăTinăh c.ă
 Ki năth cătoánăr iăr c.
N iădungăgiáoătrìnhăg mă5ăch ngăvàăđ căthi tăk ătrongăkhuônăkh ă3 tínăch ă(45
ti t)ăc aăm tămônăh cătrongăch ngătrìnhăđ iăh c,ătrongăđóăcóăkho ngă30ăti tăgi ngălý
thuy tăvàă15 ti tăbàiăt pămàăgiáoăviênăs ăh ngăd năchoăsinhăviênătrênăl p.ăN iădungă
giáoătrìnhăh iăchúătr ngăv ăcácăc uătrúcăd ăli uăvàăcácăgi iăthu tătrênăcácăc uătrúcăd ă
li uăđóăh nălàăcácăch ngătrìnhăhoànăch nhătrongăngônăng ăl pătrìnhăC/C++.
Ch ngă1:ăTrìnhăbàyăcáchăti păc năt ăm tăbàiătoánăđ năch ngătrình,ănóăbaoăg mă
môăhìnhăhoáăbàiătoán,ăthi tăl păc uătrúcăd ăli uătheoămôăhìnhăbàiătoán,ăvi tăgi iăthu tă
gi iă quy tă bàiă toánă vàă cácă b cătinhăch ă gi iă thu tă đ aă đ nă càiă đ tă c ă th ă trongă m tă
ngônăng ăl pătrình.
Ch ngă2:ăTrìnhăbàyăki uăd ăli uătr uăt ngădanhăsách,ăcácăc uătrúcăd ăli uăđ ăcàiă
đ tădanhăsách.ăNg năx păvàăhàngăđ iăc ngăđ cătrìnhăbàyătrongăch ngănàyănh ălàăhaiă
c uătrúcădanhăsáchăđ căbi t.ă ngăd ngăng năx păđ ăkh ăđ ăquiăc aăch ngătrìnhăđ că

coiălàăm tă ngăd ngăquanătr ngăc aăc uătrúcăng năx p.ăNgoàiăraăchúngătôiăcònăg iăýă
m tăs ă ngăd ngăc aăc uătrúcăhàngăđ i.ăCu iăch ng dànhăđ ătrìnhăbàyăc uătrúcădanhă
sáchăliênăk tăképăchoănh ngăbàiătoánăc năduy tădanhăsáchătheoăhaiăchi uăxuôi,ăng că
m tăcáchăthu năl i.ă
Ch ngănàyăcóănhi uăcàiăđ tăt ngăđ iăchiăti tăđ ăcácăb năsinhăviênăm iăti păc năv iă
l pătrìnhăcóăc ăh iănângăcaoăkh ăn ngăl pătrìnhătrongăngônăng ăC/C++ đ ngăth iăc ngă
nh măminhăh a vi căcàiăđ tăm tăki uăd ăli uătr uăt ngătrongăm tăngônăng ăl pătrìnhă
c ăth .
Ch ngă3:ăGi iăthi uăv ăki uăd ăli uătr uăt ngăcây,ăkháiăni măcâyăt ngăquát,ăcácă
phépăduy tăcâyăt ngăquátăvàăcàiăđ tăcâyăt ngăquát.ăK ăđ n, chúngătôiătrìnhăbàyăv ăcâyă
nh ăphân,ăcácăcáchăcàiăđ tăcâyănh ăphân.ăCu iăcùng,ăchúngătôiătrìnhăbàyăcâyătìmăki mă
nh ăphânănh ălàă m tă ngăd ngăc aăcâyă nh ăphânăđ ăl uătr ăvàătìmă ki măd ăli u m tă
cáchăhi uăqu .
Ch ngă4:ăNóiăv ăki uăd ăli uătr uăt ngăt păh p,ăcácăcáchăđ năgi năđ ăcàiăđ tăt pă
h pănh ăcàiăđ tăb ngăvect ăbítăvà b ngădanhăsáchăcóăho căkhôngăcóăth ăt .ăPh năchínhă
c aăch ngănàyătrìnhăbàyăc uătrúcăd ăli u t ăđi n,ăđóălàăt păh păv iăbaăphépătoánăthêm,ă
xóa vàătìmăki măph năt ,ăcùngăv iăcácăc uătrúcăthíchăh păchoănóănh ălàăb ngăb măvàă
hàngă uătiên.
Ch ngă5:ăTrìnhăbàyăki uăd ăli uătr uăt ngăđ ăth ,ăcácăcáchăbi uădi năđ ăth ,ăt călà
càiă đ tă đ ă th .ă Cácă phépă duy tă đ ă th ă baoă g mă duy tă theoă chi uă r ngă vàă duy tă theoă
chi uăsâuăm tăđ ăth c ngăđ cătrìnhăbàyătrongăch ng.ăDoăh năch ăv ăth iăl ngălên
l pănênăchúngătôiăkhôngătáchăriêngăraăđ ătrìnhăbàyăđ ăth ăcóăh ng,ăđ ăth ăvôăh ngă
nh ngăchúngătôiăs ăphânăbi tănóă ănh ngăch c năthi t.ăCh ngănàyăđ ăc păm tăs ăbàiă
2


toánăth ngăg pătrênăđ ăth ănh ălàăbàiătoánătìmăđ ngăđiăng nănh t,ăbàiătoánătìmăcâyă
ph ăt iăthi u.…Trongăch ngătrìnhăđ iăh c,ăLýăthuy tăđ ăth ăđ cănghiênăc uăsâuăh nă
trongăcácămônăh cănh ăToánăr iăr căvàăLýăthuy tăđ ăth ,ăvìăv yăch ngănàyăch ăgi iă
thi uăm tăs ăbàiătoánăđ năgi nănh tăđ ăsinhăviênăv năd ngăcáchăcàiăđ tăđ ăth ăvàăcác

phép toánătrênăđ ăth ăđ ăl pătrìnhăgi iăcác bài toán đó.
Chúngătôiăhyăv ngătàiăli uănàyăđãăđúcăk tă kinhănghi măgi ngăd yă nhi uăn mămônă
C uă trúc d ă li uă vàă Gi iă thu tă c aă chúngă tôi. M că dùă đãă r tă c ă g ngă trongă quáă trìnhă
biênăso n,ănh ngăgiáo trình cóăth ăv năcòn nhi uăkhi măkhuy tăvàăh năch .ăR tămongă
nh năđ căs ăđóngăgópăýăki năquýăbáuăc aăsinhăviênăvàăcácăb năđ căđ ăgiáoătrìnhăngàyă
m tăhoànăthi năh n.

3


CH
I.

T ăBĨIăTOỄNă
1.

NGăI: M ă

NăCH

U

NGăTRỊNH

Mô hình hóa bài toán

ăgi iăm tăbàiătoánătrongăth căt ăb ng máy tính (computer) taăph iăb tăđ uăt ăvi că
xácă đ nhă bàiă toán.ă Nhi uă th iă giană vàă côngă s că b ă raă đ ă xácă đ nhă bàiă toánă c nă gi iă
quy t,ăt călàăph iătr ăl iărõăràngăcâuăh iă"ph iălàmăgì?"ăsauăđóălàă"làmănh ăth ănào?".ă
Thôngăth ng,ăkhiăkh iăđ u,ăh uăh tăcácăbàiătoánălàăkhôngăđ năgi n,ăkhôngărõăràng.ă

ăgi măb tăs ăph căt păc aăbàiătoánăth căt ,ătaăph iăhìnhăth căhóaănó,ăngh aălàăphátă
bi uăl iăbàiătoánăth căt ăthànhăm tăbàiătoánăhìnhăth căhayăcònăg iălàămôăhìnhătoán.ăCóă
th ăcóăr tănhi uăbàiătoánăth căt ăcóăcùngăm tămôăhìnhătoán.
Víăd ă1: v năđ ătôămàuăb năđ ăth ăgi i:
Gi ă s ă taă c nă ph iă tôămàuă choă cácă n cătrênă b nă đ ă th ă gi i (hình I.1).ă Trongă đóă
m iăn căđ cătôăm tămàuăvàăhaiăn călángăgi ng (có biênăgi i chung)ăthìăph iăđ că
tôăb ngăhaiămàuăkhácănhau.ăHãyătìmăm tăph ngăánătôămàuăcácăn cătrênăb năđ ăsao
choăs ămàuăs ăd ngălàăítănh t.

Hình I.1: B năđ ăth ăgi i.

Môăhìnhăhóaăbàiătoánănàyăcóăth ăhi uălà: tìmăcáchăbi uădi năbàiătoánăm tăcáchătr uă
t ngă h nă đ ă g tă b ă cácă chiă ti tă khôngă c nă thi t.ă Víă d ă taă ch ă c nă ghiă l iă t tă c ă cácă
n cătrênăb năđ ăvàăm iăquanăh ă“lángăgi ng”ăgi aăhaiăn c,ăt călàăch ăc năbi tăn că
nàoăv iăn cănàoăcóăbiênăgi iăchung.ăM tăcáchămôăhìnhăhóaălà:ăv ăm iăn cănh ăm tă
đi m;ă n uă haiă n căcóă chungă biênă gi iătaă s ă v ă m tăđ ngăn iă haiă đi mă t ngă ng.ă
V yăb năđ ăth ăgi iăvàăm iăquanăh ălángăgi ngăgi aăcácăn căđãăđ căbi uădi năb ngă
m tă đ ă th (graph):ă m iăđ nhă làă m tă n c,ăhaiă n căcóă biênă gi iăchungă thìăhaiă đi mă
t ngă ngăs ăđ căn iăv iănhauăb iăm tă đo năth ng hay cong tùy thích,ăg iălàăcung
hayăc nhăc aăđ ăth . Ch ngăh n,ăm tăph năc aăb năđ ăth ăgi iăđ căchoătrongăhìnhăI.2ă
cóăth ămôăhìnhăhóaăb ngăm tăđ ăth ănh ătrongăhìnhăI.3.

4


HìnhăI.2:ăM tăph năc aăb năđ ăth ăgi i.

HìnhăI.3:ăMinhăh aăvi cămôăhìnhăhóaăchoăph năb năđ ăth ăgi iătrongăhìnhăI.2.

Bài toán “Tôămàuăchoăb năđ ăth ăgi i” tr ăthành:

 Tìmăcáchătôămàuăchoăt tăc ăcácăđ nhăđ ăth ăsao cho haiăđ nhăcóăc nhăn iănhau
thìăph iăđ cătôăb ngăhaiămàuăkhácănhau;
 S ămàuăđ

căs ăd ngălàăítănh t.

Rõăràng,ăgi ăđây bàiătoánătôămàuăđ tăraăbanăđ uăđãăcóăv ă“toánăh c”ăh năvàănóăxácă
đ nhăc ăth ăh năv năđ ă“ph iălàmăgì?”.ăVi călàmăsaoăđ ăgi iăđ căbàiătoánănày,ăt călàă
“làmănh ăth ănào?”ăcònăc năph iăđ căti păt cătháoăg .
5


Víăd ă2:ă ènăgiaoăthông
Choăm tăngãăn mănh ăhình I.4,ătrongăđóăCăvàăEălàăcácăđ ngăm tăchi uătheoăchi uă
m iătên,ăcácăđ ngăkhácălàăhaiăchi u.ăHãyăthi tăk ăm tăb ngăđènăhi uăđi uăkhi năgiaoă
thôngăt iăngãăn mănàyăm tăcáchăh pălý,ăngh aălà:ăphânăchiaăcácăl iăđiăt iăngãăn mănàyă
thànhăcácănhóm,ăm iănhómăg m cácăl iăđiăcóăth ăcùngăđiăđ ngăth iănh ngăkhôngăx yă
raătaiăn năgiaoăthôngă(cácăh ngăđiăkhôngăc tănhau),ăvàăs ăl ngănhómălàăítănh tăcóăth ă
đ c.ă
Taăcóăth ăxemăđ uăvàoă(input)ăc aăbàiătoánălàăt tăc ăcácăl iăđiăt iăngãăn mănày,ăđ uă
raă(output)ăc aăbàiătoánălàăcácănhómăl iăđiăcóăth ăđiăđ ngăth iămàăkhôngăx yăraătaiăn nă
giao thông. M iănhómăs ăt ngă ngăv iăm tăphaăđi uăkhi năc aăđènăhi u. Vì v y, ta
ph iătìmăki măl iăgi iăv iăs ănhómălàăítănh tăđ ăgiaoăthôngăkhôngăb ăt căngh năvìăph iă
ch ăđ iăquáălâu.ă

HìnhăI.4:ăVíăd ăm tăngãăn m.

T ngăt ănh ătrongăvíăd ă1,ătr căh tătaătìmăcáchămôăhìnhăhóaăbàiătoán,ăt călàătìmă
cáchătr uăt ngăhóaăđ ăg tăb ăcácăchiăti tăkhôngăc năthi t.ă ăgi iăbàiătoánăv aăđ tăra,ă
ítănh tătaăph iăbi tă ăngãăn măcóăbaoănhiêuăl iăđi,ăl iăđiănàoăv iăl iăđiănàoăcóăh ngă

giaoăthôngăkhôngăc tănhau,ăl iăđiănàoăv iăl iăđiănàoăcóăh ngăgiaoăthôngăc tănhau.ă
Nh năth yăr ngăt iăngãăn mănàyăcóă13ăl iăđi:ăAB,ăAC,ăAD,ăBA,ăBC,ăBD,ăDA,ăDB,ă
DC, EA, EB, EC, ED. ăcóăth ăgi iăđ căbàiătoánătaăph iătìmăm tăcáchănàoăđóăđ ăth ă
hi năm iăliênăquanăgi aăcácăl iăđiănày.ăL iănàoăv iăl iănàoăkhôngăth ăđiăđ ngăth i,ăl iă
nàoăvàăl iănàoăcóăth ăđiăđ ngăth i.ăVíăd ăc păABăvàăECăcóăth ăđiăđ ngăth i,ănh ngăADă
vàăEBăthìăkhông,ăvìăcácăh ngăgiaoăthôngăc tănhau.ă ăđâyătaăs ădùngăm tăs ăđ ătr că
quanănh ăsau:ătênăc aă13ăl iăđiăđ căvi tălênăm tăph ng,ăhaiăl iăđiănàoăn uăđiăđ ngăth iă
s ăx yăraăđ ngănhauă(t călàăhaiăh ngăđiăc tăquaănhau)ătaăn iăl iăb ngăm tăđo năth ng,ă
ho că cong,ă ho că ngo nă ngoèoă tùy thích.ă Taă s ă cóă m tă s ă đ ă nh hình I.5.ă Nh ă v y,ă
trênăs ăđ ănày,ăhaiăl iăđiăcóăc nhăn iăl iăv iănhauălàăhaiăl iăđiăkhôngăth ăchoăđiăđ ngă
th i.ă
V iăcáchăbi uădi nănh ăv yătaăđãăcóăm tăđ ăth ,ăt călàătaăđãămôăhìnhăhoáăbàiătoánă
giaoăthôngă ătrênătheoămôăhìnhătoánălàăđ ăth ;ătrongăđóăm i l iăđiătr ăthànhăm tăđ nhă
c aăđ ăth ,ăhaiăl iăđiăkhôngăth ăcùngăđiăđ ngăth iăđ căn iănhauăb ngăm tăđo n đ c
g iălàăc nhăc aăđ ăth .ăBâyăgi ătaăph iăxácăđ nhăcácănhóm,ăv iăs ănhómăítănh t. M iă

6


nhóm s ă g mă cácă l iă điă cóă th ă điă đ ngă th i,ă nóă ngă v iă m tă phaă c aă đènă hi uă đi uă
khi năgiaoăthông.ăGi ăs ăr ng,ătaădùngămàuăđ ătôălênăcácăđ nhăc aăđ ăth ănàyăsaoăcho:
 Cácă l iăđiă choă phépă cùngă điă đ ngă th iă s ă cóă cùngă m tă màu:ă D ă dàngă nh nă
th yăr ngăhaiăđ nhăcóăc nhăn iănhauăs ăkhôngăđ cătôăcùngămàu;
 S ănhómălàăítănh t: taăph iătínhătoánăsaoăchoăs ămàuăđ

cădùngălàăítănh t.

Hình I.5: Mô hình giao thôngăt i ngãăn mătrongăhìnhăI.4

Tómăl i,ătaăph iăgi iăquy tăbàiătoánăsau:

Tôămàuăchoăđ ăth ă ăhìnhăI.5 sao cho:
 Haiăđ nhăcóăc nhăn iănhauăthìăph iăđ
 S ămàuăđ

cătôăb ngăhaiămàuăkhác nhau;

căs ăd ngălàăítănh t.

năđây,ăbàiătoánă“ ènăgiaoăthông”ăđãăđ căphátăbi uăthànhăm tăbàiătoánăđ ăth .ăTaă
c ngăth yăr ngăhaiăbàiătoánăth căt ă“Tôămàuăb năđ ăth ăgi i”ăvàă“ ènăgiaoăthông”ăxemă
raăr tăkhácăbi tănhauănh ngăsauăkhiămôăhìnhăhóa,ăchúngăth căch tăch ălàăm t,ăđóălàăbàiă
toánă“Tôămàuăđ ăth ”.
iă v iă m tă bàiă toánă đãă đ că hìnhă th că hoá,ă chúngă taă cóă th ă tìmă ki mă cáchă gi iă
trongăthu tăng ăc aămôăhìnhăđóăvàăxácăđ nhăcóăhayăkhôngăm tăph ngăphápăho căm tă
ch ngătrìnhăcóăs năđ ăgi i.ăN uăkhôngăcóăm tăph ngăphápăho căm tăch ngătrìnhă
nh ăv yăthìăítănh tăchúngătaăc ngăcóăth ătìmăđ cănh ngăgìăđãăbi tăv ămôăhìnhăvàădùngă
cácătínhăch tăc aămôăhìnhăđ ăxâyăd ngăm tăgi iăthu tăt t.ă

2.

Gi iăthu tă(algorithms)ă

Khiăđãăcóămôăhìnhăthíchăh păchoăm tăbàiătoánătaăc năc ăg ngătìmăcáchăgi iăquy tă
bàiătoánătrongămôăhìnhăđó.ăKh iăđ uălàătìmăm tăgi iăthu t,ăđóălàăm tăchu iăh uăh nă
cácăch ăth ă(instruction)ămàăm iăch ăth ăcóăm tăýăngh aărõăràngăvàăth căhi năđ cătrongă
m tăl ngăth iăgianăh uăh n.ă
Knuth (1973) đ nhăngh aăgi iăthu tălàăm tăchu iăh uăh năcácăthaoătácăđ ăgi iăm tă
bàiătoánănàoăđó.ăCácătínhăch tăquanătr ngăc aăgi iăthu tălà:

7



 ả Ố ể ỉ (finiteness):ăgi iăthu tăph iăluônăluônăk tăthúcăsauăm tăs ăh uăh nă
b c;
 XáẾ đ ỉể (definiteness):ăm iăb căc aăgi iăthu tăph iăđ
vàăph iăđ căth căhi năchínhăxác,ănh tăquán;

căxácăđ nhărõăràngă

 ảỄ Ố qỐ (effectiveness):ă cácă thaoă tácă trongă gi iă thu tă ph iă đ
trongăm tăl ngăth iăgianăh uăh n.ă

că th că hi nă

Ngoàiăraăm tăgi iăthu tăcònăph iăcóăđ uăvàoă(input)ăvàăđ uăraă(output).
Nóiătómăl i,ăm tăgi iăthu tăph iăgi iăquy tăxongăm tăcôngăvi cănàoăđóăkhiătaăchoăd ă
li uă vào.ă Cóă nhi uă cáchă đ ă th ă hi nă gi iă thu t:ădùngă l i,ădùngă l uă đ ,ă ...ă Vàă m tă l iă
dùngăr tăph ăbi nălàădùngăngônăng ăgi ,ăđóălàăs ăk tăh păc aăngônăng ăt ănhiênăvà các
c uătrúcăc aăngônăng ăl pătrình.
Víăd :ăThi tăk ăgi iăthu tăđ ăgi iăbàiătoán “Tôămàuăđ ăth ” trên.
Choăđ nănay,ăbàiătoánătôămàuăchoăđ ăth ăkhôngăcóăgi iăthu tăt tăđ ătìmăl iăgi iăt iă
u,ăt călà,ăkhôngăcóăgi iăthu tănàoăkhácăh nălàă"th ăt tăc ăcácăkh ăn ng"ăhayă"vétăc n"ă
t tăc ăcácătr ngăh păcóăth ăcóăđ ăxácăđ nhăcáchătôămàuăchoăcácăđ nhăc aăđ ăth ăsaoă
choăs ămàuădùngălàăítănh t.ăTh căt ,ătaăch ăcóăth ă"vétăc n"ătrongătr ngăh păđ ăth ăcóă
s ă đ nhă nh ,ă trongă tr ngă h pă ng că l iă taă khôngă th ă "vétă c n"ă t tă c ă cácă kh ă n ngă
trongăm tăl ngăth iăgianăh pălý,ădoăv yătaăph iăsuyăngh ăcáchăkhácăđ ăgi iăquy tăv nă
đ :
 Thêmăthôngătinăvàoăbàiătoánăđ ăđ ăth ăcóăm tăs ătínhăch tăđ căbi tăvàădùngă
cácătínhăch tăđ căbi tănàyătaăcóăth ăd ădàngătìmăl iăgi i,ăho c
 Thayăđ i yêuăc uăbàiătoánăm tăítăchoăd ăgi iăquy t,ănh ngăl iăgi iătìmăđ că

ch aă ch că làă l iă gi iă t iă u.ă M tă cáchă làmă nh ă th ă đ iă v iă bàiă toánă trênă làă
"C ăg ngătôămàuăchoăđ ăth ăb ngăítămàuănh tăm tăcáchănhanhăchóng".ăÍtămàuă
nh tă ăđâyă cóă ngh aă làă s ă màuă màă taă tìmă đ căkhôngă ph iă luônă luônă trùng
kh păv iăs ămàuăc nădùngătrongăl iăgi iăt iă uă(ítănh t), nh ngătrongăđaăs ă
tr ngăh păthìănóăs ătrùngăv iăđápăs ăc aăl iăgi iăt iă uăvàăn uăcóăchênhăl chă
thìănóă"khôngăchênhăl chănhi u"ăsoăv iăl iăgi iăt iă u,ăbùăl iătaăkhôngăph iă
"vétă c n"ă m iă kh ă n ngă cóă th !ă Nóiă khácă đi,ă taă khôngă dùngă gi iă thu tă "vétă
c n"ăm iăkh ăn ngăđ ătìmăl iăgi iăt iă uămàătìmăm tăgi iăphápăđ ăđ aăraăl iă
gi iăh pălýăm tăcáchăkh ăthiăv ăth iăgian.ăM tăgi iăphápănh ăth ăg iălàăm tă
HEURISTIC.
HEURISTICă choă bàiă toánă tôă màuă đ ă th ,ă th
(GREEDY) là:

ngă g iă làă gi iă thu tă "háuă n"ă

 Cể ỉ m ỏ đ ỉể Ếể a ỏô mỢỐ ốỢ ỏô ỉó b ỉỂ m ỏ mỢỐ m Ễ C ỉỢỊ đó;
 DỐy ỏ ếaỉể sáẾể ẾáẾ đ ỉể Ếể a ỏô mỢỐ.
đ ỉể ồem ỉó Ếó Ệ ố Ễ m ỏ đ ỉể ỉỢỊ đ
ỆểôỉỂ Ếó, ỏô ỉó b ỉỂ mỢỐ C đó.

Ễ ố Ễ m ỏ đ ỉể Ếể a ỏô mỢỐ, ồáẾ
Ế ỏô b ỉỂ mỢỐ C đó ỆểôỉỂ. N Ố

Ýăt ngăc aăHeuristicănàyălàăh tăs căđ năgi n:ăếùỉỂ m ỏ mỢỐ đ ỏô ẾểỊ ỉểỄ Ố đ ỉể
ỉể ỏ Ếó ỏể đ Ế (cácăđ nhăđ căxétătheoăm tăth ăt ănàoăđó),ăkhiăkhôngăth ătôăđ că

8


n aăv iămàuăđangădùngăthìădùngăm tămàu khác.ăNh ăv yătaăcóăth ă"hiăv ng"ălàăs ămàuă

c nădùngăs ăítănh t.
Víăd :ă

ăth ăhìnhăI.6 và cách tô màu cho nó

HìnhăI.6:ă

ăth ăminhăh aăcáchătôămàuătheoă“háuă n”ă(GREEDY).

T iă u

Tô theo GREEDY
(xétăl năl

tătheoăs ăth ăt ăcácăđ nh)

(th ăt tăc ăcácăkh ăn ng)

1:ăđ ;ă2:ăđ

1, 3, 4ă:ăđ

3: xanh; 4: xanh

2, 5 : xanh

5: vàng
Rõăràngăcáchătôămàuătrongăgi iăthu tă"háuă n"ăkhôngăluônăluônăchoăl iăgi iăt iă uă
nh ngănóăđ căth căhi năm tăcáchănhanhăchóng.
Tr ăl iăbàiătoánăgiaoăthôngă ătrênăvàăápăd ngăHEURISTICăGreedyăchoăđ ăth ătrongă

hình I.5 (theoăth ăt ăcácăđ nhăđãăli tăkêă ătrên),ătaăcóăk tăqu :
 Tôămàuăxanhăchoăcácăđ nh:ăAB, AC, AD, BA, DC, ED
 Tôămàuăđ ăchoăcácăđ nh:ăBC, BD, EA
 Tôămàuătímăchoăcácăđ nh:ăDA, DB
 Tôămàuăvàngăchoăcácăđ nh:ăEB, EC.
Nh ăv yătaăđãătìmăraăm tăl iăgi iălàădùngă4ămàuăđ ătôăchoăđ ăth ăhìnhăI.5.ăNh ăđãă
nói,ăl iăgi iănàyăkhôngăch călàăl iăgi iăt iă u.ăV yăli uăcóăth ădùngă3ămàuăho căítăh nă3ă
màuă không?ă Taă cóă th ă tr ă l iă môă hìnhă c aă bàiă toánă vàă dùngă tínhă ch tă c aă đ ă th ă đ ă
ki mătraăk tăqu .ăNh năxétăr ng:

Hình I.7:ăVíăd ăv ăcácăđ ăth ăcóăn iăk tăđ yăđ .

9


 M tăđ ăth ăcóăkăđ nhăvàăm iăc păđ nhăb tăk ăđ uăđ căn iănhauăthìăph iădùngă
kămàuăđ ătô.ăHìnhăI.7ăch ăraăhaiăvíăd ăv iăk=3ăvàăk=4.ă
 M tăđ ăth ătrongăđóăcóăkăđ nhămàăm iăc păđ nhăb tăk ătrongăkăđ nhănàyăđ uă
đ căn iănhauăthìăkhôngăth ădùngăítăh năkămàuăđ ătôăchoăđ ăth .
ăth ătrongăhìnhăI.5 cóă4ăđ nh:ăAC, DA, BD, EBămàăm iăc păđ nhăb tăk ăđ uăđ că
n iănhauăv yăđ ăth ăhìnhăI.5 khôngăth ătôăv iăítăh nă4ămàu.ă i uănàyăchoăphépăk tălu nă
r ngăkhôngăth ădùngăítăh nă4ămàuăđ ătôăchoăđ ăth ăhìnhăI.5.ăNóiăcáchăkhác,ăl iăgi iăv aă
tìmăđ că ătrên,ăv iă4ămàu, c ngălàăl iăgi iăt iă u.ă
Nh ă v yă taă đãă gi iă đ că bàiă toánă giaoă thôngă đãă cho.ă L iă gi iă choă bàiă toánă làă 4ă
nhóm,ăm iănhómăg măcácăl iăcóăth ăđi đ ngăth i,ănóă ngăv iăm tăphaăđi uăkhi năc aă
đènăhi u.ă ăđâyăc nănh năm nhăr ng,ăs ăd ătaăcóăl iăgi iăm tăcáchărõăràngăch tăch ănh ă
v yălàăvìăchúngătaăđãăgi iăbàiătoánăth căt ănàyăb ngăcáchămôăhìnhăhoáănóătheoăm tămôă
hìnhă thíchă h pă (môă hìnhă đ ă th )ă vàă nh cácă ki nă th că trênă môă hìnhă nàyă (bàiă toánă tôă
màuăvàăheuristicăđ ăgi i)ătaăđãăgi iăquy tăđ căbàiătoán.ă i uănàyăkh ngăđ nhăvaiătròă
c aăvi cămôăhìnhăhoáăbàiătoán.


3.
Ngônăng ăgi ăvƠătinhăch ăt ngăb
stepwise refinement)

că(Pseudo-language and

M tăkhiăđãăcóămôăhìnhăthíchăh păchoăbàiătoán,ătaăc năhìnhăth căhoáăm tăgi iăthu tă
trongăthu tăng ăc aămôăhìnhăđó.ăKh iăđ uălàăvi tănh ngăm nhăđ ăt ngăquátăr iătinhăch ă
d năthànhănh ngăchu iăm nhăđ ăc ăth ăh n,ăcu iăcùngălàăcácăch ăth ăthíchăh pătrongă
m tă ngônă ng ă l pă trình.ă Ch ngă h nă v iă heuristică GREEDY,ă gi ă s ă đ ă th ă làă G,ă
heuristicăs ăxácăđ nhăm tăt păh păNewclr cácăđ nhăc aăGăđ cătôăcùngăm tămàu,ămàătaă
g iălàămàuăm iăCă ătrên.ă ăti năhànhătôămàuăhoànăt tăchoăđ ăth ăGăthìăHeuristicănàyă
ph iăđ căg iăl păl iăchoăđ năkhi toànăth ăcácăđ nhăđ uăđ cătôămàu.
PROCEDURE GREEDY ( var G: GRAPH ; var Newclr: SET );
begin
{1}
Newclr := Ø;
{2}
foră(m iăđ nhăvăch aătôămàuăc aăG)ădo
{3}
ifă(văkhôngăđ căn iăv iăm tăđ nhănàoătrongăNewclr)ăthenăbegin
{4}
đánhăd uăvăđãăđ cătôămàu;
{5}
thêm v vào Newclr;
end;
end;

Th ăt căGREEDYăđ


căvi tăv iăngônăng ăgi ăPASCAL

Trongăth ăt căb ngăngônăng ăgi ă ătrên,ăchúngătaăđãădùngăm tăs ăt ăkhóa c aăngônă
ng ăPASCAL xenăl năcácăm nhăđ ăti ngăVi t.ă i uăđ căbi tăn aălàătaădùngăcácăki uă
GRAPH,ăSETăcóăv ăxaăl ,ăchúngălàăcácă"ki uăd ăli uătr uăt ng"ămàăsauănàyăchúngătaă
s ăvi tăb ngăcácăkhaiăbáoăthíchăh pătrongăngônăng ăl pătrìnhăc ăth .ăD ănhiên,ăđ ăcàiă
đ tă th ă t că nàyă thànhă ch ngă trìnhă ch yă đ că trênă máyă tính,ă taă ph iă c ă th ă hoáă d nă
nh ngă m nhă đ ă b ngă ti ngă vi tă ătrênă choă đ nă khiă m iă m nhă đ ă t ngă ngă v iă m tă
đo nămãăthíchăh păc aăngônăng ăl pătrình. Ch ngăh năm nhăđ ăif ă{3} cóăth ăchiăti tă
hoáăh năn aănh ăsau:

10


PROCEDURE GREEDY ( var G: GRAPH ; var Newclr: SET );
begin
{1}
Newclr:= Ø;
{2}
foră(m iăđ nhăvăch aătôămàuăc aăG)ădoăbegin
{3.1} found:=false;
{3.2} foră(m iăđ nhăwătrongăNewclr)ădo
{3.3}
ifă(cóăc nhăn iăgi aăvăvàăw)ăthen
{3.4}
found:=true;
{3.5} if found=false then begin
{4}
đánhăd uăvăđãăđ cătôămàu;

{5}
thêm v vào Newclr;
end;
end;
end;
Th ăt căGREEDYăđãăđ cătinhăch ăm nhăđ ăifă ă{3}

Hình I.8:ăBi uădi năt păh păcácăđ nhănh ălàăm tădanhăsáchă(LIST).

Bâyăgi ătaăhãyăquanătâmăm tăchútăđ năcácăki uăd ăli uătr uăt ngăGRAPHăvàăSET.
Trongăgi iăthu tăvi tăb ngăngônăng ăgi ă ătrên, GRAPHăđ cădùngăđ ăch ă«ăki u »ăc aă
đ ăth ăđ uăvàoăcònăSETăđ ăch ă« ki u »ăc aăt păh păđ uăra.ăM tăcáchănômănaătaăcóăth ă
coi GRAPH nh ălàăt păh păcácăđ nhăvàăt păh păcácăc nhăc aăđ ăth ăđ uăvàoăcònăSET
làăt păh păcácăđ nhă ăđ uăra.ă ăth oălu năkhôngăquáăsaăđàăvàoăcàiăđ t,ătaăhãy gác l iă
vi căbi uădi năt păh păcác c nhăđ ăt pătrungăvàoăt păh păcácăđ nh.ăCóănhi uăcáchăđ ă
bi uădi năt păh păcácăđ nhătrongăngônăng ăl pătrình.ă năgi n, taăxemăcácăt păh păđ nhă
nh ălàăm tădanhăsáchă(LIST)ăcácăs ănguyênăbi uădi năch ăs ăc aăcácăđ nhăvàăk tăthúcă
b ngăm tăgiáătr ăđ căbi tăNULLă(hìnhăI.8).ăV iănh ngăquiă cănh ăv yătaăcóăth ătinhă
ch ăgi iăthu tăGREEDYăm tăb căn aănh ăsau:
PROCEDURE GREEDY ( var G: GRAPH ; var Newclr: LIST );
var
found:boolean;
v,w :integer;
begin
Newclr:= Ø;
v:=ăđ nhăđ uătiênăch aăđ cătôămàuătrongăG;
while v<>null do begin
found:=false;
w:=đ nhăđ uătiênătrongănewclr;
while( w<>null) and (not found) do begin

ifăcóăc nhăn iăgi aăvăvàăwăthen
found:=true;
else w:=ăđ nhăk ăti pătrongănewclr;
end;
if found=false then begin
đánhăd uăvăđãăđ cătôămàu;
thêm v vào Newclr;
end;
v:=ăđ nhăch aătôămàuăk ăti pătrongăG;

11


end;
end;

Th ăt căGREEDYăđãăđ

cătinhăch ăthêm.ă

Vi cădùngăngônăng ăgi ănh măm căđíchăphátăh aăýăt ngăc aăgi iăthu t,ătránhăsaăđàă
vàoăcúăphápăc aăngônăng .ăTuyănhiên,ă ăcácăb cătinhăch ăv ăsau,ăth ăt căngônăng ă
gi ăcàngăg năgi ngăv iăch ngătrìnhătrongăm tăngônăng ăl pătrình.ăVìăv y,ăvi căch nă
ngônăng ăgi ăt aăPASCALăhayăt aăCăhayăt aăm tăngôn ng ăl pătrìnhănàoăkhácălàătùyă
thu căvàoăthóiăquenăc aăng iăs ăd ng,ăvàoăs ăquenăthu căv iăngônăng ăl pătrình.
N uăng iădùngăquenăthu căv i ngônăng ăCăcóăth ăvi tăth ăt căv iăngônăng ăgi ăt aă
C nh ăsau :
void GREEDY ( GRAPH& G, SET& Newclr ){
/*1*/ Newclr = Ø;
/*2*/ foră(m iăđ nhăvăch aătôămàuăc aăG)ă

/*3*/ ifă(văkhôngăđ căn iăv iăm tăđ nhănàoătrongăNewclr){
/*4*/
đánhăd uăvăđãăđ cătôămàu;
/*5*/
thêm v vào Newclr;
}
}

Th t c GREEDY v i ngôn ng gi C

Th ăt cătinhăch ăđ

căvi tăt aăCănh ăsau :

void GREEDY ( GRAPH& G, SET& Newclr )
{
/*1*/ Newclr= Ø;
/*2*/ foră(m iăđ nhăvăch aătôămàuăc aăG)ă{
/*3.1*/
int found=0;
/*3.2*/
foră(m iăđ nhăwătrongăNewclr)
/*3.3*/
ifă(cóăc nhăn iăgi aăvăvàăw)ă
/*3.4*/
found=1;
/*3.5*/ if (!found) {
/*4*/
đánhăd uăvăđãăđ cătôămàu;
/*5*/

thêm v vào Newclr;
}
}
}

Th ăt căcóăth ăđ

cătinhăch ăthêmăm tăb

căn a:

void GREEDY ( GRAPH& G, LIST& Newclr ){
Newclr= ;
intăv=ăđ nhăđ uătiênăch aăđ cătôămàuătrongăG;
while (v<>null) {
int found=0;
intăw=đ nhăđ u tiên trong newclr;
while( w<>null) && (!found)
Ifă(cóăc nhăn iăgi aăvăvàăw)
found=1;
else

12


w=ăđ nhăk ăti pătrongănewclr;
if (!found) {
ánhăd uăvăđãăđ cătôămàu;
Thêm v vào Newclr;
}

v=ăđ nhăch aătôămàuăk ăti pătrongăG;
}
}

4.

Tómăt t

T ănh ngăth oălu n trên, cóăth ătómăt tăcácăb

căti păc năv iăm tăbàiătoánăbaoăg m:

1. Môăhìnhăhoáăbàiătoánăb ngăm tămôăhìnhătoánăh căthíchăh p.
2. Tìmăgi iăthu tătrênămôăhìnhănày.ăB căđ u,ăgi iăthu tăcóăth ămôăt ăm tăcáchă
khôngă hìnhă th c,ă t că làă nóă ch ă nêuă ph ngăh ngăgi iă ho că cácă b căgi iă
m tăcáchăt ngăquát.
3. Hìnhăth căhoáăgi iăthu tăb ngăcáchăvi tăm tăth ăt căb ngăngônăng ăgi ,ăr iă
chiăti tăhoáăd nă("m năd n")ăcácăb căgi iăt ngăquátă ătrên,ăk tăh păv iăvi că
dùngăcácăki uăd ăli uătr uăt ngăvàăcácăc uătrúcăđi uăkhi nătrongăngônăng ă
l pă trìnhă đ ă môă t ă gi iă thu t.ă ă b că này,ă nóiă chung,ă taă cóă m tă gi iă thu tă
t ngăđ iărõăràng,ănóăg năgi ngănh ăm tăch ngătrìnhăđ căvi tătrongăngônă
ng ăl pătrình,ănh ngănóăkhôngăph iălàăm tăch ngătrìnhăch yăđ căvìătrongă
khiăvi tăgi iăthu tătaăkhôngăchúătr ngăn ngăđ năcúăphápăc aăngônăng ăvàăcácă
ỆỄ Ố ế ệỄ Ố cònă ăm cătr uăt ngăch ăkhôngăph iălàăcácăkhaiăbáoăcàiăđ tă
ki uătrongăngônăng ăl pătrình.
4. Càiăđ tăgi iăthu tătrongăm tăngônăng ăl pătrìnhăc ăth ă(Pascal,C,...).ă ăb că
nàyătaădùngăcácăc uătrúcăd ăli uăđ căcungăc pătrongăngônăng ,ăvíăd ăArray,ă
Record,...ă đ ă th ă hi nă cácă ki uă d ă li uă tr uă t ng,ăcácă b căc aă gi iă thu tă
đ căth ăhi năb ngăcácăl nhăvàăcácăc uătrúcăđi uăkhi nătrongăngônăng ăl pă
trìnhăđ cădùngăđ ăcàiăđ tăgi iăthu t.

Tómăt tăcácăb

cănh ăsau:

Môăhìnhătoánăh c
Gi iăthu tăkhôngăhìnhăth c

II.

Ki uăd ăli uătr uăt
Ch

KI UăD ăLI UăTR UăT
1.

Kháiăni mătr uăt

ng

ngătrìnhăngônăng ăgi

C uătrúcăd ăli u
Ch

ngătrìnhăPascal,ăC,
Java ...

NGă(ABSTRACTăDATAăTYPEă-ADT)

ngăhóa


Trongă tină h c,ă tr uă t ngă hóaă ngh aă làă đ nă gi nă hóa,ă làmă choă v nă đ ă (ho că đ iă
t ng)ăsángăs aăh năvàăd ăhi uăh n b ngăcáchăn măb tănh ngăcáiăc ăb nă ăm căt ngă
th ,ăg tăb ăcácăchiăti tăth a. Tr uăt ngăhóaălàăcheăđiănh ngăchiăti t,ălàmăn iăb tăcáiă
t ngăth .ăTr uăt ngăhóaăcóăth ăth căhi nătrênăhaiăkhíaăc nhălàăỏr Ố ỏ ỉỂ ểóa ế ệỄ Ố
và ỏr Ố ỏ ỉỂ ểóa Ếể ỉỂ ỏrửỉể.

13


2.

Tr uăt

ngăhóaăch

ngătrình

Tr uăt ngăhóaăch ngătrìnhălàăs ăđ nhăngh aăcácăch ngătrìnhăconăđ ăt oăraăcácă
phépătoánătr uăt ng.ăVíăd ,ăcác phép toán s ăh că(c ng,ătr ,ănhân,ăchia) trong máy
tínhăđãălàăs ătr uăt ngăhóaăc aăcácăphépătoánătrongăb ănh ătrênăbít,ăbyte,ăd chăchuy n.ă
Víăd ăkhác,ăch ngăh nătaăcóăth ăt oăraăm tăch ngătrìnhăconăMatrix_Mult đ ăth căhi nă
phépătoánănhânăhaiămaătr n.ăSauăkhiăMatrix_mult đãăđ căt oăra,ătaăcóăth ădùngănóănh ă
m tăphépătoánănguyênăth yă(gi ngănh ăphépănhânăhaiăs ănguyên).
Tr uă t ngă hóaă ch ngă trìnhă choă phépă phână chiaă ch ngătrìnhă thànhă cácă ch ngă
trìnhăcon.ăS ăphânăchiaănàyăs ăcheăd uăt tăc ăcácăl nhăcàiăđ tăchiăti tătrongăcácăch ngă
trìnhă con.ă ă c pă đ ă ch ngă trìnhă chính,ă taă ch ă th yă l iă g iă cácă ch ngă trìnhă conă vàă
đi uănàyăđ căg iălàăs ăbaoăgói.
Víăd ănh ăm tăch


ngătrìnhănhânăhaiămaătr năđ

căvi tăb ng tr uăt

ngăhóaăcóăth ă

là:
void Main() {
Input_Matrix(A);
Input_Matrix(B);
Matrix_mult(A,B,C);
Print_Matrix(C);
}

Trongă ch ngă trìnhă trên,ă Input_Matrix, Matrix_mult và Print_Matrix là các phép
toánătr uăt ng.ăChúngăcheăd uăbênătrongăr tănhi uăl nhăph căt pămàă ăc păđ ăch ngă
trìnhă chínhă taă khôngă nhìnă th yă đ c.ă Cònă A,B,C là các bi nă thu că ki uă d ă li uă tr uă
t ngăMatrix t ngăt ănh ăGRAPHăvàăSETă ătrên.

3.
Tr uăt

Tr uăt

ngăhóaăd ăli u

ngăhóaăd ăli uălàăđ nhăngh aăcácăki uăd ăli uătr uăt

ng.


M ỏ ỆỄ Ố ế ệỄ Ố ỏr Ố ỏ ỉỂ (ADT) ệỢ m ỏ mô ểửỉể ỏỊáỉ ể Ế ẾùỉỂ ố Ễ m ỏ ỏ ị ể ị
các phép ỏỊáỉ (ỊịeraỏỊr) ỏr Ố ỏ ỉỂ đ Ế đ ỉể ỉỂể a ỏrỪỉ mô ểửỉể đó.ăVíăd ăt păh pă
s ănguyênăcùngăv iăcácăphépătoánăh p,ăgiao,ăhi uălàăm tăki uăd ăli uătr uăt ng.
Trongă m tă ADT, cácă phépă toánă cóă th ă th că hi nă trênă cácă đ iă t ngă (toánă h ng)ă
khôngă ch ă thu că ADTă đó, c ngă nh ă k tă qu ă khôngă nh tă thi tă ph iă thu că ADT.ă Tuyă
nhiênăph iăcóăítănh tăm tătoánăh ngăho căk tăqu ăph iăthu căADTăđangăxét.ă
ADT ệỢ s ỏ ỉỂ qỐáỏ ểỊá Ế a ẾáẾ ỆỄ Ố ế ệỄ Ố ỉỂỐyỪỉ ỏểỐ .
ă minhă h a taă cóă th ă xétă b nă phácă th oă cu iă cùngă c aă th ă t că GREEDY.ă Taă đãă
dùngăm tădanhăsáchă(LIST)ăcácăs ănguyênăvàăcácăphépătoánătrênădanhăsáchăNewclr là:
 T oăm tădanhăsáchăr ng.
 L yă ph nă t ă đ uă tiênă trongă danhă sáchă vàă tr ă v ă giáă tr ă nullă n uă danhă sáchă
r ng.
 L yăph năt ăk ăti pătrongădanhăsáchăvàătr ăv ăgiáătr ănullăn uăkhôngăcònăph nă
t ăk ăti p.
 Thêmăm tăs ănguyênăvàoădanhăsách.
14


N uăchúngătaăvi tăcácăch ngătrìnhăconăth căhi năcácăphépătoánănày,ăthìătaăd ădàngă
thayăcácăm nhăđ ăhìnhăth cătrongăgi iăthu tăb ngăcácăcâuăl nhăđ năgi n:
Câuăl nh

M nhăđ ăhìnhăth c

MAKENULL(newclr)

newclr= 

W=FIRST(newclr)


w=ph năt ăđ uătiênătrongănewclr

W=NEXT(w,newclr)

w=ph năt ăk ăti pătrongănewclr

INSERT( v,newclr)

Thêm v vào newclr

i uănàyăchoăth yăs ăthu năl iăc aăADT,ăđóălàătaăcóăth ăđ nhăngh aăm tăki uăd ăli uă
(tr uăt ng)ăc năthi tăcùngăv iăcácăphépătoánătrênănóăr iăchúngătaădùngănh ălàăcácăđ iă
t ngănguyênăthu .ăH năn aăchúngătaăcóăth ăcàiăđ tăm tăADTăb ngăb tăk ăcáchănào,ă
ch ngătrìnhădùngăchúngăc ngăkhôngăthayăđ i,ăch ăcóăcácăch ngătrìnhăconăbi uădi nă
choăcácăphépătoánăc aăADTălàăthayăđ i.ă
CƠiăđ tăADTălàăs ăth ăhi năcácăphépătoánămongămu nă(cácăphépătoánătr uăt ng)ă
thànhăcácăcâuăl nhăc aăngônăng ăl pătrình,ăbaoăg măcácăkhaiăbáoăthíchăh păvàăcácăth ă
t căth căhi năcácăphépătoánătr uăt ng.ă ăcàiăđ t, taăch năm tăc uătrúcăd ăli u thích
h păcóătrongăngônăng ăl pătrìnhăho călàăm tăc uătrúcăd ăli uăph căh păđ căxâyăd ngă
lênăt ăcácăki uăd ăli uăc ăb năc aăngônăng ăl pătrình.

III.

KI UăD ăLI Uă- C UăTRÚCăD ăLI UăVĨăKI UăD ăLI UăTR Uă
T
NGă(DATAăTYPES,ăDATAăSTRUCTURES,ăABSTRACTă
DATA TYPES)

M că dùă cácă thu tă ng ă ki uă d ă li uă (hayă ki uă - dataă type),ă c uă trúcă d ă li uă (dataă
structure),ă ki uă d ă li uă tr uă t ngă (abstractă dataă type)ă ngheă kháă gi ngă nhau,ă nh ngă

chúngăcóăýăngh aăr tăkhácănhau.
Ki uăd ăli u làăm tăt păh păcácăgiáătr ăvàăm tăt păh păcácăphépătoánătrênăcácăgiáătr ă
đó.ăVíăd ăki uăBooleanălàăm tăt păh păcóă2ă giáătr ăTRUE,ăFALSEă vàăcácăphépătoánă
trênă nóă nh ă OR,ă AND,ă NOTă ….ă Ki uă Integeră (trong PASCAL) làă t pă h pă cácă s ă
nguyênăcóăgiáătr ăt -32768ăđ nă32767ăcùngăcácăphépătoánă+, -, *, /, div, mod …
Ki uăd ăli uăcóăhaiălo iălàăki uăd ăli uăs ăc păvàăki uăd ăli uăcóăc uătrúc. Ki uăd ă
li uăs ăc pălàăki uăd ăli uămàăgiáătr ăd ăli uăc aănóălàăđ nănh t.ăVíăd :ăki uăBoolean,ă
Integer…. Ki uăd ăli uăcóăc uătrúcălàăki uăd ăli uămàăgiáătr ăd ăli uăc aănóălàăs ăk tă
h păc aănhi uăgiáătr ăkhác nhau,ăcùngăki uăho căkhácăki u.ăVíăd :ăARRAYălàăm tăki uă
d ăli uăcóăc uătrúc, ch aănhi uăgiáătr ăcùngăki u;ăRECORDălàăm tăki uăd ăli uăcóăc uă
trúcăch aănhi uăgiáătr ăcóăki uăkhácănhau.
Cácăngônăng ăl pătrìnhăkhác nhauăcungăc păcácăki uăd ăli uăc ăb năkhácănhau.ăH nă
n a,ăt ăcácăki uăd ăli uăc ăb nănàyăcóăth ăt oăraăcácăki uăd ăli uăcóăc uătrúcăph căh p
h n. Cácăki uăd ăli uăcóăc uătrúcăc ăb nă(cungăc păb iăngônăng ăl pătrình)ăvàăcácăc uă

15


trúcăph căh pă(đ
li u.

căt oăraăt ăcácăki uăd ăli uăc ăb n) g iăchungălàăcácăc uătrúcăd ă

M tăki uăd ăli uătr uăt ng làăm tămôăhìnhătoánăh căcùngăv iăm tăt păh păcácă
phépătoánătrênănó.ăCóăth ănóiăki uăd ăli uătr uăt ngălàăm tăki uăd ăli uădoăchúngătaă
đ nhăngh aă ăm căkháiăni mă(conceptual),ănóăch aăđ căcàiăđ tăc ăth ăb ngăm tăngônă
ng ăl pătrình.ă
Khiăcàiăđ tăm tăki uăd ăli uătr uăt
taăph iăth căhi năhaiăcôngăvi c:


ngătrong m tăngônăng ăl pătrìnhăc ăth ,ăchúngă

1.ăBi uădi năki uăd ăli uătr uăt ngă( ăm căkháiăni m)ăb ngăm tăc uătrúcăd ăli uă
ho căm tăki uăd ăli uătr uăt ngăkhácăđãăđ căcàiăđ t.
2.ăVi tăcácăch

ngătrìnhăconăth căhi năcácăphépătoánătrênăki uăd ăli uătr uăt

ng.

Sauăkhiăđãăcàiăđ t,ăki uăd ăli uătr uăt ngăcóăth ăđ căxemănh ăm tăki uă“nguyênă
s ”ă(primitive) c aăngôn ng ăl pătrìnhăvàăcácăphépătoánătrênăki uăd ăli uătr uăt ngăcóă
th ăxemănh ălàăcácăphépătoánă“nguyênăs ”ă– t călàăđãăđ căcàiăđ tăvàăcóăs năđ ădùngă
trongăkhiăgi iăcácăbàiă toánăkhác.ăVíăd ,ăsauă khiăcàiăđ tă LISTă (môă hìnhăcùngăv iăcác
phép toán trên LIST) thì LISTă cóă th ă dùngă càiă đ tă GRAPHă vàă SETă trongă th ă t c
GREEDYă ătrên.
Trongăgiáoătrình,ăchúngătôiădùngăthu tăng ă“ki uăd ăli uătr uăt ng” đ ănh năm nhă
vàoătínhătr uăt ngăc aănó,ănh tălàă ăgiaiăđo năxâyăd ngăkháiăni mătr uăt ng.ăTuyă
nhiên,ă v ă sau,ă khiă c uă trúcă đãă đ că càiă đ tă (theoă m tă cáchă nàoă đó) thìă c uă trúcă tr uă
t ngăđãăđ căth ă hi năb ngă m tă ki uăd ăli uăph căh păc ă th ăvàăvìăv yănóăcóă tínhă
“c uătrúcăd ăli u”ăh nălàă“tr uăt ng”. Chúngătôiăs ădùngătr năl năhaiăthu tăng ănàyăđ ă
ch ăcácăki uăd ăli uătr u t ngăvàăcácăc uătrúcăxâyăd ngănênăt ăcàiăđ tăcácăki uăd ăli uă
tr uăt ngănày;ăvíăd ,ă“ki uăd ăli uătr uăt ngădanhăsách”ăho că“c uătrúcăd ăli uădanhă
sách”ăhayă“c uătrúcădanhăsách”ăchoăg nănh .ă
T NGăK TăCH

NG

Ch ngănày đãătrìnhăbàyăcáchăti păc năt ăbàiătoánăđ năch ngătrình,ătr căh t,ăđóă
làăvi cămôăhìnhăhóaăbàiătoán.ăSauăkhiăbàiătoánăđãăđ cămôăhìnhăhóa, taăhìnhăth căhóaă

m tăgi iăthu tăđ ăgi iăbàiătoánăd aătrênăki uăd ăli uătr uăt ng.ăGi iăthu tăcóăth ăđ că
di năđ tăb ngăngônăng ăgi ăvàăđ căchiăti t hóaăd nă(m năhóa).ăTrongăkhiăxâyăd ngă
m tăgi iăthu tătaăch ăt pătrungăvàoămôăhìnhăc aăbàiătoán,ăcácăphépătoánătrênămôăhìnhăđóă
ăm cătr uăt ng,ăch aăđ căcàiăđ tătrongăch ngătrình.ăV ăsau,ăkhiăcàiăđ tă ki uăd ă
li uătr uăt ngă(môăhìnhăvàăcácăphépătoánătr uăt ng) trongăm tăngônăng ăl pătrình,
chúngătaăc năl aăch năcác c uătrúcăd ăli uăthíchăh pă(đ căcungăc pătrongăngônăng ă
l pătrình).ăCácăcàiăđ tăm tăchoăki uăd ăli uătr uăt ngăcóăth ăkhácănhauătùyătheoăc uă
trúcăd ăli uăđ căl aăch n.ăTuyănhiênăcácăphépătoánătr uăt ngălàătrongăsu tăđ iăv iă
ng iădùngăvàăkhôngăph ăthu căvàoăcácăc uătrúcăd ăli u.ăChínhăvìăth ăcácăphépătoánă
tr uăt ngăcóăth ăđ cădùngănh ălàăcácă”nguyênăs ”ătrongăthi tăk ăgi iăthu tăv ăsau.

16


BĨIăT P
1. Nêuăkháiăni măki uăd ăli u,ăki uăd ăli uătr uăt
d ăc ăth ăđ ăminhăh aăt ngăkháiăni m.
2. Nêuăkháiăni mătr uăt

ng,ăc uătrúcăd ăli u.ăChoăvíă

ngăhóa.ă

a. Choă víă d ă v ă tr uă t ngă hóaă ch
t ngăhóaăch ngătrìnhă
b. Choăvíăd ăv ătr uăt
này.

ngă trình,ă ýă ngh aă c aă vi că tr uă


ngăhóaăd ăli u,ăýăngh aăc aăvi cătr u t

3. Hãyădùngăcáchăti păc năt ăbàiătoánăđ năch
Hà N i:

ngăhóaă

ngătrìnhăđ ăgi iăbàiătoánă Tháp

Cóăbaăc căA, B, C.ăKh iăđ uăc căAăcóăm tăs ăđ aăx pătheoăth ăt ănh ăd nălênă
trênăđ nh.ăBàiătoánăđ tăraălàăph iăchuy nătoànăb ăch ngăđ aăt ăAăsangăB,ăcóăth ă
dùngăc căCălàmătrungă gian.ăM iăl năth căhi n,ăch ăchuy nă m tăđ aă t ăm tăc că
sangăm tăc căkhácăvàăkhôngăđ căđ tăđ aăl năn mătrênăđ aănh ă(hìnhăI.9)

Hình I.9: Minhăh aăbài toán ThápăHàăN i.

a. Mô hình hóa bài toán
b. Vi tăgi iăthu tăthíchăh păcho bài toán này
c. Càiăđ tăgi iăthu tăthànhăch

ngătrình.

17


CH

I.

NGăII: CỄCăKI UăD ăLI UăTR UăT

NGăC ăB N
(BASIC ABSTRACT DATA TYPES)

KI UăD ăLI UăTR UăT
1.

NGăDANHăSỄCHă(LIST)

Kháiăni mădanhăsách

Môăhìnhătoánăh căc aădanhăsáchălàăm tăt păh păh uăh năcácăph năt ăcóăcùngăm tă
ki u,ămàăt ngăquátătaăg iălàăki uăph năt ă(element type). Taăbi uădi nădanhăsáchănh ălàă
m tăchu iăcácăph năt ăc aănó:ăa1, a2, . . ., an,v iănă 0.ăN uăn=0ătaănóiăếaỉể sáẾể r ỉỂ
(emptyălist).ăN uănă>ă0ătaăg iăa1 làăph năt ăđ uătiênăvàăan là ph năt ăcu iăcùngăc aădanhă
sách.ăS ăph năt ăc aădanhăsáchătaăg iălàăđ ếỢỄ c aădanhăsách.
M tătínhăch tăquanătr ngăc aădanhăsáchălàăcácăph năt ăc aădanhăsáchăẾó ỏể ỏ ỏỐy ỉ
ỏíỉể ỏểeỊ ố ỏrí (position)ăxu tăhi năc aăcácăph năt .ăTaănóiăai đ ngătr căai+1, v iăiăt ă1ă
đ năn-1;ăT ngăt ătaănóiăai làăph năt ăđ ngăsauăai-1,ăv iăiăt ă2ăđ năn.ăTaăc ngănóiăai là
ph năt ăt iăv ătríăth ăi,ăhayăph năt ăth ăiăc aădanhăsách.
Víăd :ăT păh păh ătênăcácăsinhăviênăc aăl păTINHOCă28ăđ
sau:

căli tăkêătrênăgi yănh ă

1.ăNguy n Trung D ngă
2.ăNguy năNg căN

ng

3.ăLêăTh ăThanh

4.ăTr nhăMinh Thành
5.ăNguy năPhúăVinh
làăm tădanhăsách.ăDanhăsáchănàyăg măcóă5ăph năt ,ăm iăph năt ăcóăm tăv ătríătrongă
danhăsáchătheoăth ăt ăxu tăhi năc aănó. Ch ngăh n,ă“Nguy năNg căN ng”ăcóăv ătríălàă
2;ă“Nguy năPhúăVinh”ă ăv ătríăcu iăcùngătrongădanhăsách.

2.

Các phép toán trên danh sách

ăthi tăl păki uăd ăli uătr uăt ngădanhăsáchă(hayăng năg nălàădanhăsách)ătaăph iă
đ nhăngh aăcácăphépătoánătrênădanhăsách.ăVàănh ăchúngătaăs ăth yătrongătoànăb ăgiáoă
trình,ă khôngă cóă m tă t pă h pă cácă phépă toánă nàoă thíchă h pă choă m iă ngă d ngă
(application).ăVìăv yă ăđâyătaăs ăđ nhăngh aăm tăs ăphépătoánăc ăb nănh tătrênădanhă
sách.ă ăthu năti năchoăvi căđ nhăngh aătaăgi ăs ăr ngădanhăsáchăg măcácăph năt ăcóă
ki uălàăki uăph năt ă(ElementType);ăv ătríăc aăcácăph năt ătrongădanhăsáchăcóăki uălàă
ki uă v ă trí (Position); vàă v ă tríă sauă ph nă t ă cu iă cùngă trongă danhă sáchă Lă làă
ENDLIST(L).ă C nă nh nă m nhă r ngă kháiă ni mă v ă tríă (position)ă làă doă taă đ nhă ngh a
nh mă đ ă ch ă v ă tríă c aă ph nă t , nóă khôngă ph iă làă giáă tr ă c aă cácă ph nă t ă trongă danhă
sách. V ătríăkhôngănh tăthi tăph iălàăs ănguyên.
Cácăphépătoánăđ

căđ nhăngh aătrênădanhăsáchălà:ă

 INSERT_LIST(x,p,L): xenăph năt ăxă(ki uăElementType)ăt iăv ătríăpă(ki uă
position)ătrongădanhăsáchăL.ăT c làăn uădanhăsáchălàăa1, a2, . , ap-1, ap ,. . , an
18


C uătrúcăd ăli u


Cể

ỉỂ ẤẤ: CáẾ ỆỄ Ố ế ệỄ Ố ỏr Ố ỏ

ỉỂ Ế b ỉ

thì sau khi xen xăvàoăv ătríăpătaăcóăk tăqu ăa1, a2, . . ., ap-1, x, ap, . . . , an.ăN uă
v ătríăpăkhôngăt năt iătrongădanhăsáchăthìăphépătoánăkhôngăđ căth căhi n.
 LOCATE(x,L) th căhi năvi căđ nhăv ăph nă t ăxă(có ki uălàăki uăph năt ă ElementType) đ uătiênătrongădanhăsáchăL.ăLocateătr ăk tăqu ălàăv ă tríă(ki uă
position)ăc aăph năt ăxătrongădanhăsách.ăN uăxăkhôngăcóătrongădanhăsáchăthìă
v ătríăsauăph năt ăcu iăcùngăc aădanhăsáchăđ cătr ăv ,ăt călàăENDLIST(L).
 RETRIEVE(p,L) l yăgiáătr ăc aăph năt ă ăv ătríăpă(ki uăposition)ăc aădanhă
sáchăL;ăn uăv ătríăpăkhôngăcóătrongădanhăsáchăthìăk tăqu ăkhôngăxácăđ nhă(cóă
th ăthôngăbáoăl i vàăgiáătr ătr ăv ălà NULL).
 DELETE_LIST(p,L) ch ngătrìnhăconăth căhi năvi căxóa ph năt ă ăv ătríăpă
(ki uăposition)ăc aădanhăsách.ăN uăv ătríăpăkhôngăcóătrongădanhăsáchăthìăphépă
toánăkhôngăđ căth căhi n vàădanhăsáchăLăs ăkhôngăthayăđ i.
 NEXT(p,L) choăk tăqu ălàăv ătríăc aăph năt ă(ki uăposition)ăđiăsauăph năt ăp;ă
n uăpălàăph năt ăcu iăcùngătrongădanhăsáchăLăthìăNEXT(p,L)ăchoăk tăqu ălàă
ENDLIST(L).ăNextăkhôngăxácăđ nhăn uăpăkhôngăph iălàăv ătríăc aăm tăph nă
t ătrongădanhăsách.
 PREVIOUS(p,L) choă k tă qu ă làă v ă tríă c aă ph nă t ă đ ngă tr că ph nă t ă pă
trongădanhăsách.ăN uăpălàăph năt ăđ uătiênătrong danh sách thì Previous(p,L)
khôngă xácă đ nh.ă Previousă c ngă khôngă xácă đ nhă trongă tr ngă h pă pă khôngă
ph iălàăv ătríăc aăph năt ănàoătrongădanhăsách.
 FIRST(L) choă k tă qu ă làă v ă tríă c aă ph nă t ă đ uă tiênă trongă danhă sách.ă N uă
danhăsáchăr ngăthìăENDLIST(L)ăđ cătr ăv .
 EMPTY_LIST(L) choăk tăqu ăTRUEăn uădanhăsáchăcóăr ng,ăng
choăgiáătr ăFALSE.


căl iănóă

 MAKENULL_LIST(L) kh iăt oăm tădanhăsáchăLăr ng.
Trongă thi tă k ă cácă gi iă thu tă sauă nàyă chúngă taă dùngă cácă phépă toánă tr uă t
đ căđ nhăngh aă ăđâyănh ălàăcác phépătoánănguyênăth y.ă

ngă đãă

Víă d :ă Dùngă cácă phépă toánă tr uă t ngătrênă danhă sách,ă vi tă m tă ch ngătrìnhă conă
nh năm tăthamăs ălàădanhăsáchăr iăs păx pădanhăsáchătheoăth ăt ăt ngăd n. Gi ăs ăcácă
ph năt ătrongădanhăsáchăthu căki uăcóăth ăt (t călàăcóăth ăápăd ng phép so sánh >).
Taă c ngă gi ă s ă hàmă SWAP(p,q)ă th că hi nă vi că đ iă ch ă haiă ph nă t ă t iă v ă tríă pă vàă qă
trong danh sách.
Ch

ngătrìnhăconăs păx păđ

căvi tănh ăsau:

void SORT(LIST& L){
Position p= FIRST(L); //v ătríăph năt ăđ uătiênătrongădanhăsách
while (p!=ENDLIST(L)){
Position q=NEXT(p,L); //v ătríăph năt ăđ ngăngayăsauăph năt ăp
while (q!=ENDLIST(L)){
if (RETRIEVE(p,L) > RETRIEVE(q,L))
swap(p,q);ă//ăhoánăchuy năn iădungăph năt
q=NEXT(q,L);
}


19


p=NEXT(p,L);
}
}

C nă ph iă nh nă m nhă r ng,ă cácă phépă toánă tr uă t ngă trên (FIRST, NEXT,
RETRIEVE,…)ădoăchúngătaăđ nhăngh a,ănóăch aăđ căcàiăđ tătrongăcácăngônăng ăl pă
trình.ăDoăđóăđ ăch ngătrìnhăconăSORT nóiătrênăcóăth ăch yăđ c, taăph iăcàiăđ tăcácă
phép toán này tthànhăcácăch ngătrìnhăconătrongăch ngătrình.ăH năn a,ătrongăkhiăcàiă
đ tăc ăth ,ăm tăs ăthamăs ăhìnhăth cătrongăcácăphépătoánătr uăt ngăkhôngăđóngăvaiă
tròăgìătrongăch ngătrìnhăconăcàiăđ tăchúng (t călàăkhôngăđ cădùng),ădoăv yătaăcóăth ă
b ăquaănóătrongădanhăsáchăthamăs ăc aăch ngătrìnhăcon.ăVíăd :ăphépătoánătr uăt ngă
INSERT_LIST(x,p,L)ăcóă3ăthamăs ăhìnhăth c:ăph năt ămu năthêmăx,ăv ătríăthêmăvàoăpă
vàădanhăsáchăđ căthêmăvàoăL.ăNh ngăkhiăcàiăđ tădanhăsáchăb ngăconătr ă(danhăsáchă
liênăk tăđ n),ăthamăs ăLălàăkhôngăc năthi tăvìăv iăc uătrúcănàyăch ăcóăconătr ăt iăv ătríăpă
ph iăthayăđ iăđ ăn iăk tăv iăôăch aăph năt ăm i.ăTrongăgiáo trình này,ătaăv năgi ăđúngă
nh ngăthamăs ăhìnhăth căđãăđ nhăngh aătrongăphépătoánătr uăt ngătrong khi càiăđ tăđ ă
làmă choă ch ngă trìnhă đ ngă nh tă vàă trongă su t đ iă v iă cácă ph ngă phápă càiă đ tă c aă
cùngăm tăki uăd ăli uătr uăt ng. Tuy nhiên, trongăth căhành v iăngônăng ăl pătrìnhă
C, cácăbi nătrongăch ngătrìnhăconăkhôngăđ cădùngăs ăđ că(ho căb ) c nhăbáoăd ngă
“bi nă nàyă đ că khôngă dùng”. óă khôngă ph iă làă l iă biênă d chă c aă ch ngă trình,ă nênă
đ căgi ăkhôngăc năph iăquanătâmăs aăl i.ă

3.

CƠiăđ tădanhăsách
a.


Cài đ t danh sách b ng m ng (danh sách đ c)

Danh sách cóăth ăđ căcàiăđ tăb ngăm ngănh ăsau:ăếùỉỂ m ỏ m ỉỂ đ ệ Ố ỂỄ ệỄỪỉ
ỏỄ ị ẾáẾ ịể ỉ ỏ Ế a ếaỉể sáẾể ỏ ố ỏrí đ Ố ỏỄỪỉ Ế a m ỉỂ.ăV iăcáchăcàiăđ tănày,ătaă
ph iă căl ngăs ăph năt ăc aădanhăsáchăđ ăkhaiăbáoăs ăph năt ăc aăm ngăchoăthíchă
h p.ăD ăth yăr ngăs ăph năt ăc aăm ngăph iăđ căkhaiăbáoăkhôngăítăh năs ăph năt ă
c aădanhăsách.ăNóiăchungălàăm ngăcònăth aăm tăs ăch tr ng.ăM tăkhácătaăph iăluôn
l uăgi ăđ ădàiăhi năt iăc aădanhăsách,ăđ ădàiănàyăchoăbi tădanhăsáchăcóăbaoănhiêuăph nă
t ăvàăchoăbi tăph nănàoăc aăm ngăcònătr ngănh ătrongăhìnhăII.1.ăTa đ ỉể ỉỂể a ố ỏrí
Ế a m ỏ ịể ỉ ỏ ỏrỊỉỂ ếaỉể sáẾể ệỢ s ỏể ỏ Ế a ịể ỉ ỏ ỏrỊỉỂ ếaỉể sáẾể. Nh ăv yă
trongătr ngăh pănàyă“v ătrí”ăđ căđ nhăngh aălàăs ănguyên.ăC ngăc năph iăth yăr ngă
v ătríănàyăkhôngănh tăthi tăph iălàăch ăs ăc aăm ngăt iăn iăl uătr ăph năt .ăCh ngăh nă
trongăngônăng ăC,ăch ăs ăc aăm ngăb tăđ uăt ă0,ăvìăv yăph năt ăth ă1ăc aădanhăsáchăcóă
(v ă tríă làă 1)ă nh ngă n mă trongă m ngă t iă ch ă s ă 0,ă ph nă t ă th ă iă (v ă tríă làă i)ă n mă trongă
m ngăt iăch ăs ă(i-1). Trongăngônăng ăl pătrìnhăPASCALăm ngăcóăth ăb tăđ uăb ngăs ă
nguyên tùy ý,ă víă d ă A[10..100] nênă ph nă t ă th ă nh tă c aă danhă sáchă n mă t iă ch ă s ă
A[10]ăch ăkhôngăph iălàăA[1]! i măđángăl uătâmănh tălàăcácăph năt ăph iăđ căđ tă
vàoă m ngă liênă ti pă nhau,ă khôngă cóă “ôă tr ng”ă trongă m ngă t ă đ uă choă đ nă cu iă danhă
sách.ăChínhăvìăv yădanhăsáchăv iăcáchăcàiăđ tănàyăcònăđ căg iălàădanh sáẾể đ Ế,ăt că
làă“khôngăr ngă ăgi a”.

20


C uătrúcăd ăli u

Ch ăs
N iă
dung
ph năt


Cể

0

1



Ph nă t ă th ă Ph nă t ă th ă …
1
2

ỉỂ ẤẤ: CáẾ ỆỄ Ố ế ệỄ Ố ỏr Ố ỏ

Last-1



ỉỂ Ế b ỉ

Maxlength-1

Ph nă t ă cu iă …
cùng trong danh
sách

HìnhăII.1:ăCàiăđ tădanhăsáchăb ngăm ng (danhăsáchăđ c).

V iăhìnhă nhăminhăh aătrên,ăcácăkhaiăbáoăc năthi tălà:

#define MaxLength ... //S ănguyênăthíchăh păđ ăch ăđ ădàiăc aăm ng
typedefă...ăElementType;ă//ki uăc aăph năt ătrongădanhăsách
typedef int Position; //ki uăv ătríăc a cácăph năt
typedef struct {
ElementType Elements[MaxLength]; //m ngăch aăcácăph năt ăc aădanhăsách
Position Last; //gi ăđ ădàiădanhăsách
} List;

Trênă đâyă làă s ă bi uă di nă ki uă d ă li uă tr uă t ngădanhă sáchă b ngă c uă trúcă d ăli uă
m ng.ăPh năti pătheoălàăcác mã (code) càiăđ tăcácăphépătoánăc ăb nătrênădanhăsách.
Kh iăt oădanhăsáchăr ngă
Danhăsáchăr ngălàăm tădanhăsáchăkhôngăch aăb tăk ăm tăph năt ănào,ăt călàăđ ădàiă
danhă sáchă b ngă 0.ă Theoă cáchă khaiă báoă trên,ă tr ngă Lastă ch ă v ă tríă c aă ph nă t ă cu iă
cùngătrongădanhăsáchăvàăđóăc ngălà đ ădàiăhi năt iăc aădanhăsách,ăvìăv yăđ ăkh iăt oă
danhăsáchăr ngătaăch ăvi căgánăgiáătr ătr ngăLastănàyăb ngă0.
void MAKENULL_LIST(List& L){
L.Last=0;
}

Cácăb năm iălàmăquenăv iăl pătrìnhăCăc năl uătâmăt iăcúăphápăkhaiăbáoătruy năthamă
s ătrongăth ăt cătrên.ăD uă“&”ănh măđ ăkhaiăbáoătruy nătham s ătheoăki uăthamăchi u,ă
t că làă cácă thayă đ iă trongă ch ngătrìnhă conă s ă cònă hi uă l că khiă ch ngătrìnhă conă k tă
thúcă( ăđâyăbi năLastăs ăcóăgiáătr ă0ăngayăc ăsauăkhiăch ngătrìnhăconăk tăthúc). Th că
raăđóălàăcúăphápăc aăC++.ăTuyănhiênătaăs ăkhôngăđ ăc pănhi uăđ năcácăkhíaăc nhăc aă
ngônăng ăl pătrìnhă ăđây.ăCácăđo năch ngătrìnhătrongăgiáoătrìnhănàyăđ căbiênăd chă
v iăVisualăC++ă6.0.
Ki mătraădanhăsáchăr ng
Danhăsáchăr ngălàăm tădanhăsáchămàăđ ădàiăc aănóăb ngă0. Vìăv yăđ ăki mătraădanhă
sáchăr ngătaăc năki mătraăđ ădàiănày.ăHàmăEMPTY_LISTăs ătr ăraăgiáătr ă0ăho că1ătùyă
theoăgiáătr ăsoăsánhăc aăLastăv iă0.


21


×