Chương 7: Gii thut tìm kiếm
1. Bài toán tìm kiếm
* Bài toán m kiếm được phát biu như sau:
Cho mt bng gm n bn ghi r1, r2, . . . , rn;
ri( 1<= i <=n ) tương ng vi mt khoá ki.
y m bn ghi giá tr khoá tương ng
bng x cho trước.
* Gi x khoá m kiếm hay giá tr m kiếm.
Công vic m kiếm s hoàn thành khi
mt trong 2 tình hung sau xy ra:
1-Tìm được bn ghi giá tr khoá tương
ng bng x.Lúc đó ta nói phép tìm kiếm
được tho.
2-Không tìm được bn ghi nào giá tr
khoá bng x. Khi đó ta nói phép tìm kiếm
không tho.
Sau phép tìm kiếm không tho nếu yêu
cn b sung bn ghi mi khoá x vào
bng. Gii thut này gi là “ Tìm kiếm b
sung”.
Khoá ca mi bn ghi chính đặc đim
nhn biết ca bn ghi đó trong tìm kiếm, ta
coi đại din ca bn ghi trong gii
thut.
2. Tìm kiếm tun t ( Sequential searching )
2.1. Phương pháp
Đây gii thut đơn gin, c đin.
Cách thc m như sau: Bt đầu t bn ghi th
nht, ln lượt so sánh khoá m kiếm vi tương
ng ca các bn ghi trong bng cho đến khi tìm
thy bn ghi mong mun hoc đã hết danh sách
mà chưa thy.
* Gii thut:
Cho y khoá K có n phn t. Tìm xem có khoá
nào bng x, nếu có đưa ra th t ca khoá đó,
nếu không có thì đưa ra giá tr 0. Trong gii thut
s dng khoá ph kn+1=x.
Function SequenceSearch(k,n,x)
1. { Khi đầu }
i:=1; k[n+1]:=x;
2. {Tìm kiếm trong dãy}
While k[i] <> x Do i:=i+1;
3. { Không tìm thy }
If i=n+1 then Return(0) Esle Return(i);
Return
3. mkiếmnhphân(Binary searching )
3.1 Phươngpháp
* Phươngphápmkiếmthchintrêndãy
khóa đãspxếp, cónidung nhưsau:
-Tươngtnhưtratìmttrongtừđinhoc
danhbạđinthoi. Chkháclàtrongtracu
ta chntngunhiên, ntrongmkiếm
nhphânluônchnkhoá“ gia” dykhoá.
-Giscóykhoák
L
, . . ., kRthìkhoá
gialàk
mvi
m=(L+R) div 2
+ Tìm kiếm s kết thúc nếu: x=km
+ Nếu x<kmtìm kiếm s được thc hin
tiếp vi kL, . . . , km-1 vi cách tương
t.
+ Nếu x>kmtìm kiếm s được thc hin
tiếp vi km+1, . . . , kRvi cách tương
t.
Qúa trình tìm kiếm kết thúc khi tìm thy
mt khoá mong munhoc dãy khoá
rng(không tìm thy).
* Gii thut:
Cho dãy K gm n khoá, sp xếp theo th t tăng dn. Tìm
khoá có giá tr =x.
Dùng biến L, R, m: ch s đầu, ch s cui, ch s gia ca
khoá k.
Nếu tìm thy cho ra ch s ca khoá đó, nếu không tìm thy
cho ra 0.
Function BinarySearch(K,n,x)
1. { Khi to }
L:=1; R:=n;
2. { Tìm kiếm }
While L<= R Do
Begin
3. { Tính ch s gia }
m:=( L+R) div 2;
4. { So sánh}
If x<k[m] then R:=m-1
Else IF x>k[m] then L:=m+1
Else Return (m);
End; {End of While}
5. { Khôngmthy}
Return (0)
* Gii thut viết dng đệ quy như sau:
L, r là ch s đầu, ch s cui ca dãy K, biến
nguyên Loc để đưa ra ch s ng vi khoá cn
tìm, nếu không tìm thy thì Loc =0.
Function BinarySearch(L,R,x)
If L>R then Loc:=0
Else
beginm:=(L+R) div 2;
If x<k[m] then
Loc:=BinarySearch(L,m-1,x)
Else If x>k[m] then
Loc:=BinarySearch(m+1,R,x)
Else Loc:=m;
end;
Return(Loc)