Uploaded by Agabek Husinov

30

advertisement
Kruskal algoritmi. Prima algoritmi. Xoffman
daraxtlari
Kruskal algoritmi
Og'irligi bor yo'naltirilmagan graf berilgan. Ushbu grafning barcha uchlarini birbiriga bog'laydigan va shu bilan birga barcha mumkin bo'lganlarning eng kichik
og'irligiga (ya'ni chekka og'irliklar yig'indisiga) ega bo'lgan shunday qoldiq
daraxtini topish talab qilinadi. Bunday qoldiq daraxt minimal kenglikdagi daraxt
yoki oddiy minimal kenglikdagi daraxt deb ataladi.
Bu yerda biz minimal kenglikdagi daraxtlar bilan bog'liq bir nechta muhim
faktlarni ko'rib chiqamiz, keyin biz Kruskal algoritmini eng oddiy amalga
oshirishda ko'rib chiqamiz.
Minimal oraliq xususiyatlar
Agar barcha qirralarning og'irligi har xil bo'lsa, minimal oraliq daraxt noyobdir.
Aks holda, bir nechta minimal oraliqlar bo'lishi mumkin (konkret algoritmlar
odatda mumkin bo'lgan oraliqlardan biri bilan yakunlanadi).
TAVSIF
• Kruskal algoritmi. Ushbu algoritm 1956 yilda Kruskal tomonidan
tasvirlangan.
• Kruskal algoritmi dastlab har bir cho‘qqini o‘z daraxtiga joylashtiradi,
so‘ngra bu daraxtlarni asta-sekin birlashtirib, har bir iteratsiyada
qaysidir chekkada ikkita ma’lum daraxtni birlashtiradi. Algoritmni
boshlashdan oldin barcha qirralar og'irlik bo'yicha (kamaymaslik
tartibida) saralanadi. Keyin birlashtirish jarayoni boshlanadi: barcha
qirralar birinchisidan oxirgisiga (tartib tartibida) o'tkaziladi va agar
joriy chekkaning uchlari turli pastki daraxtlarga tegishli bo'lsa, u holda
bu pastki daraxtlar birlashtiriladi va javobga chekka qo'shiladi. Barcha
qirralarni sanab o'tish oxirida barcha uchlar bir xil pastki daraxtga
tegishli bo'ladi va javob topiladi.
Prima algoritmi
• Minimal kenglikdagi daraxt. Prim algoritmi n ta uchi va m qirrasi
boʻlgan ogʻirlikdagi yoʻnaltirilmagan G graf berilgan. Ushbu grafikning
barcha uchlarini bog'laydigan va shu bilan birga eng kichik vaznga
(ya'ni qirra og'irliklarining yig'indisi) ega bo'lgan pastki daraxtini topish
talab qilinadi. Pastki daraxt - bu barcha cho'qqilarni bog'laydigan
qirralarning to'plami va istalgan uchdan boshqasiga aniq bitta oddiy
yo'l bilan kirishingiz mumkin.
•
• Bunday pastki daraxt minimal kenglikdagi daraxt yoki oddiygina
minimal kenglikdagi daraxt deb ataladi. Har qanday grafda n-1
qirralari bo'lishini tushunish oson.
Prim algoritmi
• Bu algoritm 1957 yilda ushbu algoritmni kashf etgan amerikalik
matematik Robert Prim sharafiga nomlangan. Biroq, 1930 yilda bu
algoritmni chex matematigi Voytex Yarnik kashf etgan. Bundan
tashqari, Edsger Dijkstra ham 1959 yilda ulardan mustaqil ravishda
ushbu algoritmni ixtiro qilgan.
Algoritmning tavsifi
• Algoritmning o'zi juda oddiy. Kerakli minimal skelet, bir vaqtning o'zida qirralarni
qo'shib, asta-sekin quriladi. Dastlab, skelet bitta vertexdan iborat deb taxmin
qilinadi (u ixtiyoriy tanlanishi mumkin). Keyin, ushbu uchdan chiqadigan minimal
og'irlik qirrasi tanlanadi va minimal oraliq daraxtga qo'shiladi. Shundan so'ng,
skelet allaqachon ikkita cho'qqini o'z ichiga oladi va endi minimal og'irlikning
chekkasi qidiriladi va qo'shiladi, bir uchi tanlangan ikkita cho'qqidan birida,
ikkinchisi esa aksincha, bu ikkitadan tashqari qolganlarida. Va hokazo, ya'ni. har
safar minimal og'irlik qirrasi qidiriladi, uning bir uchi allaqachon skeletga olingan
uchdir, ikkinchi uchi esa hali olinmagan va bu chekka skeletga qo'shiladi (agar bir
nechta bunday qirralar bo'lsa, siz istalganini oling). Ushbu jarayon kengaytma
daraxti barcha uchlarini (yoki ekvivalenti, n-1 qirralarini) o'z ichiga olguncha
takrorlanadi.
•
• Natijada, minimal bo'lgan skelet quriladi. Agar grafik dastlab ulanmagan bo'lsa, u
holda hech qanday kengaytmali daraxt topilmaydi (tanlangan qirralarning soni n-1
dan kam bo'lib qoladi).
Algoritmning ishlash vaqti, asosan, mos qirralar orasidan
keyingi minimal qirrani qanday izlashimizga bog'liq. Turli
xil asimptotiklarga va turli xil ilovalarga olib keladigan
turli yondashuvlar bo'lishi mumkin.
amalga oshirish: O(nm) va O(n2 + m log n) algoritmlari
Agar har safar biz barcha mumkin bo'lgan variantlarni
ko’rish orqali qirra izlasak, unda barcha mumkin
bo'lganlar orasida eng kichik og'irlikdagi qirrani topish
uchun asimptotik ravishda O(m) qirralarni ko’rish kerak
bo'ladi. Bu holda algoritmning umumiy asimptotikasi
O(nm) bo'ladi, bu eng yomon holatda O(n^3) bo'ladi, bu
juda sekin algoritmdir.
Xoffman daraxti
• Elektron axborotlarni samarali kodlash bo'yicha dastlabki algoritm
Xafman XX asr o'rtalarida, ya'ni 1952 yilda taklif qilingan koddir.
Ma'lumotni qisqartirish uchun yaratilgan ko'pgina dasturlarning asosiy
asosiy elementi hisoblanadi. Hozirgi vaqtda bu kodni ishlatadigan eng
ommabop manbalardan biri ZIP, ARJ, RAR arxivlari va boshqalar.
xoffman
Download