Оқытушы пәнінің ОҚУ-Әдістемелік кешені



жүктеу 5,01 Kb.
Pdf просмотр
бет25/45
Дата23.05.2018
өлшемі5,01 Kb.
#16673
1   ...   21   22   23   24   25   26   27   28   ...   45

Енді барлық осы үш айналу әдісін ағашты білдіретін нақты Т параметрі 
бар және әрбір түйінде орындалатын операцияны білдіретін нақты емес Р(Т) 
параметрі бар  процедура ретінде бейнелеуге болады. 
 Анықтамалар енгіземізы: 
TYPE REF = ^NODE; 
NODE = RECORD
 
 
.....…………… 
LEFT, RIGHT: REF  
END; 
Айналып  өтудің  аталып  өткен  үш  әдісін  рекурсивтік  процедуралар 
ретінде  көрсеткен  оңай.  Олар  деректердің  рекурсивтік  анықталған 
құрылымдары  рекурсивтік  алгоритмдермен  сипатталатындығының  бейнесі 
болып келеді. Жоғарыдан төмен қарай: 
PROCEDURE PREFIX(T: REF); 
BEGIN  
IF Т <> Nil THEN BEGIN  
P(T); { түйінді өңдеу}  
PREFIX(T^.LEFT); 
PREFIX(T^.RIGHT); 
END; 
END; 
Солдан оңға қарай: 
PROCEDURE INFDC(T: REF); 
BEGIN  
IF T<>Nil THEN BEGIN 
 INFIX(T^.LEFT); 
P(T); 
INFIX(T^.RIGHT); 
END; 
END; 
Төменнен жоғары қарай: 
PROCEDURE POSTFIX(T; REF); 
BEGIN IF Т <> Nil THEN BEGIN 
POSTFIX(T^.LEFT); 
POSTFIX(T^.RIGHT); 
P(T); 
END; 
END; 
Осы 
процедуралардағы 
Т 
сілтемесі 
параметр-мән 
ретінде 
жіберілетіндігін атап өтейік. Яғни мұнда мәні сілтеме болып табылатын және 
Т  параметр-айнымалы  болып  жіберілетін  жағдайда  мәнді  өзгерте  алатын 
айнымалы  емес,  қарастырылатын  бағыныңқы  ағаштың  сілтемесі  маңызды 
болып табылады. 


Ағашты айналып өтудің мысалы – әрбір деңгейді ерекшелейтін сәйкес 
жылжуы бар ағаштың түйіндерін қағазға шығару бағдарламасы.  
PROCEDURE PRINTTREE(T: REF, H: INTEGER); 
{ Т – шыңға сілтеме, Н – қағазға шығару кезіндегі жылжу }  
VAR I: INTEGER; 
BEGIN    { Т ағашын Н жылжумен қағазға шығару} 
 IF Т <> Nil THEN 
WHITF T^ DO BEGIN 
PRINTTREE(LEFT, H+1);    { сол жақ бұтақты айналып өту } 
FOR I := 1 ТО Н DO WRITEC (‘ ');   { жылжу } 
WRITELN(KEY);            { кілтті қағазға шығару } 
PRINTTREE(RIGHT, H+1)   { оң жақ бұтақты айналып өту } 
END; 
END; 
Шақырушы бағдарлама: 
BEGIN 
ROOT := TREE(N); { ТАМЫРҒА СІЛТЕМЕ } 
PRINTTREE(ROOT,0) END. 
 
Іздеу мәселесі 
Келесі  міндетті  жиі  орындауға  тура  келеді:  кілттің  керекті  мәні  бар 
элементті  табу.  Бұл  міндетті  массивтерді,  тізім,  ағаштарды  қолданып 
орындау керек. Бұл мәселе элементтер кілттерін өсу ретімен реттелген және 
реттелмеген  жағдайларда  әртүрлі  шешіледі.  Соңғы  жағдайда  барлық 
элементтерді  қарастырмай-ақ  кілті  талап  етілгеннен  үлкен  элементке  дейін 
ғана баруға болады. 
Іздеудің  екі  альтернативті  әдісі  бар:  тізбектелген  және  екілік. 
Тізбектелген    тізімде  сілтемелердің  тізбегі  ретімен  тізбекті  іздеу  ғана 
қолданылады.  Екілік  ағашта  екілік  іздеу  орынды  болады.  Массивте 
алгоритмдердің екеуі де қолданыла алады. 
Міндетті  былай  қояйық:  кілт  мәні  Х-ке  тең  компоненттің  ең  кіші 
индексін (сілтемесін) табу. 
 
Массивтегі тізбектелген іздеу 
Массив мынау болсын: 
VAR A: ARRAY[1..N] OF INTEGER
X: INTEGER; 
FUNCTION LOC(X: INTEGER): INTEGER; 
VAR I: INTEGER; 
BEGIN  
I:=0; 
REPEAT 
I:=I+ 1 
 UNTIL(A[I]-X) OR(I=N); 
IFA
[
I
]<>
X THEN LOC
:=
O
 


ELSE LOC := I  
END; 
Процедура реттелген және реттелмеген массивтерде де жұмысістейді. 
Функцияның  қолайсыздығы  аяқталу  шартын  тексерудің  күрделілігі. 
Бағдарламаны «бөгет» қойып тездетуге болады, яғни массивті бір элементке 
ұлғайтып ізделінетін кілттің мәнін соған жіберу керек. 
I := 0; А[N+1]:=X; 
REPEAT  
I:=I+1; 
UNTIL A[ I ]=X; 
IF I > N THEN LOC :
=
 0 ELSE LOC:= I; 
Қарап шығудың орташа саны m 
=
 N / 2. 
 
Массивтегі екілік (бинарлы) іздеу 
Реттелген  массивтер  үшін  қолданылады.  Екілік  іздеуде  екіше  бөлу 
әдісі пайдаланады. Алгоритмі: 
I:=1;J:=N; 
REPEAT 
К := (I + J) DIV 2; 
IF X > A[K] THEN I := К + 1 ELSE J := К - 1  
UNTIL (A[K] = X) OR (I > J)  
Қарап шығу саны m = log
2
 N. 
N = 100 болғанда:  тізбектелген  іздеу 50 қарап  шығу  ішінде 
орындалады (m = 50), екілік 6,62 ішінде (m 
=
 6,62). 
 
Сызықты тізімде іздеу 
Файлдағыдай  іздеу  қатаң  түрде  ретпен  орындалады.  Ол  элемент 
табылған кезде немесе тізімнің соңына жеткенде тоқтайды. 
Ең қарапайым шешім: 
WHILE (Р <> Nil) AND (P^.KEY <>X) DO 
P:=P^.NEXT 
Егер  элемент  тізімде  болмаса,  онда    Р  Nil-ге  тең  болса,  келесі 
элементтің  жоқ  болғаны  P^.KEY. Сондықтан  тексерудің  екінші  бөлімін 
енгізу керек  
WHILE P<>
 
Nil DO 
IF P^.KEY = X THEN { циклдан шығу }  
ELSE Р:=P^.NEXT; 
Логикалық айнымалыны (жалаушаны) қолданған жөн: 
В := TRUE; 
WHILE (Р <>Nil) AND В DO 
IF P^.KEY = X THEN В :=FALSE 
ELSE P := P^.NEXT; 
Егер Р = Nil және В = TRUE, онда элемент табылған жоқ. 
 
Екілік ағашта іздеу 


Бинарлы ағаштар элементтері қандай да бір өзіне ғана тән, ерекше кілт 
бойынша ізделетін деректерді бейнелеуде жиі қолданылады. 
Егер  ағаштың  әрбір  ti түйіні  үшін  сол  жақ  бағыныңқы  ағаштың 
кілттері t

кілтінен кіші болса, ал оң жақ бағыныңқы ағаштың барлық кілттері 
t
i
 кілтінен үлкен болса, онда бұл ағаш кілттер бойынша реттелген және іздеу 
ағашы деп аталады. Іздеу ағашында әрбір кілттің орнын тамырынан бастап, 
кілт  мәніне  байланысты  оң  жақ  немесе  сол  жақ  бағыныңқы  ағашқа  қарай 
өтіп табуға болады. 
N  элементтен  биіктігі log
2
 N көп  емес  екілік  ағаш  ұйымдасатынын 
көруге  болады.  Сондықтан  егер  ағаш  идеалды  блансталған  боса, N эле-
менттің ішінен іздеу кезінде log
2
 N көп емес теңестірулер керек. 
Іздеу  үшін N теңестіру  керек  болатын  сызықты  тізімге  қарағанда 
ағаштың артықшылығы осында. 
Реттелген  екіік  ағаш  ішінде  іздеу  тамырынан  ізделінген  түйінге  дейін 
бір ғана жолмен жүргізіеді (өйткені ол тамырынан ізделінетін түйінге дейін 
бір олмен жүреді) және LOC итерациялық функциясымен сипатталады. 
FUNCTION LOC(X: INTEGER; Т: REF): REF; 
VAR FOUND: BOOLEAN; 
BEGIN 
FOUND :=FALSE; 
WHILE (Т <> Nil) AND NOT FOUND DO 
IF T^.KEY = X THEN FOUND := TRUE  
ELSE IF T^.KEY > X THEN Т:=T^.LEFT 
ELSE Т :=T^.RIGHT 
 LOC:=T  
END; 
LOC(X,  Т)  функциясы Nil мәніне  ие  болады,  егер  тамыры  Т  болатын 
ағашта  Х мәнді кілт табылмаса. 
Циклден 
шығу 
шартын 
ағаштың 
барлық 
«жапырақтарын» 
тұйықтайтын  тағы  бір  шектелген  түйін  ұйымдастырып  жеңілдетуге  болады 
(20-сур.). 
 
20-сурет. Бөгеті бар іздеу ағашы 
Барлық  жапырақтары  бір  зәкірге  немесе  бөгетке  байланатын  ағаш 
алдық. 


жүктеу 5,01 Kb.

Достарыңызбен бөлісу:
1   ...   21   22   23   24   25   26   27   28   ...   45




©g.engime.org 2024
әкімшілігінің қараңыз

    Басты бет
рсетілетін қызмет
халықаралық қаржы
Астана халықаралық
қызмет регламенті
бекіту туралы
туралы ережені
орталығы туралы
субсидиялау мемлекеттік
кеңес туралы
ніндегі кеңес
орталығын басқару
қаржы орталығын
қаржы орталығы
құрамын бекіту
неркәсіптік кешен
міндетті құпия
болуына ерікті
тексерілу мемлекеттік
медициналық тексерілу
құпия медициналық
ерікті анонимді
Бастауыш тәлім
қатысуға жолдамалар
қызметшілері арасындағы
академиялық демалыс
алушыларға академиялық
білім алушыларға
ұйымдарында білім
туралы хабарландыру
конкурс туралы
мемлекеттік қызметшілері
мемлекеттік әкімшілік
органдардың мемлекеттік
мемлекеттік органдардың
барлық мемлекеттік
арналған барлық
орналасуға арналған
лауазымына орналасуға
әкімшілік лауазымына
инфекцияның болуына
жәрдемдесудің белсенді
шараларына қатысуға
саласындағы дайындаушы
ленген қосылған
шегінде бюджетке
салығы шегінде
есептелген қосылған
ұйымдарға есептелген
дайындаушы ұйымдарға
кешен саласындағы
сомасын субсидиялау