Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
esepter&teoria.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
13.77 Mб
Скачать

13.Іздеу бинарлы ағашынан элементті жою

Сонымен іздеу бинарлы ағашынан эл.тті жою операциясын орындау үшін аз шығынмен орындалатын осы операция орындалғаннан кейінгі алдыңғы объект граф іздеу бинарлы ағашы болып қалуы к/к. Мұнда 3 жағдай болады. Қарапайымнан бастайық. Егер жойылатын эл.т ағаш түйіні ақырғы төбе болса, онда ол жай ғана жойылады ж/е мұнда ағашты ары қарай түзету к/к болмайды. Егер жойылатын түйіннің тек бір ғана тікелей ұрпағы бар болса, онда жойылған элементорнына тікелей ұрпағы жылжытылады. Әрі бұл кезде осы жылжытылған элемент түбір болып саналатын ішкі ағашта геометриялық жылжиды, бұл кезде осы ішкі ағаш ішіндегі сілтеме/ өзгеріссіз қалады,сондықтан бұл операцияны стандартты кодта орындауда ыңғайлылық танытады.

Сонымен бинарлы іздеу бинарлы ағашынан элементтерді жою үшін берілген операциядан кейін пайда болған объект граф бинарлы іздеу ағашы болатынын анықтау керек. Мұнда 3 жағдай болады. Қарапайымнан бастайық. Егер жойылатын эл.т ағаш түйіні ақырғы төбе болса, онда ол еш қиындықсыз жойыла береді н/е мұнда ағашқа ешқандай коррекция талап етілмейді,тек жойылатын түйіннің тікелей тегінің сәйкест өрісіне nill жазылуынан басқа,

2.1-сурет

Егер жойылатын түйіннің (мысалы N8 түйін 13 мәнімен тек бір тікелей ұрпағы болса,онда ол ұрпақ жойылатын түйіннің орнына көшіріледі. Геом.қ тұрғыдан алғанда мұнда түбірі көшірілетін элемент болатын ішкі ағаш та көшіріледі,бірақ ішкі ағаш/ң ішінде сілтеме/ ешбір өзгеріссіз қлады. Осы ерекшелік бұл операцияны стандарттық кодтаумен жүргізуде өте ыңғайлы болады.

2.2-сурет

Енді соңғы жағдай қалды,яғни жойылатын элементтің екі тікелей ұрпағы бар.Бұл жағдайда жойылатын эл.ттің оң жақ тікелей ұрпақ/ң ұрпақ/ы арасында ең кіші мәнімен түйін эл.т табу к/к ж/е оны жойылатын эл.ттің орнына ауыстыру к/к.(2.2 сурет)

2.3-сурет

Тура осылай жойылатын элементтің сол жақ тікелей ұрпақ/ң ұрпақ/ы арасында максималды мәнімен элемент табуға ж/е оны жойылатын эл.ттің орнына ауыстыруға болады.(2.3-сурет)

2.4-сурет

Басқа сөзбен айтқанда егер жойылатын V элементтің өзі түбірі болатын екі ағаштары бар болса,онда оның ұрпағы V' немесе алдыңғы тегі V’’ симметриялы ретті айналымда жойылатын элементтің орнын басу керек.Сонымен қатар V түйінін V’ түйініне ауыстыру кезінде V’ түйінінің оң жақ тікелей ұрпағы V’ түйінінің орнын басады.Сәйкесінше V’ түйінін V’’ түйініне ауыстырғанда да ұрпақ түйін орнын басады.

14.O(n log2n) күрделілігімен сұрыптау.

Қарастырылатын алгоритм таңдаумен сұрыптау алгоритмдері классына жатады. Бірақ бұл алгоритмнің өзінің ерекше қасиеттері бар. Біріншіден, бастапқы массив бинарлы ағашпен беріледі. Бұл бинарлы ағаш құрылысы жағынан ерекшеленіп келеді, ондай ағаштарды толықтау бинарлы ағаштар деп атайды. Реттеу процессі екі этаптан тұрады. Бірінші этапта пирамида тәріздес ағаш түзіледі. Екінші этапта құрылған ағаш пирамидасында түйіндеріне бекітілген массив элементтері түпкілікті реттеуге пайдаланылады. Бұл этапта пирамиданың элементтерін реттеу бағыты пирамиданың оң жағынан солға қарай, төменнен жоғарыға қарай қажет болған жағдайда алмастырылады. Екінші этап бірнеше фазадан тұрады. Бірінші фазада массивтің реттелмеген бөлігіндегі ағымдық максималды элемент пирамиданың төменгі оң бұрышында орналасқан элементпен алмастырылады. Сөйтіп, ағымдық максималды элемент реттелген массивте өзінің орнын табады. Осыдан кейін бұл максималды элемент те,оның орны да реттеуде қарастырылмайды. Екінші этаптың бірінші фазасының нәтижесінде пирамиданың құрылысы қайтадан құрылады.

Флойдтың модификациясының тиімділінін келесі қасиетпен анықталуы мүмкін :бастапқы массив сырт көзге сәйкес конфигурациялы пирамидағы тәріздес ағашпен берілгендіктен, ұтымды стратегияда бұл пирамиданы қажеттіге дейін түзу жеңілірек болуы мүмкін. Мысалы, кейбір төбелер берілген пирамидада кездейсоқ өздерінің түпкілікті орындарында орналасуы мүмкін. Heap.Sort алгоритмінің тағы бір ерекшелігі алгоритмнің күрделілігі өзгермейтіндігінде. Жаман жағдайда немесе орташа алғанда да күрделілігі 0(n log2n) тең. Жоғарыдан бағасы орташаға жақын екенін дәлелдеуге болады. Бірақ дәл бағасын есептеу күрделі нәрсе. Екінші қызықты ерекшелігі бұл сұрыптауды жүргізуге қажетті қосымша жадтың минималдығында.

Стек. Алдын ала ескерсек, стек деректер құрылымы, кейбір жағдайлар магазин, динамикалық жадыны деп аталады. Осындай стек алдында тізбектеліп орналасқан шексіз «стек басы» және «түбі» ерекше ажыратылады. Процестің кезкелген уақыт мезетінде тек тек басына ғана оқу немесе жазу мүмкін болады. Осыған орай процесс барысында не өсіп немесе кеміп отырады. Еске салсақ, стек реттелген ұяшықтардан құралңан жады. Егер стек тізім ретінде ұйымдастырылса да, оны тізбектелген тізім ретінде көрсету жеңіл болып келеді.

Стек арқылы постфикстік түрдегі арифметикалық өрнекті есептеу алгоритмі қарапайым болып келеді.

Егер өрнектің кезекті символы операнд болса, онда оны стек басына келтіреміз.

Егер өрнектің келесі символы операция болса, онда стек басына келтіреміз. Операция операндылары осы уақыт мезетіне дейін стек операция белгісі орналасқан «этаждан» төмен «этаждарға» орналасады. Келесі қадамда операцияны орындап, орындалған операцияны және операндтарды стектен өшіреміз. Алынған нәтижені ең төменгі операндтар орналасқан «этажға» енгіземіз.

Өрнекте символдардың аяғына жеткенде есептеу тоқталады.

Процесс кезінде стекке операцияны жазу қажеттілігі болмағанда ескеріп кету қажет. Стекті арифметикалық өрнекті есептеу қолданғанда өрнекті инфикстік түрде де есептеуге болады. Бірақ бұл жағдайда өзінің ерекшеліктері бар. Қарастырылған мысалдарда арифметикалық командалар стекті жұмыс жадысы ретінде қолдануға болатынын байқалады. Бұл жағдайда стектен операндтарды шығарып арифметикалық операцияның нәтижесін қайтадан стекке орната алады. Жадының осындай ұйымдастыру қағидасы микропрограммалық деңгей өзінің қолданысын табуда. Мысалы, JVM машинасында стек операнды машина болып табылады. Стектің классикалық қолданысы рекурсиялар, яғни рекурсиялық процедураларды ұйымдастыруда қолданылады. Стек қайтаруларды қамтамасыз етіп, локальді айнымалыларды сақтап отырады. Осы мәселені QuickSort прцедурасын қарастырғанда байқаған болатынбыз. Өзінің денесінде басқа процедураларға сілтеме бар процедураларды орындауда стекті қолданады. Мысалы, Р1 прцедура денесінде Р2 процедураға сілтеме жасасын, ал ол өз денесінде Р3 процедурасында сілтеме жасасын. Стек бұл жағдайда процедура өзінің ішкі процедурасына сілтеме кезінде ағымдық орналасып жатқан процедураның локальді айнымалылардың мәндерін сақтай алады. Және стек процедуралардың қайта оралу жерін сақтап отырады. Жалпы айтқанда блокталған немесе рекурсивті программа құрылысы тән программалау тілдерінде жазылған программаларды орындауда стекті қолдану ыңғайлы құрал болып табылады. Грамматикалық талдауға арналған көптеген алгоритмдер стектік автоматтар негізінде орналасады. Осындай автоматтар трансляция кезінде программаның синтаксистік талдауын қамтамассыздандырады.

Quick Sort сұрыптауы. A.Hoar ұсынған шапшаң сұрыптау алгоритмі. Quick Sort алгоритмінің күрделілігі орташалап алғанда 0(n log2n) жақын болады. Quick Sort алгоритмінің идеясына тоқталайық. Бастапқы берілген массивтің қандай да бір элементі таңдалып бекітіледі, әдетте массивтің ортаңғы немесе шеткі элементтерін таңдайды және тіректік элемент деп атайды. Қалған массив элементтерін осы тіректік элементпен кезекпен салыстырады. Салыстыру нәтижесинде кезекті элемент тіректік элементтен үлкен болса, онда оны тіректікэлементтің оң жағына орналастырады. Кері жағдайда сол жағына алмасады. Осы тіректік элемент массивтің қалған барлық элементтерімен салыстырылғаннан кейін өзінің массивтегі түпкілікті орнын анықтайды. Сөйтіп, бұл элемент жаңа массивтегі орнына жайғасып массивті екіге бөледі.

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