Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_matni(MAG_ST).doc
Скачиваний:
3
Добавлен:
10.01.2024
Размер:
1.11 Mб
Скачать

1. Избе-из излеў

Усы көринистеги излеў егер мағлыўматлар тәртипсиз яки олар структурасы анық емес болғанда қолланылады. Бунда мағлыўматлар пүтин кесте бойынша оператив ядта киши адрестен баслап, үлкен адреске шекем избе-из қарап шығылады.

Массивте избе-из излеў (search өзгериўши табылған элемент номерин сақлайды).

Паскал тилинде программа төмендегише болады:

for i:=1 to n do

if k[i] = key then

begin

search = i;

exit;

end;

search = 0;

exit;

Массивте избе-из излеў алгоритм эффективлигин орынлаған салыстырыўлар саны М менен анықлаў мүмкин. Мmin = 1, Mmax = n. Егер мағлыўматлар массив ячейкасында бир қыйлы итималлық пенен бөлистирилген болса, ол жағдайда Мср » (n + 1)/2 болады.

Егер керекли элемент кестеде болмаса ҳәм усы элементти кестеге қосыў керек болса, ол жағдайда жоқарыдағы программадағы ақырғы еки оператор төмендегиге алмастырылады.

Паскалда

n:=n+1;

k[n]:=key;

r[n]:=rec;

search:=n;

exit;

Егер мағлыўматлар кестеси бир бағытлы дизим көринисинде берилген болса, ол жағдайда избе-из излеў дизимде әмелге асырылады.

Алгоритмлер варианты:

Паскалда:

q:=nil;

p:=table;

while (p <> nil) do

begin

if p^.k = key then

begin

search = p;

exit;

end;

q := p;

p := p^.nxt;

end;

New(s);

s^.k:=key;

s^.r:=rec;

s.^nxt:= nil;

if q = nil then table = s

else q.^nxt = s;

search:= s;

exit

Дизимли структураның артықмашлығы соннан ибарат, дизимге элементти қосыў яки өшириў тез әмелге асады, бунда қосыў яки өшириў элемент санына байланыслы болмайды, массивте болса элементти қосыў яки өшириў шама менен барлық элементлердиң ярымын жылжытыўын талап етеди. Дизимде излеўдиң эффективлиги шама менен массив пенен бир қыйлы болады.

Улыўма алғанда избе-из излеў эффективлигин асырыў мүмкин.

Ойлайық, күн даўамында мағлыўматлар жыйналып, кейин ала олар қайта исленсин. Мағлыўматлар топланғаннан кейин олар сараланады.

2. Индексли избе-из излеў

Усы көринистеги излеў әмелге асырылып атырғанда еки кесте пайда болады: өз гилтине ийе мағлыўматлар кестеси (өсиў тәртибинде тәртиплестирилген) ҳәм индекслер кестеси, бул да мағлыўматлар гилтинен ибарат, бирақ бул гилтлер тийкарғы кестеден анық бир интервал арқалы алынған. (2-сызылма).

Басында берилген аргумент бойынша избе-из излеў индекслер кестесинен әмелге асырылады. Қашан биз берилген гилттен киши гилтти анықлағанымызда, тийкарғы кестеде излеўдиң төменги шегарасын орнатамыз - low, кейин болса жоқарғы шегараны - hi, яғный ( kind > key ).

Мәселен, key = 101.

Излеў толық кесте бойынша емес, бәлким low дан hi ге шекем даўам етеди.

2-Сызылма.

Программаға мысал:

Паскаль:

i:=1;

while (i <= m) and (kind[i] <= key) do

i=i+1;

if i = 1 then low:=1 else low:=pind[i-1];

if i = m+1 then hi:=n else hi:=pind[i]-1;

for j:=low to hi do

if key = k[j] then

begin

search:=j;

exit;

end;

search:=0;

exit;

3. Избе-из излеўдиң эффективлиги

Қәлеген излеўдиң эффективлиги кестедеги мағлыўматлардың гилтлери менен салыстырыў саны – С пенен баҳаланыўы мүмкин. Егер салыстырыўлар саны қанша киши болса, излеў алгоритми эффективлиги сонша жақсы болады.

Массивте избе-из излеўдиң эффективлиги төмендегише болады:

C = 1 ¸ n, C = (n + 1)/2.

Улыўма алғанда дизимде де эффективлик жоқарыдағыдай болады. Массивте де байланысқан дизимде де излеў эффективлиги бир қыйлы болсада, мағлыўматларды массив ҳәм дизим көринисте сүўретлеўдиң өзине тән кемшилик ҳәм артықмашлықлары бар. Излеўдиң мақсети - төмендеги процесслердиң орынланыўынан ибарат:

  1. Табылған жазыўды оқыў.

  2. Изленип атырған жазыў табылмаса, оны кестеге қосыў.

  3. Табылған жазыўды өшириў.

Биринши процесс (излеўдиң өзи) массив ушын да дизим ушын да бир қыйлы болады. Екинши ҳәм үшинши процессте болса излеў дизимли структурада эффективрек болады (себеби массивте элементлерди жылжытыў керек).

Егер k массивте элементлерди жылжытыўлар саны болса, ол жағдайда k = (n + 1)/2 болады.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]