You are on page 1of 12

Chng 7 Tm kiem

Giao trnh Cau truc d lieu va Giai thuat 137


Chng 7 TM KKM

Chuong nay gIoI fhIou baI foan fm kIom mof phan fu frong mof danh sach.
Phan frnh bay fap frung chu you vao haI gIaI fhuaf: fm kIom fuan fu va fm
kIom nhj phan.
7.1. Go theu
7.1.1. Khou
Trong baI foan fm kIom, dua vao mof phan fhong fIn duoc goI Ia khoa |key),
chung fa phaI fm mof mau fIn |record) chua cac fhong fIn khac IIon quan voI
khoa nay. Co fho co nhIou mau fIn hoac khong co mau fIn nao chua khoa can fm.


HInh ?.1. Mau fIn va khoa.
7.1.2. Phun tIch
Tm kIom fhong fhuong Ia fac vu fon nhIou fhoI gIan frong mof chuong frnh.
V fho vIoc fo chuc cau fruc du IIou va gIaI fhuaf cho vIoc fm kIom co fho co
nhung anh huong Ion don hIou suaf hoaf dong cua chuong frnh. O day, fhong so
do chu you Ia so Ian so sanh khoa can fm voI cac mau fIn khac.
7.1.3. TIm kem no vu tIm kem ngou
aI foan fm kIom bao gom haI nhom: fm kIom noI va fm kIom ngoaI. Nou
Iuong du IIou Ion phaI Iuu fron fhIof bj Iuu fru ngoaI nhu dIa hay bang fu fh baI
foan duoc goI Ia fm kIom ngoaI. Nguoc IaI nou foan bo du IIou duoc Iuu fru fron
bo nho chnh fh duoc goI Ia fm kIom noI. O day fa quan fam chu you don fm
kIom noI.

CIaI fhuaf fm kIom fron cac cau fruc IIon kof hoan foan phu fhuoc vao cach fo
chuc dac frung cua chung. anh sach IIon kof don Ia cau fruc IIon kof don gIan
nhaf, vIoc fm kIom chI co fho duyof fuan fu qua fung phan fu ma fhoI. oI voI
cac cau fruc IIon kof khac, chung fa so co djp fm hIou cac chIon Iuoc fm kIom
khac nhau khI gap fung cau fruc cu fho, chang han nhu cay nhj phan fm kIom,
cay B- t r ee, hang uu fIon,. Co mof cau fruc du IIou kha dac bIof doI voI vIoc fm
kIom, do Ia bang bam. Y fuong co ban va dac bIof nhaf cua bang bam Iam cho no
Fmgndkgdgdag mfgldmgladg dflgflgkfldgkal;dkgakgladfkgldfg dlgkdflgkdlfgkdl fg


Agkdlgkdflhkggjklghjklhkjl gfhlkglkfh gfhltkhlkkglhkgl g;jlgh;jlgh;kl;l;;l;hylk;ghlkdhgfhgfhfghfghfghfghgh


Fghgfjghkhjkljljg gfhfgjgjghjghjhj gfjdgjgjgjgfjfgjgfjjlkdvl;kbflbn,f;hlfkh;gfhfh


Fhkfglfkklkhgf;hfhlf;hlgfhflhf dfgdgl;dflh;flh;lgf fhkfhlkglhkgkhlgfh f;ghlf;hlgfhh


Dfhlfkhlklfkshkshklsdfklgdkslg dfhlkfhlkkgfhkflkhlfkhkhksdfkhldkhldfkhl dgkeurtoejgmrgmlergmlemgle


Hsflhkldfhkldfhkldf dfglkdlgkdlfgkldfkgldfklgkdlgk
Chng 7 Tm kiem
Giao trnh Cau truc d lieu va Giai thuat 138
khac voI cac cau fruc du IIou khac o cho, frong bang bam khong co khaI nIom
duyof qua cac phan fu fruoc khI don duoc phan fu mong muon. Chung fa cung so
duoc hoc vo bang bam frong chuong 12.

Chuong nay chI frnh bay nhung y fuong co ban va don gIan nhaf cua vIoc fm
kIom. Trong do, gIa su rang khI can fruy xuaf mof phan fu baf ky nao do chung
fa co fho nhay ngay don vj fr cua no frong danh sach voI fhoI gIan Ia hang so.
Iou nay chI co fho daf duoc khI cuc phun tu duoc luu trong dunh such le n
tuc. Va nhu vay, frong chuong nay cac gIaI fhuaf fm kIom ro rang chI phu fhuoc
vao so Ian so sanh khoa, chu khong phu fhuoc vao fhoI gIan dI chuyon qua cac
phan fu.

Cach hIon fhuc cua cac phuong fhuc bo sung cung nhu cac gIaI fhuaf fm kIom
duoI day hoan foan su dung cac phuong fhuc co san cua Iop Li st frong chuong 4.
Chung fa non co mof so nhan xof nhu sau. Thu nhaf, cach su dung cac phuong
fhuc co san cua Iop Li st khong ngan cam chung fa vIoc su dung hIon fhuc danh
sach IIon kof fhay v danh sach IIon fuc. oI voI danh sach IIon kof can phaI chI
ph frong khI fruy xuaf phan fu faI vj fr posi t i on nao do |dIou nay van con
dIom khac nhau gIua haI phuong an cua danh sach IIon kof co hoac khong co Iuu
IaI fhuoc fnh cur r ent _posi t i on). oI voI danh sach IIon fuc, co fho fruc fIop
fruy xuaf mof phan fu fhong qua mof so nguyon chI vj fr cua no, fhay v goI
phuong fhuc co san r et r i eve.
7.1.4. Lop Record vu lop Key
Chung fa co mof so quy uoc nhu sau. Cac phan fu frong danh sach dang duoc
fm kIom fhoa cac fIou chuan foI fhIou sau:
MoI mau fIn co mof khoa dI kom.
Cac khoa co fho duoc so sanh voI nhau bang cac foan fu so sanh.
Mof mau fIn co fho duoc chuyon doI fu dong fhanh mof khoa. o do co fho
so sanh cac mau fIn voI nhau hoac so sanh mau fIn voI khoa fhong qua vIoc
vIoc chuyon doI mau fIn vo khoa IIon quan don no.

Chung fa so caI daf cac chuong frnh fm kIom Iam vIoc voI cac doI fuong
fhuoc Iop Record fhoa cac dIou kIon fron. NgoaI ra con co mof Iop Key |co fho
frung voI Recor d) va mof fac vu do chuyon doI mof Recor d fhanh mof Key. Tac
vu do co fho duoc caI daf fhoo mof frong haI cach sau:
Mof phuong fhuc cua Iop Recor d co khaI bao Ia operator Key() const;
Mof constructor cua Iop Key co khaI bao Ia Key(const Record&);

Nou Recor d va Key Ia gIong nhau fh khong can fac vu nay.

Chng 7 Tm kiem
Giao trnh Cau truc d lieu va Giai thuat 139
Tron Iop Key chung fa can phaI djnh nghIa cac phop so sanh ==, ! =, <, >,
<=, >= moI cap doI fuong fhuoc Iop Key. o moI Recor d dou co fho duoc chuyon
doI fhanh Key nho frnh bIon djch bang mof frong cac fac vu fron, cac fac vu so
sanh Key dou co fho duoc su dung do so sanh haI Recor d hay so sanh mof
Recor d voI mof Key.

/ / KhaI bao cho Iop Key
cl ass Key{
publ i c:
/ / Cac constructor va cac phuong fhuc.
pr i vat e:
/ / Cac fhuoc fnh cua Key.
};

/ / KhaI bao cac fac vu so sanh cho khoa.
bool oper at or ==( const Key &x, const Key &y) ;
bool oper at or > ( const Key &x, const Key &y) ;
bool oper at or < ( const Key &x, const Key &y) ;
bool oper at or >=( const Key &x, const Key &y) ;
bool oper at or <=( const Key &x, const Key &y) ;
bool oper at or ! =( const Key &x, const Key &y) ;

/ / KhaI bao cho Iop Recor d
cl ass Recor d{
publ i c:
oper at or Key( ) ; / / Chuyon doI fu Recor d sang Key.
/ / Cac constructor va cac phuong fhuc cua Recor d.
private:
// Cac fhuoc fnh cua Record
};

7.1.5. Thong so
Cac ham fm kIom so nhan haI fham frj. Tham frj fhu nhaf Ia danh sach can
fm, fham frj fhu haI Ia phan fu can fm. Thong so fhu haI duoc goI Ia dch cua
phop fm kIom. Trj fra vo cua ham co kIou Ia Er r or Code cho bIof vIoc fm kIom
co fhanh cong hay khong. Nou fm fhay fh fham bIon position chua vj fr fm
fhay phan fu IIon quan don khoa can fm frong danh sach.
7.2. TIm kem tuun tu
7.2.1. Gu thuut vu hum
Phuong phap don gIan nhaf do fm kIom Ia xuaf phaf fu mof dau cua danh
sach va fm doc fhoo danh sach cho don khI gap duoc phan fu can fm hay don
khI hof danh sach. ay Ia gIaI fhuaf duoc su dung frong ham sau.



Chng 7 Tm kiem
Giao trnh Cau truc d lieu va Giai thuat 140

Er r or Code sequential_search( const Li st <Recor d> &t he_l i st ,
const Key &t ar get , i nt &posi t i on)
/ *
post: Nou co phan fu frong danh sach co khoa frung voI t ar get , ham fra vo success va
fham bIon posi t i on chua vj fr cua phan fu duoc fm fhay frongf danh sach. Nguoc IaI
ham fra vo not _pr esent va posi t i on khong co nghIa.
*/
{
i nt s = t he_l i st . si ze( ) ;
f or ( posi t i on = 0; posi t i on < s; posi t i on++) {
Recor d dat a;
t he_l i st . r et r i eve( posi t i on, dat a) ;
i f ( dat a == t ar get ) r et ur n success;
}
r et ur n not _pr esent ;
}

Vong Iap f or frong ham nay duyof danh sach cho don khI gap phan fu can
fm hoac don khI hof danh sach. Nou gap phan fu can fm fh gIaI fhuaf kof fhuc
ngay Iap fuc va posi t i on chua vj fr phan fu fm duoc, nguoc IaI nou khong fm
fhay fh ham fra vo not _pr esent va posi t i on chu vj fr khong hop Io.
7.2.2. Phun tIch
Sau day chung fa so danh gIa khoI Iuong cong vIoc ma gIaI fhuaf fm kIom
fuan fu fhuc hIon do Iam co so so sanh voI cac phuong phap khac sau nay.

CIa su gIaI fhuaf fm kIom fuan fu duoc fhuc fhI fron mof danh sach daI. Cac
Ionh ngoaI vong f or duoc fhuc hIon mof Ian, do do khong anh huong nhIou don
fhoI gIan chay gIaI fhuaf. Trong moI Ian Iap, mof khoa cua mof mau fIn duoc so
sanh voI khoa dch. NgoaI ra con co mof so fac vu khac cung duoc fhuc hIon mof
Ian cho moI Ian Iap.

Nhu vay cac fac vu ma fa can quan fam co IIon ho fruc fIop voI so Ian so sanh
khoa. Nhung cach Iap frnh khac nhau cua cung mof gIaI fhuaf co fho cho ra cac
so Iuong cong vIoc khac nhau nhung dou cho cung mof so Ian so sanh. KhI chIou
daI cua danh sach fhay doI fh so Iuong cong vIoc cung fhay doI fhoo mof cach
fuong ung.

O day chung fa so fm hIou su phu fhuoc cua so Ian so sanh khoa vao do daI
cua danh sach. ay Ia fhong fIn huu ch nhaf frong vIoc fm hIou gIaI fhuaf fm
kIom nay, no khong phu fhuoc vao cach fhuc Iap frnh cu fho cung nhu IoaI may
fnh cu fho dang duoc su dung. VIoc phan fch cac gIaI fhuaf fm kIom duoc dua
fron gIa fhIof can ban Ia: khoI Iuong cong vIoc ma mof gIaI fhuaf fm kIom fhuc
hIon |hay fhoI gIan chay cua gIaI fhuaf) duoc phan anh boI fong so Ian so sanh
khoa ma gIaI fhuaf fhuc hIon.
Chng 7 Tm kiem
Giao trnh Cau truc d lieu va Giai thuat 141
Chung fa hay fm so Ian so sanh khoa ma gIaI fhuaf fm kIom fuan fu can khI
no chay fron mof danh sach gom n phan fu. o gIaI fhuaf fm kIom fuan fu Ian
Iuof so sanh khoa dch voI fung khoa cua cac phan fu frong danh sach non fong
so Ian so sanh phu fhuoc vao vj fr cua dch frong danh sach. Nou dch Ia phan fu
dau fIon cua danh sach fh chI can mof Ian so sanh. Nou dch Ia phan fu cuoI
cung cua danh sach fh can n Ian so sanh. Nou phop fm kIom khong fhanh cong
|khong co phan fu dch frong danh sach) fh so Ian so sanh cung Ia n. Nhu vay,
frong fruong hop fof nhaf, gIaI fhuaf fm kIom fuan fu chI can mof Ian so sanh,
con frong fruong hop xau nhaf fh no can n Ian so sanh.

Trong phan Ion cac fruong hop, chung fa khong bIof chnh xac dac dIom cua
cac danh sach can fm kIom, do do chung fa fhuong khong ap dung duoc cac kof
qua vo fhoI gIan chay fof nhaf va xau nhaf fron kIa. Trong cac fruong hop
nay, chung fa fhuong su dung tho gun chuy trung bInh. O day trung bInh co
nghIa Ia chung fa xof moI kha nang mof Ian va Iay kof qua frung bnh cua chung.
Tuc Ia chung fa gIa su cac fruong hop can fm xay ra voI xac suaf nhu nhau. Iuu
y rang frong fhuc fo khong phaI Iuc nao gIa fhIof nay cung phu hop.

Chung fa co so Ian so sanh frung bnh cua gIaI fhuaf fm kIom fuan fu |fruong
hop fhanh cong) nhu sau.
( ) 1
2
1 ... 3 2 1
+ =
+ + + +
n
n
n

7.3. TIm kem nh{ phun

CIaI fhuaf fm kIom fuan fu co fho duoc caI daf do dang va kha hIou qua voI
nhung danh sach ngan nhung voI nhung danh sach daI fh gIaI fhuaf chay raf
cham. VoI cac danh sach daI, co nhIou phuong phap huu hIou hon do gIaI quyof
baI foan fm kIom, nhung voI dIou kIon Ia cac khoa cua danh sach da duoc sap
xop san.

Mof frong nhung phuong phap fof nhaf do fm kIom fron mot dunh such mu
cuc khou du duoc sup xep lu tIm kem nh{ phun. Trong phuong phap nay,
chung fa so sanh khoa dch voI khoa cua phan fu o gIua cua danh sach. Tuy fhuoc
vao khoa dch nam fruoc hay sau khoa o gIua ma chung fa fIop fuc qua frnh fm
kIom frong nua dau hay nua sau cua danh sach. VoI cach nay, faI moI buoc chung
fa gIam kch fhuoc cua danh sach can fm dI mof nua. Mof danh sach chua
khoang mof frIou phan fu so duoc xu Iy frong khoang haI muoI Ian so sanh.

Chng 7 Tm kiem
Giao trnh Cau truc d lieu va Giai thuat 142
7.3.1. Ounh such co thu tu
Sau day chung fa djnh nghIa mof kIou du IIou fruu fuong cho mof danh sach co
fhu fu.

nh ngha: anh sach co fhu fu |ordered list) Ia danh sach frong do moI phan fu
co chua mof khoa sao cho cac khoa nay da duoc sap fhu fu. Tuc Ia nou
phan fu i dung fruoc phan fu j frong danh sach fh khoa cua i nho hon
hay bang khoa cua j.

o fm kIom nhj phan, danh sach can phaI co fhu fu. Chung fa caI daf danh
sach co fhu fu Ia mof Iop duoc fhua ko fu Iop Li st da co va vIof IaI cac phuong
fhuc insert va replace.

cl ass Ordered_list: publ i c Li st <Recor d>{
publ i c:
Or der ed_l i st ( ) ;
Er r or Code insert( const Recor d &dat a) ;
Er r or Code replace( i nt posi t i on, const Recor d &dat a) ;
};

Phuong fhuc insert fron chon mof phan fu vao dung vj fr cua no frong danh
sach dua vao fhu fu cua cac khoa. Nou danh sach chua nhIou khoa frung voI khoa
cua phan fu dang fhom vao fh khoa moI so Ia phan fu dau fIon frong so cac phan
fu co khoa frung nhau.

Er r or Code Or der ed_l i st : : insert( const Recor d &dat a)
/ *
post: Nou danh sach chua day, phan fu moI dat a duoc chon vao vj fr ngay sau phan fu Ion
nhaf frong so cac phan fu nho hon no, phuong fhuc fra vo success, nguoc IaI phuong fhuc
fra vo over f l ow.
*/
{
i nt s = si ze( ) ;
i nt posi t i on;
f or ( posi t i on = 0; posi t i on < s; posi t i on++) { / / Tm vj fr fhch hop.
Recor d l i st _dat a;
r et r i eve( posi t i on, l i st _dat a) ;
i f ( dat a >= l i st _dat a) br eak;
}
r et ur n i nser t ( posi t i on, dat a) ; / / CoI phuong fhuc da co cua Iop Li st .
}

Phuong fhuc r epl ace cung can kIom fra fnh hop Io cua phan fu duoc fhay
fho sao cho danh sach van dam bao fhu fu.

Chng 7 Tm kiem
Giao trnh Cau truc d lieu va Giai thuat 143
7.3.2. Xuy dung gu thuut
o dam bao rang gIaI fhuaf duoc xay dung so cho ra kof qua dung dan, chung
fa can mo fa ro rang vo y nghIa cua cac bIon su dung frong chuong frnh va cac
dIou kIon can phaI fhoa fruoc va sau moI vong Iap, dong fhoI vong Iap cung phaI
duoc dam bao rang so dung dung.

CIaI fhuaf fm kIom nhj phan so su dung haI chI so, top va bottom, do gIoI
han phan danh sach ma chung fa dang fIon hanh fm kIom. TaI moI buoc, gIaI
fhuaf gIam kch fhuoc cua phan nay dI khoang mof nua. o fIon fhoo doI fIon
frnh cua gIaI fhuaf, chung fa can xac nhan mof dIou rang, fruoc moI Ian Iap co
mof dIou kIon Iuon dung: khoa dch, nou co frong danh sach, phaI Iuon nam frong
khoang fu boffom don fop, co ko ca haI vj fr nay. Iou kIon nay Iuc dau duoc bao
dam bang cach daf bottom bang 0 va top Ia the_list.size()1.

Truoc fIon , gIaI fhuaf fm vj fr phan fu o gIua bot t omva t op fhoo cong fhuc

( bot t om+t op)
mi d =
2
Ko do gIaI fhuaf so sanh khoa dch voI khoa cua phan fu faI vj fr mi d va fhay
doI t op hoac bot t omdua fhoo kof qua cua phop so sanh nay.

Chung fa Iuu y rang gIaI fhuaf non kof fhuc khI t op bot t om; fuc Ia khI
phan danh sach can fm con khong qua mof phan fu |gIa su rang gIaI fhuaf da
khong cham duf som hon fruoc do frong fruong hop khoa dch da duoc fm fhay).

CuoI cung, do chac chan rang gIaI fhuaf dung, so phan fu can fm cua danh
sach ( t op bot t om+ 1) phaI gIam sau moI Ian Iap cua gIaI fhuaf.

7.3.3. Phen bun thu nhut
Cach caI daf don gIan nhaf cua gIaI fhuaf Ia cu fIop fuc chIa doI danh sach,
baf ko khoa dch co duoc fm fhay hay chua, cho foI khI danh sach con IaI co
chIou daI Ia 1.
Ham sau day duoc vIof do quI.

Er r or _code recursive_binary_1( const Or der ed_l i st &t he_l i st , const Key
&t ar get , i nt bot t om, i nt t op, i nt &posi t i on)
/ *
pre: Cac chI so bot t omva t op chI ra day cac phan fu frong danh sach phuc vu cho vIoc fm
kIom t ar get .
post: Nou phan fu co khoa frung voI t ar get duoc fm fhay fh fra vo success, posi t i on chI
vj fr fm fhay. Nguoc IaI phuong fhuc fra vo not _pr esent , posi t i on khong co nghIa.
uses: r ecur si ve_bi nar y_1 va cac phuong fhuc cua Iop Li st va Recor d.
Chng 7 Tm kiem
Giao trnh Cau truc d lieu va Giai thuat 144
*/
{
Recor d dat a;
i f ( bot t om< t op) { / / Li st co nhIou hon 1 phan fu.
i nt mi d = ( bot t om+ t op) / 2;
t he_l i st . r et r i eve( mi d, dat a) ;
i f ( dat a < t ar get ) / / Can IoaI bo mof nua so phan fu bon phaI.
r et ur n r ecur si ve_bi nar y_1( t he_l i st , t ar get , mi d + 1, t op, posi t i on) ;
el se / / Can IoaI bo mof nua so phan fu bon fraI.
r et ur n r ecur si ve_bi nar y_1( t he_l i st , t ar get , bot t om, mi d, posi t i on) ;
}
el se i f ( t op < bot t om)
r et ur n not _pr esent ; / / Li st rong.
el se { / / Li st co chnh xac 1 phan fu.
posi t i on = bot t om;
t he_l i st . r et r i eve( bot t om, dat a) ;
i f ( dat a == t ar get ) r et ur n success;
el se r et ur n not _pr esent ;
}
}

Su phan chIa cua danh sach frong qua frnh fm kIom co fho duoc mInh hoa
nhu sau:

Iuu y rang frong so do nay phan dau fIon chI chua cac phan fu nho hon khoa
dch con phan cuoI co fho chua cac phan fu Ion hon hoac bang khoa dch. ang
cach nay, khI phan gIua cua danh sach chI con mof phan fu ma IaI Ia phan fu
chua khoa dch fh phan fu nay Iuon Ia phan fu dau fIon nou co nhIou phan fu co
khoa frung voI no frong danh sach.

Nou danh sach Ia rong fh ham fron fhaf baI, nguoc IaI no fnh gIa frj cua
md. V mid duoc fnh Ia frung bnh cua top va bottom non no nam gIua top va
bottom, va do do no Ia chI so hop Io cua mof phan fu cua danh sach.

Iou fhuc chIa nguyon Iuon Iam fron xuong, non chung fa co

bot t om mi d < t op

Sau khI qua frnh do quI kof fhuc, gIaI fhuaf phaI kIom fra xom khoa dch da
duoc fm fhay hay chua v qua frnh do quI khong fhuc hIon phop kIom fra nay.

o chuyon ham fron vo dang ham fm kIom chuan ma chung fa djnh ra o fron
chung fa djnh nghIa ham sau:
Chng 7 Tm kiem
Giao trnh Cau truc d lieu va Giai thuat 145

Er r or _code run_recursive_binary_1( const Or der ed_l i st &t he_l i st ,
const Key &t ar get , i nt &posi t i on)
{
r et ur n recursive_binary_1( t he_l i st , t ar get , 0, t he_l i st . si ze( ) - 1,
posi t i on) ;
}

V phop do quI duoc su dung frong ham fron Ia do quI duoI |tail recursion) non
co fho chuyon fhanh vong Iap mof cach do dang. ong fhoI chung fa co fho Iam
cho cac fhong so cua ham fro non fhong nhaf voI cac ham fm kIom khac.

Er r or Code binary_search_1 ( const Or der ed_l i st &t he_l i st ,
const Key &t ar get , i nt &posi t i on)
/ *
post: Nou phan fu co khoa frung voI fargof duoc fm fhay fh fra vo success, posi t i on chI vj fr
fm fhay. Nguoc IaI phuong fhuc fra vo not _pr esent , posi t i on khong co nghIa.
uses: Cac phuong fhuc cua Iop Li st va Recor d.
*/
{
Recor d dat a;
i nt bot t om= 0, t op = t he_l i st . si ze( ) - 1;

whi l e ( bot t om< t op) {
i nt mi d = ( bot t om+ t op) / 2;
t he_l i st . r et r i eve( mi d, dat a) ;
i f ( dat a < t ar get )
bot t om= mi d + 1;
el se
t op = mi d;
}
i f ( t op < bot t om) r et ur n not _pr esent ;
el se {
posi t i on = bot t om;
t he_l i st . r et r i eve( bot t om, dat a) ;
i f ( dat a == t ar get ) r et ur n success;
el se r et ur n not _pr esent ;
}
}

7.3.4. Nhun bet som phun tu co chuu khou dIch
Tuy bi nar y_sear ch_1 Ia mof dang don gIan cua gIaI fhuaf fm kIom nhj
phan, nhung no fhuc hIon fhua mof so Ian so sanh v no khong nhan ra fruong
hop phan fu khoa duoc fm fhay som hon. V fho chung fa co fho caI fIon gIaI
fhuaf nhu sau.

Er r or _code recursive_binary_2( const Or der ed_l i st &t he_l i st , const Key
&t ar get , i nt bot t om, i nt t op, i nt &posi t i on)
/ *
pre: Cac chI so bot t omva t op chI ra day cac phan fu frong danh sach phuc vu cho vIoc fm
kIom t ar get .
Chng 7 Tm kiem
Giao trnh Cau truc d lieu va Giai thuat 146
post: Nou phan fu co khoa frung voI t ar get duoc fm fhay fh fra vo success, posi t i on chI
vj fr fm fhay. Nguoc IaI phuong fhuc fra vo not _pr esent , posi t i on khong co nghIa.
uses: r ecur si ve_bi nar y_2 va cac phuong fhuc cua Iop Li st va Recor d.
*/
{
Recor d dat a;
i f ( bot t om<= t op) {
i nt mi d = ( bot t om+ t op) / 2;
t he_l i st . r et r i eve( mi d, dat a) ;
i f ( dat a == t ar get ) {
posi t i on = mi d;
r et ur n success;
}

el se i f ( dat a < t ar get )
r et ur n recursive_binary_2( t he_l i st , t ar get , mi d + 1, t op, posi t i on) ;
el se
r et ur n recursive_binary_2( t he_l i st , t ar get , bot t om, mi d - 1,
posi t i on) ;
}
el se r et ur n not _pr esent ;
}

Er r or _code run_recursive_binary_2( const Or der ed_l i st &t he_l i st ,
const Key &t ar get , i nt &posi t i on)
{
r et ur n recursive_binary_2( t he_l i st , t ar get , 0, t he_l i st . si ze( ) - 1,
posi t i on) ;
}

Chung fa co fho chuyon ham nay fhanh dang khong do quI nhu sau.

Er r or _code binary_search_2( const Or der ed_l i st &t he_l i st ,
const Key &t ar get , i nt &posi t i on)
/ *
post: Nou phan fu co khoa frung voI t ar get duoc fm fhay fh fra vo success, posi t i on chI
vj fr fm fhay. Nguoc IaI phuong fhuc fra vo not _pr esent , posi t i on khong co nghIa.
uses: Cac phuong fhuc cua Iop Li st va Recor d.
*/
{
Recor d dat a;
i nt bot t om= 0, t op = t he_l i st . si ze( ) - 1;
whi l e ( bot t om<= t op) {
posi t i on = ( bot t om+ t op) / 2;
t he_l i st . r et r i eve( posi t i on, dat a) ;
i f ( dat a == t ar get ) r et ur n success;
i f ( dat a < t ar get ) bot t om= posi t i on + 1;
el se t op = posi t i on - 1;
}
r et ur n not _pr esent ;
}

Cac hoaf dong nay co fho duoc mInh hoa nhu sau:
Chng 7 Tm kiem
Giao trnh Cau truc d lieu va Giai thuat 147

So do nay Ia doI xung fhoo nghIa phan fhu nhaf chI chua cac phan fu nho hon
khoa, phan fhu ba chI chua cac phan fu Ion hon khoa. KhI do, nou nhu khoa xuaf
hIon o nhIou vj fr frong danh sach fh gIaI fhuaf co fho fra vo baf ky vj fr nao
frong so do. ay cung Ia nhuoc dIom cua cach caI fIon do nhan ra som phan fu
can fm nay, v frong mof so ung dung, vj fr fuong doI gIua phan fu duoc fm
fhay so voI cac phan fu co khoa frung voI no raf quan frong.
7.4. Cuy so sunh
Cay so sanh |comparison tree) cua mof gIaI fhuaf fm kIom, con goI Ia cay
quyof djnh |decision tree) hay cay fm kIom |search tree), Ia mof cay co duoc bang
cach Ian fhoo vof cac hanh vI cua gIaI fhuaf. MoI nuf cua cay bIou dIon mof phop
so sanh. Ton cua nuf Ia chI so cua phan fu co khoa dang duoc so sanh voI khoa
dch. Cac nhanh xuaf phaf fu moI nuf Ia cac kof qua co fho co cua phop so sanh
faI nuf do va duoc daf fon fuong ung. KhI gIaI fhuaf kof fhuc chung fa co mof nuf
Ia. Nou gIaI fhuaf fhaf baI fh nuf Ia nay duoc daf fon Ia I, nguoc IaI fon cua nuf
Ia chI so cua phan fu co khoa frung voI khoa dch.

Cay so sanh cho gIaI fhuaf fm kIom fuan fu raf don gIan:


HInh ?.2- Cay so sanh cho fm kIom fuan fu

So Ian so sanh ma mof gIaI fhuaf fm kIom fhuc hIon khI fIon hanh mof phop
fm kIom cu fho Ia so nuf frung gIan ma gIa I fhuaf dI qua ko fu goc |nuf fron cung
cua cay) do dI don nuf Ia can fhIof.
Chng 7 Tm kiem
Giao trnh Cau truc d lieu va Giai thuat 148
HInh dung cuu cuy so sunh cho tIm kem nh{ phun:

CIaI fhuaf fm kIom fuan fu can nhIou phop so sanh hon gIaI fhuaf fm kIom
nhj phan. Chung fa do dang nhan fhay dIou nay qua hnh dang cac cay so sanh
cua chung. CIaI fhuaf fm kIom fuan fu co cay so sanh hop va cao frong khI cay
so sanh cua gIaI fhuaf fm kIom nhj phan rong va fhap hon nhIou. Hnh dang cay
nay gIup fa hIou duoc faI sao so Ian so sanh frong phop fm kIom nhj phan Ia f
hon so voI fm kIom fuan fu.

HInh ?.3- Cay so sanh cho fm kIom nhj phan.

You might also like