Пирамидалық сұрыптау
Массивті пирамидаға түрлендіру.
А(0)-ді тізбетеп жоққа шығару және оны А(n-1), А(n-2) т.с.с А(1)-ге дейін қосу. Пирамидалық сұрыптау процесінде кезекті ең кіші элементтер өшіріліп отырады да, тізбекті түрде массивтің соңғы жағына орналасады. Осылайша, кему реті бойынша сұрыпта жүргізіледі. Мысал: А(5)=(50,20,75,35,25).
Мысалға А(5)=(50,20,75,35,25)
1. 20-ны өшіріп, А(4)-ке сақтаймыз:
2. 25-ті өшіріп, А(3)-ке қоямыз:
3. 35-ті өшіріп, А(2)-ге қоямыз:
4. 50-ді өшіріп, А(1)-ге қоямыз:
Сонымен, түбірі ғана қалғандықтан, массив сұрыпталды.
Есептеу тиімділігі.
n элементтен тұратын массив тереңдігі k=log2n болатын аяқталған бинарлық тармаққа сәйкес келеді. Массивті пирамидаға түрлендіру n/2 операциядан тұрады. Олардың әрқйсысы k салыстырудан артық салыстыруды қажет етпейді. Сұрыптаудың екінші фазасы n-1 операциясын қажет етеді. Олардың әрқайсысы k салыстырудан тұрады. Пирамидалық сұрыптаудың ең жаман жағдайдағы күрделілігі k*n/2+k*(n-1)=((3n/2)-1) log2n тең болады. Алгоритмнің күрделілігі мынадай ретке тең: O(n log2n).
Пирамидалық сұрыптау қосымша жадыны қажет етпейді. Ал мысалға турнирлық сұрыптауға қосымша жаңа массив жасалу қажет.
Дәріс 15.
Балансталған тармақтар. Графтар.
Мақсаты: Балансталған тармақтар ұғымын енгізу. AVL тармақтары, балансталған тармақтарға қосу, алып тастау әрекеттерін түсіндіру. Графтар. Негізгі ұғымдары мен анықтамаларын беру. Көршілестік матрицасы, инцидиенттік матрицасы түсініктері.
Негізгі ұғымдар. Бинарлық тармақтар алпы мәліметтерге қол жеткізуге арналған. Идеалды яғни ең жақсы жағдайда тармақ балансталған болады және реттілік биіктігі O(nlog2n)-ға тең болады. Алайда, кейбір мәліметтер үшін тармақ туындаған болуы мүмкін. Онда оның биіктігі O(n)-ға тең болады және мәліметтерге кіру әжептәуір ақырындайды.
Тармақ балансталған болады сонда тек сонда ғана егер әрбір түйін үшін оның екі бұтағының биіктігі бір-бірінен бірге ғана айырмашылығы болса. Балансталған тармақтарды AVL тармақтар деп атайды (Ойлап тапқандардың фамилиялары бойынша – Адельсон-Венский-Ландис).
Іздеудің бинарлық тармағы:
AVL тармақтар берілуі іздеудің бинарлық тармағына ұқсас болады. Барлық операциялар ұқсас тек қана тармаққа қою және тармақтан алып тастау операциялары өзгеше. Сол жақ және оң жақ бұтақтың арақатынасы туралы ақпаратты сақтау үшін түйіннің типі анықтамасына ө р і с қосылады. Ол өріс сол жақ және оң жақ бұтақтың айырмасын көрсететін баланстық көрсеткіш. Егер баланс –1-ге тең болса, онда түйіннің сол жағы басады. Себебі, сол жақ бұтақтың биіктігі көп. Ал, баланс оң болса, онда түйін оңға қарай тартады. Жалпы биіктігі бойынша балансталған тармақ баланс -1-ге тең болады. Ал AVL тармақтары [-1;1] араларында тербеледі.
Балансталған тармаққа қосу
AVL тармақтардың артықшылығы сәйкес қосу және алып тастау алгоритмдермен қамтамасыз етілген олардың баланстылығында болады. Элемент қосу іздеудің бинарлық тармағына ұқсас. Яғни, сол жақ және оң жақ ұрпақтары бойынша рекурсивті түсу жүргізіледі. Бос бұтақ кезіккенше жүргізіледі. Одан кейін осы жерде жаңа түйінді қосу жүзеге асды.
Тармақта кілт жоқ болғанша іздеу жолымен жүре беру.
Жаңа түйін қосу және баланыстылықтың жаңа көрсеткішін анықтау.
Іздеу жолымен қайтадан жүру және әрбір түйін үшін баланстылық көрсеткішін тексеру.
Үш жағдай болуы мүмкін. Алғашқы екеуінде түйін баланстылықты сақтайды. Бұтақтар реоргинизациясы қажет емес. Тек қана берілген түйіннің баланстылық көрсеткішін корректілеу керек. Үшінші жағдайда тармақты қайта баланстау түйіннің бірлік немесе екілік айналымын қажет етеді.
1-жағдай. Іздеу бағытындағы түйін басынан бастап балансталған деп есептейміз. Яғни балнс 0-ге тең. Бұтаққа жаңа элементті қосқаннан кейі, түйін қосу қай жақ бұтаққа жүргізілгеніне байланысты солға немесе оңға тарта бастайды. Егер элемент сол жақ бұтаққа қосылған болса, онда баланстық көрсеткіш -1-ге тең, ал оң жақ бұтаққа қосылған болса, баланстық көрсеткіші +1-ге тең болады.
Осы балансталған тармаққа 55 деген түйінді қосамыз:
2-жағдай. Түйіннің бұтағының біреуінің бір жағы басым және жаңа элемент жеңіл бұтаққа қосылады да, түйін балансталған болып өзгереді.
55 түйінін қосқаннан кейін:
3-жағдай. Түйіннің бұтақтарының бір жағы басым, жаңа элемент неғұрлым ауыр жағына қосылады. Ал олай болса, баланстылық шарты бұзылады. Себебі, баланс [1;1] шегінен аспуы тиіс. Ал тепе-теңдікті сақтау үшін бұрылыс жасау қажет.
Графтар
Граф дегеніміз – G= жұбы. Мұндағы V-төбелердің құр емес жиыны. E - қабырғалар жиыны. Яғни, төбелер жұбы немесе қабырғалары жиыны деп аталатын мәліметтер элементтері жиынынан тұрады. Төбелер қалаларды көрсететін болса, қабырғалар арасындағы жолдарды көрсетеді.
1250 900
450
Егер е жұптары реттелмеген болса, яғни жолдардағы қозғалыс екі бағытта да жүретін болса, онда граф бағдарланбаған әйтпесе бағдарланған деп аталады. Егер қабырғалардың бір бөлігі бағытталған немесе бағдарланған болса, мұндай графтар аралас графтар деп аталады.
V1, V2, ..., Vn төбелерінің тізімі жол деп аталады. Мұндағы барлық i үшін 1<=i<=n, Vi,Vi+1 қабырғалары болады.
Бағдарланған графта V1, V2, ..., Vn төбелердің тізімі.
V1V2, V2 V3,...,Vn-1 Vn бағытталған доға түрінде болады. Графтардағы жол қарапайым деп аталады, егер графтардың төбелері әртүрлі болса. Жолдың ұзындығы осы жолды құрайтын қабырғалардың санына тең болса.
Vi және Vj төбелері байланған деп аталады егер, осы төбелер үшін Vi+1,Vi+2,.., Vj жолы бар болса. Граф байланысшы граф деп аталады егер, оның кез келген төбелер жұптары үшін оларды қосатын қарапайым жол болса.
Цикл дегеніміз - ұзындығы бірден кем болмайтын бір төбеден басталып сол төбеден аяқталатын қарапайым жол.
Графтардағы тармақ дегеніміз – бұл циклсыз графтар. Графтар өлшенген деп аталады егер, графтың әрбір қабырғасына мәні немесе салмағы жазылса.
Мысалға, салмақ ретінде қалалардың арасындағы арақашықтық немесе қандай да бір жұмыстың жүргізілу уақыты алынады.
Графтарды берудің келесідей әдістері бар:
Инцидиенттік матрицасы.
Көршілестік матрицасы.
Салмақтық матрицасы.
Қабырғалар тізімі.
Көршілестік тізімі.
Қандай да бір нақтылы есепті шығару үшін қолдану қолайлылығына қарай осы әдістердің кез келгенін пайдалануға болады.
Инцидиенттік матрицасы дегеніміз – размері nm болатын матрица. Мұндағы n-төбелер саны, m-қабырғалар саны. Бағытталған граф үшін х,у қабырғаларына сәйкес келетін баған, у төбесіне сәйкес келетін жолда 1 болады. Ал х төбесіне сәйкес келетін жолда -1 болады, қалған жолдарда 0 болады. Тұзақ жағдайында басқа сан берілуі мүмкін. Яғни, хх болғанда 2 деген сан беріледі. Мысалы,
1 2 4 5
3 6
граф берілген, оның инцидиентті матрицасын жазамыз:
(1,2) (1,3) (3,2) (3,4) (5,4) (5,6) (6,5)
Бағытталған граф үшін х,у қабырғасына сәйкес келетін баған х,у төбесіне сәйкес келетін жолда 1 болады да, қалған жолдарда 0 болады.
2 4
1 6
5
(1,2)(1,3)(1,5)(2,3)(2,5)(3,4)(4,5)(4,6)(5,6)
Графты инцидиентті матрица арқылы беру үшін nМ элемент қажет болады және олардың көбі 0 болады. Инцидиентті матрица ЭЕМ-ға енгізу мен өңдеуге қиын. Сондай-ақ ол қабырғалар туралы тура ақпарат бермейді. Х,у қабырғасы бар ма деген сұраққа жауап беру үшін барлық бағандарды қарап шығу қажет.
Достарыңызбен бөлісу: |