- •(2 Саат)
- •Пайдаланыўшы программасында ҳәм эем ядында мс классификациялаў
- •Қадағалаў сораўлары
- •Пайдаланыўшы тәрепинен анықланатуғын түрлер Саналатуғын түр
- •Шегараланған яки диапазонлы түрлер
- •1. Векторлар
- •2. Массивлер
- •3. Жазыў
- •4. Кестелер
- •(Массалық хызмет көрсетиў түрлери)
- •1. Стеклер
- •Insert (q,X) элемент қосыў әмели.
- •Байланысқан дизимлер
- •Бир бағытлы дизимлер
- •Ҳалқа тәризли бир бағытлы дизим
- •Бир бағытлы дизимлер үстинде орынланатуғын әпиўайы әмеллер
- •Еки бағытлы дизим
- •Ҳалқа тәризли еки бағытлы дизим
- •Стеклерди бир бағытлы дизимлер жәрдеминде әмелге асырыў
- •Дизимге енгизиў мүмкин болған нәўбет әмеллери
- •Getnode, Freenode әмеллерин пайда етиў ҳәм босаған элементлерди утилизация қылыў
- •Дизимлер үстиндеги әмеллерге байланыслы мәселелер
- •1 Мәселе.
- •2 Мәселе.
- •Сызықлы емес байланысқан структуралар
- •Бинар тереклер
- •Бинар теректен элементти өшириў процедурасы
- •Қадағалаў сораўлары
- •1. Избе-из излеў
- •2. Индексли избе-из излеў
- •3. Избе-из излеўдиң эффективлиги
- •4. Индексли избе-из излеўдиң эффективлиги
- •6. Табылған элементти дизим басына қосыў арқалы кестени қайта тәртиплестириў
- •7.Транспозиция усылы
- •Қадағалаў сораўлары
- •Гилтлерди сәўлелендириў.
- •Сәўлелендириў функциясини таңлаў.
- •Тосқынлықты шешиў алгоритмлери
- •Қадағалаў сораўлары
- •Пайдаланылған әдебиятлар Тийкарғы
- •Қосымша
Бинар тереклер
Бинар тереклер ең көп пайдаланылатуғын тереклер түри есапланады.
Тереклердиң ЭЕМ ядында сүўретлениўине көре ҳәр бир элемент төрт майданға ийе жазыў есапланады. Усы майданлар мәниси сәйкес түрде жазыў гилти болып, басқа элементлерге мүрәжәтти аңлатады, яғный шепке-төменге, оңға-төменге ҳәм жазыў текстине.
Соны есте тутыў керек, терек пайда етилип атырғанда, атаға салыстырғанда шеп тәрептеги бала мәниси киши гилтке, оң тәрептеги бала болса үлкен мәнисли гилтке ийе болады. Мәселен, төмендеги элементлерден бинар терек қурамыз: 50, 46, 61, 48, 29, 55, 79. Ол төмендеги көриниске ийе болады:
Нәтийжеде, оң ҳәм шеп бөлим тереклери бирдей басқышлы тәртиплестирилген бинар терек пайда еттик. Егер теректиң оң ҳәм шеп бөлим тереклери басқышларының парқы бирден киши болса, бундай терек идеал тең салмақтағы терек делинеди. Жоқарыда пайда етилген бинар терегимиз идеал тең салмақтағы терекке мысал болады.
Бинар теректи пайде етиў ушын ЭЕМ ядында элементлер төмендеги түрде болыўы керек:
V = MakeTree(Key, Rec) әмели еки көрсеткишли (гилт) ҳәм еки майданли (информациялық) элемент жаратады (терек түйини)
MakeTree процедурасы көриниси:
Паскаль
New(p);
p^.r := rec;
p^.k := key;
v := p;
p^.left := nil;
p^.right := nil;
Басында гилт биринши мәниси киритиледи. Оннан соң элементтиң өзин maketree процедурасы арқалы пайда етемиз. Кейин болса көрсеткиш бос мәнисти көрсеткенше циклды даўам етемиз.
READ(key,rec)
tree=maketree(key,rec)
WHILE not eof DO
READ(key,rec)
V=maketree(key,rec)
WHILE P<>nil DO
Q=P
IF key=k(P)
THEN P=left(P)
ELSE P=right(P)
END IF
END WHILE
IF P=nil
THEN WRITELN(' Бул тамыр');
tree=V
ELSE IF key<k(q)
THEN left(P)=V
ELSE right(P)=V
END IF
END IF
END WHILE
m-өлшемли теректи бинар көриниске келтириў
Формал емес алгоритм:
1. Теректиң ҳәр бир түйининде үлкен балаға сәйкес шетки шеп шақадан тысқары барлық шақалары кесип тасланады.
2. Бир атаның барлық балалары горизонтал сызық пенен байланысады.
3. Пайда етилген структураның ҳәр бир түйининде үлкен бала усы түйинниң төменинде турған түйин есапланады (егер ол бар болса).
Алгоритм әмеллер избе-излиги төменде келтирилген.
яки
m-өлшемли теректи бинар көриниске келтириў.
Тереклер үстинде орынланатуғын әмеллер
1. Теректи айланып шығыў (Обход дерева).
2. Бөлим теректи өшириў.
3. Бөлим терек қосыў.
Теректи айланып шығыўды әмелге асырыў ушын төмендеги үш процедураны орынлаў лазым:
1. Тамырды қайта ислеў.
2. Шеп тармақ(шақа)ты қайта ислеў.
3. Оң тармақ(шақа)ты қайта ислеў.
Жоқарыдағы процедура қандай избе-изликте әмелге асырылыўына қарап айланып шығыўды үш көриниске ажыратылады.
1. Жоқарыдан төменге. Процедура төмендеги избе-изликте орынланады
A-B-C.
2.Шептен оңға. Процедура төмендеги избе-изликте орынланады
B-A-C.
3. Төменнен жоқарыға. Процедура төмендеги избе-изликте орынланады
B-C-A.
Мәселен төмендеги теректе айланып шығыўды өткерейик.
|
Терек айланып шығыў тәртиби: Жоқарыдан төменге: A,B,C,D,E,F,G. Шертен оңға: C,D,B,E,F,A,G. Төменнен жоқарыға: D,C,F,E,B,G,A. |
Терек көригиниң рекурсив процедурлары:
1) PROCEDURE pretrave (tree) {жоқарыдан төменге көрик}
IF tree<>nil
THEN PRINT info (tree)
pretrave (left (tree))
pretrave (right (tree))
END IF
RETURN
2) PROCEDURE intrave (tree)
IF tree<>nil
THEN intrave (left (tree))
PRINT info (tree)
intrave (right (tree))
END IF
RETURN
3) PROCEDURE postrave (tree)
IF tree<>nil
THEN postrave (left (tree))
postrave (right (tree))
PRINT info (tree)
END IF
RETURN
Бинар терек бойынша излеў процедурасы
Усы процедураның ўазыйпасы соннан ибарат, ол берилген гилт бойынша терек түйинин излеўди әмелге асырады. Излеў операциясының даўамлылығы терек структурасына байланыслы болады. Ҳақыйқаттан, егер элементлер терекке гилт мәнислери өсиў (кемейиў) тәртибинде келип түскен болса, ол жағдайда терек бир тәрепке бағдарланған дизим пайда етеди (шығыў дәрежеси бир болады, яғный жалғыз шақаға ийе), мәселен:
Бул жағдайда теректе излеў ўақты, бир тәреплеме бағдарланған дизимдеги киби болып, орташа қарап шығыўлар саны N/2 болады.
Егер терек тең салмақлы болса, ол жағдайда излеў ең өнимли нәтийже береди. Бул жағдайда излеў ден көп болмаған элементлерди көрип шығады.
Излеў процедурасын көрип шығамыз. search өзгериўшисине табылған буўын көрсеткиши өзлестириледи:
p=tree
WHILE p<>nil DO
IF key=k (p)
THEN search=p
RETURN
END IF
IF key<>k (p)
THEN p=left (p)
ELSE p=right (p)
END IF
END WHILE
search=nil
RETURN
Терекке жаңа элемент қосыў процедурасы
Терекке қандайда бир элементти қосыўдан алдын теректе берилген гилт бойынша излеўди әмелге асырыў керек болады. Егер берилген гилтке тең гилт бар болса, ол жағдайда программа өз жумысын жуўмақлайды, кери жағдайда терекке элемент қосыў әмелге асырылады.
Терекке жаңа жазыўды киритиў ушын, алдын теректиң сондай түйинин табыў керек, нәтийжеде усы түйинге жаңа элемент қосыў мүмкин болсын. Керекли түйинди излеў алгоритми де тап берилген гилт бойынша түйинди табыў алгоритми киби болады. Бирақ берилген гилт бойынша излеў процедурасынан туўрыдан-туўры пайдаланып болмайды, себеби, излеў процедурасында, қайсы түйинде мүрәжәт NIL (search = nil) болғаны фиксирленбейди.
Излеў процедурасын сондай модификация қыламыз, қосымша эффект сыпатында жаңа процедурамыз берилген гилт турған түйинди фиксирлесин (излеў табыслы болса), яки сондай түйиндики, усы түйинди қайта ислегеннен кейин излеў жуўмақлансын (излеў табыслы болса).
Теректе қосылып атырған элемент гилтине тең гилтли элемент жоқ болған жағдайда элементти қосыў процедурасын келтирип өтемиз.
q=nil
p=tree
WHILE p<>nil DO
q=p
IF key=k (p)
THEN search=p
RETURN
END IF
IF key<k (p)
THEN p=left (p)
ELSE p=right (p)
END IF
END WHILE
{Берилген гилтке тең түйин табылмады, элемент қосыў талап қылынады. Ата болыўы мүмкин түйинге q көрсеткиш бериледи.}
V=maketree (key, rec)
{Қойылып атырған V элемент шеп яки оң бала болыўын анықлаў лазым.}
IF key<k (q)
THEN left (q)=V
ELSE right (q)=V
END IF
search=V
RETURN