Скачиваний:
0
Добавлен:
12.03.2025
Размер:
911.78 Кб
Скачать

lowlim

endif

poziciyasınan baslap

izlew for j = lowlim to hi lim if k( j) = key

then search = j return

endif next j

search = 0 return

hi lim pozciyasına shekem tablicada

2 súwret

37

Joqarıda keltirilgen algoritm tap usınday jazıwdaǵı faylǵa bir gilt penen kórsetilmeydi. Izbe-iz indeksli izlew usılınıń artıqmashılıǵı sonda tablicadaǵı kerekli elementlerdi izbe-iz kórip shıǵıw arqalı únemli waqıt ishinde tabıwǵa boladı. Izbe-iz izlew kishi indeks penen izlenedi. Eger durıs indeks tabılsa, ekinshi izbe-iz izlew tablicadaǵı kishkene jazıw arqalı da ámelge asırıladı.

Indeks qayta taqlanǵan tablica ushın dizim hám massiv túrinde de qollanıla beredi. Baylanıslı dizimde qollanıw keńislikten kóp paydalanıwǵa alıp keledi, al bunı ańsat jol menen de orınlawǵa boladı. Jáne aralas realizaciyanı da qollanıwǵa boladı, bunda qońsılas elementler arasında indeks óz aldına kórsetilgen tablicada saqlanadı.

Eger tablica júdá kólemli yamasa júdá kishi ólshemde bolsa, onda ekinshi dárejedegi indeks qollanıladı. Bul 2 súwrette kórsetilgen.Izbe-iz indeksli tablicadan alınıp taslaytuǵın jerler flag arqalı kórsetiledi. Izbe-iz izlewde alınıp taslanǵan jazıwlar shıǵarılıp taslanatuǵın edi. Eger qandayda bir element alıp taslanǵan bolsa, bul flag

penen kórsetilgen bolsa, onda onıń indeksin qozǵaltpaw kerek.

Izbe-iz indeksli tablicaǵa qosımsha kiritiw júdá qıyın, sebebi eki element arasında tablicada da bos orın bolmawı múmkin. Sonıń ushın tablicadaǵı kóp elementler sanın ózgertiwimizge tuwra keledi. Alınıp taslanatuǵın element flag penen belgilengen bolsa informaciyanıń tómengi bólegin joqarı kóterińkirep, usı alınıp taslanatuǵın element ornına qosımsha kiritiwge boladı. Bul jerde indeksti ózgertiw kerek boladı, sebebi aldıńǵı indeksti jıljıtqan edik. Tablica dúzilgende qosımshalar kiritiliwi ushın ashıq orınlar taslanıp ketiledi. Basqa usılda basqa bir jerde toltırılatuǵın orın taslap ketilip, kirgizilgen jazıw bir-biri menen baylanıstırıladı. Bunıń ushın qosımsha keńislik kerek boladı. Bul jaǵdaydı sheshiw ushın hár bir topardaǵı jazıw ushın tek bir kórsetkish taslaw kerek, sonda qosımshanı aldıńǵı jazıwlardı bir poziciya kóterip, keyingi jazıwdı bir poziciya túsirip qosımsha kiritiwge boladı. Eger keyingi jazıw ornınan qozǵaltılsa ol qosımsha qılınǵan maydanda jaylasadı. Oqıwshı bulardı shınıǵıwlarda kóriwi usınıs etiledi.

Maǵlıwmatlardı izlewdiń binar izlew usılı

Járdemshi indeksler yamasa tablicalar qollanılmaytuǵın tártiplengen massivtegi effektli izlew usıllarınan biri bul binarlı izlew usılı bolıp esaplanadı. Bul usılda argument tablicanıń ortańǵı elementi menen salıstırıladı. Eger olar teń bolsa izlew nátiyjeli tamamlanadı. Basqa jaǵdaylarda izlew joqarǵı yamasa tómengi tablicanıń yarımında boladı. (2 súwreti.) Ekinshi indekstiń qollanılıwı.

Binar izlewi rekursiv anıqlanǵan, rekursiv algoritm, ayırım programma, rekursiya modelleri arqalı berilgen edi. Rekursiya menen bolǵan shıǵınlar bul usıldan únemli paydalandıra almaydı. Sonıń ushın biz algoritmdi rekursiya emes versiyada qarap ótemiz. low = 1

hi = n

do

while (low <= hi) mid = int((low + hi)/ 2) if key = k(mid)

return endif

if key < k(mid)

then hi = mid 1 else low = mid +1 endif

endwhile search = 0 return

 

 

 

38

 

 

Binar izlewinde hár bir salıstırǵanda eki kandidattan sanı azayadı. Salıstırıw gilti

2

n

log ǵa teńlestiriledi. ( n 2log di kuraydı, sebebi Beysik tilinde eki teńew gilti key =

 

 

2

k(mid

)

hám key <

bolıp belgilengen. Biraq assambler yamasa Fortrane tilinde

 

lk(mid)

 

 

 

«arifmetikalıq IF» qollanılǵanda tek bir teńlestiriw qollanıladı).

Sonıń ushın biz binar izlewi algoritmi tártibi O flog n dep ayta alamız. Binar izlewi izbe-iz indeksli izlew ornına da qollanıladı. Binar izlewi tiykarǵı tablicada da kollanılıwı múmkin. Biraq tablica segmenti sol dárejede kólemi kishkene bunda inar izlewi nátiyjesiz. Biraq binar izlew algoritmi tablica tártipke salınǵan massivte saqlanǵan bolsa ǵana qollanıladı.

Bul berilgen algoritm massiv elementleri indeksi izbe-iz sanlar bolsa ǵana ámelge asırıladı degen sóz. Bul degeni kóp qosımshalar, alıp taslawlar bolsa binar usılınan paydalanıw nátiyjesiz degeni.

Izlew algoritmlerine mısallar sheshiw

Endi mısal sheshiw nátiyjelerin keltiremiz.

1-mısal. Mına berilgen sanlar massivinen etalondı x=13 izlewdiń binar usılı hám izb iz sızıqlı izlew usılı menen tabıń:

1 3 4 7 8 9 13 20 23

A)Máseleni sheshiw ushın birinshi binar izlew usılı algoritmine Paskal tilinde programma dúzip onıń nátiyjesin alamız

procedure binarpoisk; const n=8;

type item=integer;

var a:array[0..n] of item; i,L,R,m:integer; x:item; f:Boolean;

ff:textfile; begin

assign(ff,'binarpoisk.txt');

rewrite(ff); for i:=0 to n do a[i]:=a2[i];

for i:=0 to n do write(ff,a[i],' '); writeln(ff);

write(‗etalondı kiritin x=‘); readln(x); L:=0; R:=n; f:=false;

Repeat m:=(L+R) div 2; if a[m]=x then f:=true; If a[m] <x then L:=m+1 else R:=m;

Until (L>=R) or (f);

If f then write(ff,‘element ‗,i,‘ orında tabıldı‘) else write(ff,‘bunday element massivte jok‘); writeln(ff);

close(ff);

end;

etalondı kiritin x= 13 element 6 orında tabıldı etalondı kiritin x= 15 bunday element massivte jok

B)Endi bul mısaldı izbe-iz sızıqlı izlew usılı menen sheshemiz hám onıń programmasın

nátiyjesi menen keltiremiz. Mısaldıń berilgeni

39

1 3 4 7 8 9 13 20 23

Usıldıń programması: procedure linpoisk;

const n=8;

type item=integer;

var a: array[0..n] of item; i:integer; x: item; ff: textfile;

begin assign(ff,'linpoisk.txt'); rewrite(ff);

for i:=0 to n do a[i]:=a2[i];

for i:=0 to n do write(ff,a[i],' '); writeln(ff);

write(‗etalondı kiritin x=‘); readln(x); i:=0; while (i<=n) and (a[i]<>x) do

begin i:=i+1 end;

If i<=n then write(ff,‘element ‗,m,‘ orında tabıldı‘) else write(ff,‘bunday element massivte jok‘); writeln(ff);

close(ff);

end;

etalondı kiritin x= 13 element 6 orında tabıldı etalondı kiritin x= 15 bunday element massivte jok

40