KRASKAL ALGORITMI
“KRASKAL ALGORITMI” MAVZUSIDA TAYYORLAGAN Mundarija Kirish. ............................................................................................................................................................................. 2 Kraskal algoritmi. ............................................................................................................................................................ 3 Kraskal algoritmining tavsifi. ......................................................................................................................................... 7 Algoritmning psevdokodi. ............................................................................................................................................ 16 Kraskalning minimal kengayuvchi daraxt algoritmi. .................................................................................................... 20 Algoritmning amaliy qismi. .......................................................................................................................................... 28 Kraskal algoritmining murakkabligi. ............................................................................................................................ 35 Xulosa. .......................................................................................................................................................................... 40 Foydanilgan adabiyotlar. ............................................................................................................................................... 41 1
Kirish. Kurs ishining o’rganish ob’ekti Kraskal algoritmini amalga oshirish edi. Ishning maqsadlari quyidagilar edi: 1)kraskal algoritmi, uning tarixi bilan tanishish; 2)minimal kenglikdagi daraxtni qurish algoritmini amalga oshirish; 3)algoritmning murakkabligini tahlil qilish; 4)algoritmni sinash. Bog’langan vaznli grafning minimal oraliq daraxti (MOD) uning bog’langan pastki grafigi bo’lib, u asl daraxtning barcha uchlari va uning ba’zi qirralaridan iborat bo’lib, qirralarning og’irliklarining yig’indisi maksimal mumkin. Agar asl graf uzilgan bo’lsa, unda quyida tavsiflangan protsedura uning har bir ulangan komponentiga navbat bilan qo’llanilishi mumkin va shu bilan ushbu komponentlar uchun minimal oraliq daraxtlarni olish mumkin. Kraskal algoritmi (yoki Kraskal algoritmi) vaznli bog langan yo naltirilmagan graf uchun minimal oraliqli daraxtniʻ ʻ qurish algoritmidir. Algoritm birinchi marta 1956 yilda Jozef Kraskal tomonidan tasvirlangan. Kraskal algoritmi bir vaqtning o’zida bir nechta bog’langan komponentlar uchun daraxt qurishi mumkin, ular hal qilish jarayonida bitta bog’langan daraxtga birlashtiriladi. To’liq graf qirralarning ro’yxati bilan berilgan. Yugurishdan oldin qirralarning ro’yxati uzunlik bo’yicha o’sish tartibida tartiblanadi. Har bir bosqichda qirralarning ro’yxati ko’rib chiqiladi, oldingi bosqichdagi yechimga kiritilganidan keyingi qirraidan boshlab, eritma ichiga kiritilgan qirralar bilan sikl hosil qilmaydigan qirra pastki daraxtga qo’shiladi. qurilish ishlari olib borilmoqda. Daraxtning minimal uzunligini topish muammosi ko’pincha shunga o’xshash sharoitda yuzaga keladi: n ta shahar bor, ular orqali siz istalgan shahardan boshqasiga (to’g’ridan-to’g’ri yoki boshqa shaharlar orqali) borishingiz mumkin bo’lgan marshrutni yotqizishingiz mumkin. Yo’l haqi maksimal bo’lishi uchun shunday marshrutni topish talab qilinadi. Amalda Kraskal 2
algoritmi aviakompaniyalar tomonidan bir yo’nalishdan ikkinchisiga eng qisqa havo yo’lini topishda qo’llaniladi. Kraskal algoritmi. Kraskal algoritmi bog’langan vaznli graf uchun minimal oraliq daraxtini topish uchun ishlatiladi. Algoritmning asosiy maqsadi biz grafning har bir tugunini kesib o’tishimiz mumkin bo’lgan qirralarning pastki to’plamini topishdir. U global optimalga e’tibor qaratish o’rniga har bir bosqichda optimal echim topadigan greedy yondashuvga amal qiladi. Kraskal algoritmi bu grafning MODni topish uchun boshqa mantiqdan foydalanadigan yana bir mashhur minimal oraliqli daraxt algoritmi. Kraskal algoritmi tugundan boshlash o’rniga, barcha qirralarni past og’irlikdan yuqoriga saralaydi va siklni yaratadigan qirralarga e’tibor bermasdan, eng past qirralarni qo’shishda davom etadi. Kraskal algoritmi dastlab har bir tugunni o’z daraxtiga joylashtiradi, so’ngra bu daraxtlarni asta-sekin birlashtirib, har bir iteratsiyada qaysidir qirrada ikkita ma’lum daraxtni birlashtiradi. Algoritmni boshlashdan oldin barcha qirralarning vazni bo’yicha (kamaymaslik tartibida) tartiblanadi. Keyin birlashtirish jarayoni boshlanadi: barcha qirralar birinchisidan oxirgisiga (tartib tartibida) o’tkaziladi va agar joriy qirraning uchlari turli pastki daraxtlarga tegishli bo’lsa, u holda bu pastki daraxtlar birlashtiriladi va javobga qirra qo’shiladi. Barcha qirralarni sanab o’tish oxirida barcha tugunliklar bir xil pastki daraxtga tegishli bo’ladi va javob topiladi. Bizda quyidagi yo’naltirilmagan vaznli graf mavjud, grafning barcha tugunlarini o’z ichiga olgan pastki graf, ya’ni daraxt bo’lgan kengaytmali daraxt deb ataymiz va vazifa - qirralarining yig’indisi minimal bo’lgan bunday kengaygan daraxtni topishdir. Asl grafni qirralarsiz tasavvur qiling, endi siz barcha tugunlarni qandaydir tarzda bir-biriga bog’lashingiz kerak, shunda siz istalgan tugundan ikkinchisiga 3
o’tishingiz mumkin, natijada olingan grafda kiritilgan qirralarning og’irliklarining minimal mumkin bo’lgan yig’indisi bilan sikllarsiz ishlaydi. Ushbu algoritmning ishlash mexanizmi juda oddiy. Kirish qismida bo’sh subgraf mavjud bo’lib, biz uni potentsial minimal kenglikdagi daraxtga yakunlaymiz. Biz faqat bog’langan graflarni ko’rib chiqamiz, aks holda Kraskal algoritmini qo’llashda biz minimal kenglikdagi daraxtni emas, balki oddiygina o’rmonni olamiz. Birinchidan, biz qirralarni og’irliklari bo’yicha kamaymaydigan tartibda saralaymiz. Biz subgrafimizga qirra qo’shamiz i- ое , agar bu qirra ikki xil bog’langan komponentni bog’lasa, ulardan biri bizning subgrafimizdir. Ya’ni, har bir qadamda minimal og’irlik qirrasi qo’shiladi, uning bir uchi bizning subgrafimizda mavjud, ikkinchisi esa hali yo’q. Algoritm o’z ishini subgrafimizning tugunlari to’plami asl grafning tugunlari to’plamiga to’g’ri kelgandan keyin yakunlaydi. Ushbu algoritm greedy deb ataladi, chunki har bir qadamda biz umuman optimal yechimga olib keladigan eng yaxshi variantni topishga harakat qilamiz. Muayyan misolni bosqichma-bosqich tahlil qilish. Quyda keltirilgan grafdan biz uning barcha qirralarini tartiblangan tartibda yozamiz, va biz ushbu qirralarni ro’yxatdagi skeletimizga qo’shishni boshlaymiz: 1) D <--> B; w = 2 2) D <--> C; w = 6 4
3) A <--> B; w = 7 4) A <--> C; w = 8 5) C <--> E; w = 9 6) D <--> F; w = 9 7) F <--> E; w = 10 8) B <--> C; w = 11 9) D <--> E; w = 11 1-qirra qo’shgandan keyin pastki chiziq 2 va 3 qirralarni qo’shgandan so’ng subgraph A <--> C Ko’rib turganingizdek, bizning kengaygan daraxtimizga qirra qo’shsangiz, sikl hosil bo’ladi, shuning uchun biz bu qirrani o’tkazib yuboramiz. Natijada, bizda quyidagi subgraf bor va siz sezganingizdek, biz barcha tugunlarni qirralar bilan minimal mumkin bo’lgan og’irliklar bilan birlashtirdik, ya’ni biz asl grafmiz uchun minimal oraliq daraxtini topdik. 5