Các toán tìm thuật kiếm
1, Tìm kiếm tuần tự
-Duyệt mảng (dãy số) để tìm
For i:=1 to N do
If a[i]=X then <trả lời yêu cầu>;
Break;exit;
2, Tìm kiếm nhị phân
Function TKNP(X, L, R:longint);boolean;
Var giua:longint;
Begin
While L<R do
Begin
Giua:=(L+R) div 2;
If a[giua]=X then exit(true);
If a[giua]>X then R:=giua-1;
Else L:=giua+1;
End;
Exit(false);
End;
3, Tìm vị trí của X xa nhất về bên phải
Function TKNP2(X,L,R:longint);longint;
Var giua:longint;
Find:boolean;
Begin
Find:=false;
While L<R do
Begin
Giua:=(L+R) div 2;
If a[giua]>=X then
Begin
If X=a[giua] then
Begin
find:=true;
TKNP2:=giua;
L:=giua+1;
End
Else R:=giua-1;
End;
If find=false then
Exit(0);
End;
4, Tìm vị trí của X xa nhất về bên trái
Function TKNP3(X,L,R:longint);longint;
Var giua:longint;
Find:boolean;
Begin
Find:=false;
While L<R do
Begin
Giua:=(L+R) div 2;
If a[giua]<=X then begin
If X=a[giua] then begin
find:=true;
TKNP3:=giua;
End;
R:=giua-1;
End;
Else L:=giua+1;
End;
If find=false then
Exit(0);
End;

Preview text:

Các toán tìm thuật kiếm 1, Tìm kiếm tuần tự
-Duyệt mảng (dãy số) để tìm For i:=1 to N do If a[i]=X then ; Break;exit; 2, Tìm kiếm nhị phân
Function TKNP(X, L, R:longint);boolean; Var giua:longint; Begin While LBegin Giua:=(L+R) div 2; If a[giua]=X then exit(true);
If a[giua]>X then R:=giua-1; Else L:=giua+1; End; Exit(false); End;
3, Tìm vị trí của X xa nhất về bên phải
Function TKNP2(X,L,R:longint);longint; Var giua:longint; Find:boolean; Begin Find:=false; While LBegin Giua:=(L+R) div 2; If a[giua]>=X then Begin If X=a[giua] then Begin find:=true; TKNP2:=giua; L:=giua+1; End Else R:=giua-1; End; If find=false then Exit(0); End;
4, Tìm vị trí của X xa nhất về bên trái
Function TKNP3(X,L,R:longint);longint; Var giua:longint; Find:boolean; Begin Find:=false; While LBegin Giua:=(L+R) div 2; If a[giua]<=X then begin If X=a[giua] then begin find:=true; TKNP3:=giua; End; R:=giua-1; End; Else L:=giua+1; End; If find=false then Exit(0); End;