Kruskal algoritmi



Download 262,91 Kb.
Sana29.05.2022
Hajmi262,91 Kb.
#616827
Bog'liq
Kruskal algoritmi


Kruskal algoritmi
Daraxt , Algoritm , Daraxt
Kruskal algoritmi - bu grafikni kirish sifatida qabul qiluvchi va har bir cho'qqisini o'z ichiga olgan daraxtni tashkil etuvchi, shuningdek, barcha daraxtlar orasidagi minimal og'irliklar yig'indisiga ega bo'lgan ushbu grafik qirralarining kichik to'plamini topadigan minimal kenglikdagi daraxt algoritmidir. grafik.
Tarkib

  1. 1. Kruskal algoritmi qanday ishlaydi

  2. 2. Kruskal algoritmiga misol

  3. 3. Kruskal algoritmi. Psevdokod.

  4. 4. C++ tilida Kruskal algoritmini amalga oshirish

  5. 5. Kraskal vs Prima algoritmi

ADS
Kruskal algoritmi qanday ishlaydi
U global optimalni topish umidida mahalliy optimalni topadigan "ochko'z" algoritmlar deb ataladigan algoritmlar sinfiga kiradi .
Biz eng kam og'irlikdagi qirralardan boshlaymiz va maqsadimizga erishgunimizcha qirralarni qo'shishda davom etamiz.
Kruskal algoritmini amalga oshirish bosqichlari quyidagilardan iborat:

  1. Barcha qirralarni past og'irlikdan yuqori vazngacha tartiblang.

  2. Eng kichik og'irlikdagi chekka oling va uni yoyilgan daraxtga qo'shing. Agar chekka qo'shilganda tsikl yaratilgan bo'lsa, bu chekkadan voz keching.

  3. Barcha cho'qqilarga yetguncha qirralarni qo'shishni davom eting.

Kruskal algoritmiga misol

Kruskal algoritmi. Psevdokod.
Har qanday minimal kengaytmali daraxt algoritmi chekka tsikl hosil qiladimi yoki yo'qligini tekshirish atrofida aylanadi.
Buni aniqlashning eng keng tarqalgan usuli Union FInd algoritmidir . Union-Find algoritmi cho'qqilarni klasterlarga ajratadi va bizga ikkita cho'qqi bir xil klasterga tegishli yoki yo'qligini tekshirishga imkon beradi va shuning uchun chekka qo'shish sikl hosil qiladimi yoki yo'qligini hal qiladi.

  1. KRUSKAL(G):( G ):

  2. A = ∅

  3. Har bir tepalik uchun v ∈ G . V :

  4. MAKE - SET ( v )

  5. Har bir chekka uchun ( u , v ) ∈ G . E vazn bo'yicha tartibni oshirish orqali tartiblangan ( u , v ):

  6. agar FIND - SET ( u ) ≠ FIND - SET ( v ):

  7. A = A ∪ {( u , v )}

  8. UNION ( u , v )

  9. qaytish A

C++ da Kruskal algoritmini amalga oshirish
Quyida C++ da amalga oshirish uchun kod keltirilgan. Ishimizni oson va toza qilish uchun biz standart shablon kutubxonalaridan foydalanamiz.

  1. #include

  2. #o'z ichiga

  3. #include

  4. std nom maydonidan foydalanish ;


  5. #define chekka juft < int , int >


  6. sinf grafigi {

  7. xususiy :

  8. vektor < juft < int , chekka >> G ; // grafik

  9. vektor < juft < int , chekka >> T ; // mst

  10. int * ota ;

  11. int V ; // grafikdagi uchlari/tugunlar soni

  12. ommaviy :

  13. Grafik ( int V );

  14. void AddWeightedEdge ( int u , int v , int w );

  15. int find_set ( int i );

  16. void union_set ( int u , int v );

  17. bekor kruskal ();

  18. bo'sh joy ( );

  19. };

  20. Grafik :: Grafik ( int V ) {

  21. ota = new int [ V ];


  22. //i 0 1 2 3 4 5

  23. //ota-ona[i] 0 1 2 3 4 5

  24. uchun ( int i = 0 ; i < V ; i ++)

  25. ota [ i ] = i ;


  26. G. _ aniq ();

  27. T. _ aniq ();

  28. }

  29. void Grafik :: AddWeightedEdge ( int u , int v , int w ) {

  30. G. _ surish_orqaga ( juftlash_ko'rsatish ( w , chekka ( u , v )));

  31. }

  32. int Grafik :: find_set ( int i ) {

  33. // Agar i o'zining ota-onasi bo'lsa

  34. agar ( i == ota [ i ])

  35. qaytib i ;

  36. boshqa

  37. // Aks holda, agar i o'zining ota-onasi bo'lmasa

  38. // Unda men uning to'plamining vakili emasman,

  39. // shuning uchun biz uning ota-onasini rekursiv ravishda Find deb chaqiramiz

  40. find_setni qaytarish ( ota-ona [ i ]);

  41. }


  42. bekor Grafik :: union_set ( int u , int v ) {

  43. ota-ona [ u ] = ota-ona [ v ];

  44. }

  45. bekor Grafik :: kruskal () {

  46. int i , uRep , vRep ;

  47. tartiblash ( G.boshlash ( ), G.end ( ) ) ; // vaznni oshirish

  48. uchun ( i = 0 ; i < G . hajmi (); i ++) {

  49. uRep = find_set ( G [ i ] .ikkinchi.birinchi ) ; _

  50. vRep = find_set ( G [ i ] .ikkinchi.soniya ) ; _

  51. agar ( uRep != vRep ) {

  52. T. _ orqaga surish ( G [ i ]); // daraxtga qo'shish

  53. union_set ( uRep , vRep );

  54. }

  55. }

  56. }

  57. bekor Grafik :: chop etish () {

  58. cout << "Edge :" << "Og'irlik" << endl ;

  59. for ( int i = 0 ; i < T . size (); i ++) {

  60. cout << T [ i ]. ikkinchi . birinchi << " - " << T [ i ]. ikkinchi . ikkinchi << " : "

  61. << T [ i ]. birinchi ;

  62. cout << endl ;

  63. }

  64. }

  65. int main () {

  66. Grafik g ( 6 );

  67. g . AddWeightedEdge ( 0 , 1 , 4 );

  68. g . AddWeightedEdge ( 0 , 2 , 4 );

  69. g . AddWeightedEdge ( 1 , 2 , 2 );

  70. g . AddWeightedEdge ( 1 , 0 , 4 );

  71. g . AddWeightedEdge ( 2 , 0 , 4 );

  72. g . AddWeightedEdge ( 2 , 1 , 2 );

  73. g . AddWeightedEdge ( 2 , 3 , 3 );

  74. g . AddWeightedEdge ( 2 , 5 , 2 );

  75. g . AddWeightedEdge ( 2 , 4 , 4 );

  76. g . AddWeightedEdge ( 3 , 2 , 3 );

  77. g . AddWeightedEdge ( 3 , 4 , 3 );

  78. g . AddWeightedEdge ( 4 , 2 , 4 );

  79. g . AddWeightedEdge ( 4 , 3 , 3 );

  80. g . AddWeightedEdge ( 5 , 2 , 2 );

  81. g . AddWeightedEdge ( 5 , 4 , 3 );

  82. g . kruskal ();

  83. g . chop etish ();

  84. qaytish 0 ;

  85. }

Dasturni ishga tushirganimizda biz quyidagi natijalarni olamiz:

  1. Kenar: Og'irligi : Og'irligi

  2. 1-2 : 2 _ _

  3. 2-5 : 2 _ _

  4. 2-3 : 3 _ _

  5. 3-4 : 3 _ _

  6. 0 - 1 : 4

Kraskal algoritmi Primaga qarshi
Prim algoritmi MST grafigini topish uchun boshqa mantiqdan foydalanadigan yana bir mashhur minimal oraliqli daraxt algoritmidir. Prim algoritmi chekkadan boshlash o'rniga, cho'qqidan boshlanadi va barcha cho'qqilar qoplanmaguncha daraxtda bo'lmagan eng kichik og'irlikdagi qirralarni qo'shishda davom etadi.
Download 262,91 Kb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish