- •1. Ақпараттық іздеудің қарапайым есебі
- •3.Бинарлы ағашты симметриялы ретпен айналу.
- •4.Бинарлы ағашты тура ретпен айналу.
- •5.Бинарлы ағашты кері ретпен айналу.
- •6.Avl ағашта сол жақ және оң жақ бұрылыс операциялары.
- •7. Ықтималды іздеу ағашы.
- •8.Бинарлы іздеу ағашының элементтерін жою.
- •9.Қызыл-қара ағаш және оның ерекшеліктері.
- •Қызыл-қара ағаштың биіктігі
- •Операциялар.
- •Қызыл-қара ағаштың артықшылығы..
- •10.Бинарлы ағаш тұрғызу алгоритмі және олардың арнайы ерекшеліктері.
- •11.Толықтау бинарлы ағаш.
- •12.Бинарлы ағаштың көрсетілуі.
- •13.Іздеу бинарлы ағашынан элементті жою
- •14.O(n log2n) күрделілігімен сұрыптау.
- •15.O(n2) күрделілігімен сұрыптау.
- •16.Бинарлы ағаштармен жасалатын стандарты операциялар.
- •17.Бинарлы ағаштар және оның қолдануы.
- •18.Бинарлы ағашта кесте құру және оның ерекшеліктері.
- •20.Шелл сұрыптауы (Shell_sort) және оның ерекшеліктері.
- •21.Quick_sort сұрыптауы оның ерекшеліктері.
- •22.Пирамидалы сұрыптау алгоритмі (Heap_sort) ж/е оның ерекшелік/і.
- •23.Newman_sort және оның ерекшеліктері.
- •24.Экстремальды қасиет/і бар бинарлы ағаштың арнайы ішкі класс/ы.
- •25.Бинарлы ағаштар қолданыстары және жалпылаулары.
- •26.Квадраттық xештеу.
- •27.Avl ағаштары.
- •28.Стек
- •29.Сызықты хештеу.
- •30.Қос хештеу.
18.Бинарлы ағашта кесте құру және оның ерекшеліктері.
Идентификатор кестесінде элементті іздеу арқылы уақыт қысқартуға болады,белгілі уақытты үлкетпей-ақ,оны толтыру керек болады.Ол үшін кесте ұйымдастырудан үзіліссіз массив туріндег ұймдастырудан бас тарту керек.
Кестені құру әдісі бар.Кесте бинарлық ағаш формасын көрсетеді.
Әрбір ағаш тетігі кесте элементін көрсетеді.Бірақ түбірі бірінші элемент болып табылады. Қарсы компиляторды күту кезіндегі кесте толтыру керек. Себебі жоғарғы бөлігі екі бұтақтан көп болады.Екі бұтақты айыру үшін сол және оң деп атаймыз.
Бинарлық ағаш алгоритмін толтыруды қарайық.Алгоритм кіру бағыты бойынша жұмыс істейді делік ,яғни, бойында идентификатор бар. Бірінші идентификаторды ағаштың басына орналастырамыз. Қалған идентификаторлар ағаштың басына келесідей орналастырамыз.
1.Идентификатордың кіру кезін таңдау.егер идентификатор жоқ болса,онда ағашты құру бітті деп есептеуге болады.
2.Ағаш тетігін жоғарғы түбір ретінде алу
3.Идентификатордың атын басқа ағашында тетігі бар мен салыстыру
4.Егер идентификатор аз болса онда келесі 5-қадамға бару керек.
5.Егер тетіктің сол жағы бар болса онда оны орнында қалдырып 3-қадамғы қайту керек болмаса 6-қадамға бару керек.
6.Кері жоғарлықты жасау керек.Оның ішіне идентификатор жайлы мәліметтер салу керек және оны жаңа жоғарлықтың сол жағыны орналастыру қажет.Сосын кері 1-қадамға оралу
7.егер тетіктің оң жағы болса,оны кері орнына әкеліп 3 –қадамға оралу керек.немесе 8 –қадамға бару керек.
8.Жаңа жоғарлықты жасау керек.оның ішіне идентификатор жайлы мәліметтерді салу қажет.Осыны оң жақ қылып жасап 1-қадамға кері оралу қажет.
Ағаштағы элементті іздеу ағашты толтыру алгоритмі секілді болады:
Ағымдық түйіншек ретінде ағаштың түбірлік шыңы.
Ағымдық ағаш туйіншегінде бар ізделетін идентификатор атайымен идентификатор атауын салыстыру
Егер атаулар сәйкес келсе ізделініп жатқан идентификатор табылады,алгоритм тоқтайды алайда 4 қадамға өту керек.
Егер келесә идентификатор атауы кіші болса 5-ші қадамға өтуге болады,әйтпесе 6-шы қадамға.
Егер ағымдық түйіншекте сол жақ шыңы болса, онда оны ағымдық түйіншік ретінде алып 2-ші қадамға қайтамыз, әйтпесе ізделінетін идентификатор табылмай алгоритм жалғаспайды.
Егер ағымдық түйіншекте оң жақ шыңы болса, онда оны ағымдық түйіншік ретінде алып 2-ші қадамға қайтамыз, әйтпесе ізделінетін идентификатор табылмай алгоритм жалғаспайды.
Суретте Ga, D1, M22, E, A12, BC, F идентификаторлары үшін бинарлы ағашты толтыру.
Мысалы, суретте көрсетілген А2 идентификаторы ағашта іздеу жасап корейік. Түбірлік шыңын алып GA және A12 идентификаторымен салыстырамыз. Ізделінген идентификатор кішірек ағымдағы түйіншек D1 сол шыңы болады. Идинтификаторларды қайтадан салыстырамыз. Ізделініп жатқан идентификатор кішірек ағымдағы түйіншек А12 сол шыңы болады. Келесі салыстыруларда ізделінетін идентификатор табылады. Егер жоқ идентификаторды іздейтін болсақ мысалы А11-ді , онда іздеу түбірлік шыңынан басталады. GA және A11 идентификаторын салыстырайық. Ізделіініп жатқан идентификатор кішірек ағымдағы түйіншек D1 сол шыңы болады. Идентификаторларды қайтадан салыстырамыз. Ізделінетін идентификатор кішірек бірақ А12 сол шыңы болмайды, сондықтан қазіргі ізделініп отырған идентификатор табылмайды. Айтылмыш әдістегі салыстыру саны идентификаторлар орналасуы мен ағаштың пішіміне байланысты болады.
Бұл әдісте екі кемшілік бар. Бірінішісі- идентификатор кестесіндегі жады көлемін тиімсіз пайдалану: идентификатор кесесіндегі массиф көлемі км болуы мүмкін. Екіншісі Хэш функцияның сәйкесін ғана қолдана алу.
19.Көпіршікті сұрыптауы (Bubble_sort) және оның ерекшелік/і.
Көпіршіктер
Таңдаумен сұрыптау алгоритмі
Қарастырылған сұрыптау алгоритмдері оқыту программаларына енгізілген ж/е сұрыптаудың бұл класының қарапайым нұсқасының күрделілігі O(n2). Кейбір таңдаумен реттеу алгоритм/ң күрделілігі O(n*log2n) болып табылады. Мысалы, пирамидалық сұрыптау алгоритмі. Таңдаумен сұрыптау алгоритімінің басты идеясы қарапайым процедураға негізделген: берілген x1,x2 ,.., xn массивтің элементтері ішінен максималды элемент таңдалып, осы элемент ең соңғы n-ші орынға орналастырылады. Арықарай қалған n-1 элементтен ең үлкені таңдалып, ең соңғы орынның алдындағы n-1 орынға орналастырылады. Осылай, процедура ары қарай жалғастырылады.
Алгоритмнің программалық нұсқасы қарапайым, бірнеше көмекші айнымалдар-индекстерден басқа тек қана бір қосымша жады ұяшығы (ұяшық) пайдаланылады.
Procedure A(a,n);
…
for m:=n down to 2 do
begin r:=a[1];k:=1;
for i:=2 to m do
if a[i]>r then begin r:=a[i];k:=i; end;
a[k]:=a[m];a[m]:=r;
end.
Бұл процедураның әрбір қадамында (сыртқы цикл m бойынша) массивтің қалған бөлігіндегі максималды элементті ғана емес, сонымен қатар оның нөмірін де сақтап отыру пайдалы екенін ескерген жөн.
Таңдаумен сұрыптау алгоритмінің келесі жиі қолданылатын нұсқасы массивті сұрыптауды бинарлық ағашпен байланыстырады. Бұл жағдайда ағаш бастапқы массив арқылы әдеттегідей құрылады. Ал реттелген массив ағаш бойымен симметриялы айналым жүргізілгенде байқалады.
Әдетте ағашты айналу ретінде ағаштың түйіндеріне атап шығу процедурасын айтады. Процедурада әр ағаш түйіні тек қана бір рет аталып өтеді.
Сонымен р1,р2,..,рп белгілер массиві болсын.Ағаш түбіріне 0-ші немесе 1-ші деңгейде р1 белгісін орнатып. Егер келесі р2 –ші элемент р1 –ден үлкен болса, онда р2 ағаштың оң жағына р1 –дің тікелей мұрагері болып орнатылады. Кері жағдайда,ағаштың сол жағына сол жақ тікелей мұрагер болып орнатылады. Сөйтіп, түбірдін тікелей мұрагерлері келесі деңгейге орналастырылады. Дәл осылай бастапқы массивтің қалған элементтерін санына тең. Мысал ретінде 25,31,7,4,10,18,5,13,21,11,9 бастапқы массиві берілетін, осы массивтің бинарлы ағашының суреті төменде көрсетілген.
Құрылған ағаш бинарлы іздеу ағашы деп аталады. Кездейсоқ ағаштың түйіні үшін сол жағында ағаштың келесі деңгейінде массивтің қарастырылып отырған ағаш түйініндегі элементінен кіші элемент орналастырылады, ал оң жағына үлкен элемент орналасады. Бинарлы іздеу ағашын сызықты – жақшалы әдіспен беруге болады, қарастырылған мысал үшін сызықты – жақшалы түрі мынадай:
(25(7(4(5)4)(10(9)(18(13(11)13)(21)18)10)7)(31)25)
Мұнда ағаштың сол жақ айналымдары көрсетілген.
Бинарлы іздеу –ағаштың тағы берілу жолы бұл кесте ретінде көрсету.Мұнда ағаштың со жақ немесе оң жақ түйіндері екенін ажырататын сілтемелер,сонымен бірге анықтық үшін кері сілтемелер енгізіледі.Қарастырылған мысал үшін кесте мынадай түрде болады:
Кесте1
N |
P1 |
ai1 |
Ai2 |
Ai3 |
Ai4 |
1 |
25 |
A1 |
3 |
2 |
0 |
2 |
31 |
A2 |
0 |
0 |
1 |
3 |
7 |
A3 |
4 |
5 |
1 |
4 |
4 |
A4 |
0 |
7 |
3 |
5 |
10 |
A5 |
11 |
6 |
3 |
6 |
18 |
A6 |
8 |
9 |
5 |
7 |
5 |
A7 |
0 |
0 |
4 |
8 |
13 |
A8 |
10 |
0 |
6 |
9 |
21 |
A9 |
0 |
0 |
6 |
10 |
11 |
A10 |
0 |
0 |
8 |
11 |
9 |
A11 |
0 |
0 |
5 |
«Орташалар» алғанда бинарлы іздеу ағашын құру күрделілігі 1.39*n*log2n, ал «жаман» жағдайын ескерсек, онда О(n2) салыстырулар санына тең болады. N түйіннен тұратын бинарлы іздеу ағашында іздеу жүргізу үшін салыстырулар саны орташа жағдайда 1.39*log2n жақын, ал жаман жағдайда –n.
Элементті кірістірумен сұрыптау алгоритмі.
Бастапқы массивтің элементтері кездейсоқ ретпен бір-бірден пайда болсын. Жад ұяшық/нда олар реттеліп жинақталуы мүмкін.
Бұл идеяны жүзеге асыру күрделі емес. Әрбір келесі элементтің орнын анықтау үшін массивтің жасақталып жатқан бөлігінің әрбір элементімен салыстырып, егер ол бос емес болса, онда оны белгіленген орнына орналастыруға шара қолдану қажт. Бұл идеяны қолданатын алгоритмнің күрделілігі кез келген жағдайда O(n2) жақын болады. Жалпы алгоритмнің күрделілігін жақсартуға болады. Ол үшін бұл процедураның жетілдірілген нұсқасын қарастырамыз. Бұл жағдайда ағымдық элементтің көмекші массивтегі орнын анықтауға бинарлы іздеу ағаш алгоритмін қолданады. Яғни жетілдірілген процедура өлшемі бастапқы массивпен тең көмекші массив қолданылады.
Қарапайым ақпарат іздеу есебін түсіндірсек, бастапқы массив ретінде екі өлшемді массив ᾳ [ 1…,n,1,…,2]тағайындайық. Бірінші бағанасы элементтердің белгілері болсын, екінші бағана элементтердің өздері болсын. Көмекші массив ретінде бастапқы массив өлшеміне тең массив тағайындайық. Алгоритмнің жұмысын индуктивті жүреді.Бірінші қадамда ᾳ массивінің бірінші элементі қосымша b массивінің бірінші орнына ие болады. K-1 қадамда а массивінің элементтері b массивінде к-1 элементі орналасады, әрі b массивінің белгілер бағанындағы элементтер өспелі реттелген болады. К –ші қадамда а массивінің к-ші элементінің қосымша массивтегі орны бинарлы іздеу ағашы алгоритмімен анықталады. Егер анықталған орын бос емес болып қалса, онда массивтің элементтері оң жаққа бір орын жылжып, босаған орынға а массивінің к-ші элементі қойылады.
Алгоритмнің
жұмысы кезінде салыстыру саны жалпы
алғанда
жақын болады. Бұл бағалау n үлкен мәндері
үшін реттеудегі n*log2n
слыстыру санының төменнен бағасына
жақын болады. Салыстыру санына қарай
қарастырылған алгоритм эффективті
болып саналыд, алайда b массивінің қалдық
бөлігін ұдайы ығыстыру қажеттігі оның
тиімділігін едәуір төмендетеді. Бұл
тәсілмен массивті реттеу үшін алмастырулар
саны орташалап санағанда
жақын болады.
