logo

Minimal kenglikdagi daraxt Kruskal algoritmi

Yuklangan vaqt:

12.08.2023

Ko'chirishlar soni:

0

Hajmi:

235.134765625 KB
Minimal kenglikdagi daraxt: Kruskal algoritmi  
Mundarija
KIRISH
ASOSIY QISM
1.Ma’lumot:
1.1.   Minimal kenglikdagi daraxt haqida tushuncha
2.  Amaliy  :
2.1.  Krusakal algaritmi
2.2 . Kruskal algoritmiga kirish
2.3.  Krusakal algartmlari C++ dasturlash tilda ifodalash 
2.4.   Dasturni murakkabligini baholash
2.5.   Minimal kenglikdagi daraxt uchun  Prim algoritmi
2.6  Prim   va Kruskal algoritmlar o’rtasidagi farqlari
2.7.  Minimal kenglikdagi daraxt uchun Boruvka algoritmi
2.8.  Minimal kenglikdagi daraxt uchun teskari o'chirish algoritmi
Xulosa
Foydanilgan adabiyotlar
1 Kirish
Bugungi   kunda  mamlakatimizda   axborot-kommunikatsiya   texnologiyalarini
qo‘llamaydigan   korxonalar   deyarli   qolmadi   va   ulardan   aksariyatining   hozirgi
vaqtdagi   muammosi   u   yoki   bu   jarayonlarni   avtomatlashtirilmaganligida   emas,
balki   uzoq   muddatli   rejalarsiz   amalga   oshirilgan,   ko‘r-ko‘rona   avtomatlashtirish
oqibatidir.   Hisoblash   texnikasi   va   dasturiy   ta'minotni   rejasiz   xarid   qilish,   mayda
kompaniyalarda yangilanmaydiga biznes takliflarga buyurtma berilishi va ularning
joriy   etilishi,   turli   bo‘linmalarga   joriy   etilgan   bir   vazifani   hal   etish   uchun   turli
takliflarning mavjudligi,  har   xil  segmentlangan  tarmoqlarni  ma'muriylashtirish  va
himoyalash   muammolari   —   bularning   barchasi   turli   kompaniyalar
axborotkommunikatsiya   texnologiyalar   bo‘linmalari   rahbarlari   duch   keladigan
muammolar   jumlasiga   kiradi.  AKTning   rivojlanishi   raqamli   va   matnli   axborotga
ishlov berishning barcha texnik vositalarini firma ichidagi yagona axborot tizimiga
birlashtirish   imkonini   berdi.   Bir   vaqtning   o‘zida   hisoblash   texnikasi   va   matnli
axborotlarga   avtomatlashtirilgan   tarzda   ishlov   berish   vositalaridan   foydalanishga
asoslangan   axborot   tizimi   eng   samarali   hisoblanmoqda.Korxona   faoliyati
mobaynida   ko‘p   hajmdagi   axborotlarni   to‘playdi,   ularni   tezda   qidirib   topish   esa
ushbu   axborot   samarali   joylashtirilgan   va   saqlangan   taqdirda   mumkin   bo‘ladi.
Ma'lumotlar   bazasi   firmaning   ishlab   chiqarish-sotish   bo‘linmalarining   xo‘jalik
faoliyatini   tavsiflovchi   statistik   ko‘rsatkichlar   majmuini,   shuningdek,   firma
rivojlanishining   holati   va   tendensiyalariga   ta'sir   ko‘rsatuvchi   barcha   omillarga
nisbatan   materiallarni   o‘z   ichiga   oladi.   Ma'lumotlar   bazasi   uchun   statistik
ko‘rsatkichlar   to‘plami   puxta   ishlab   chiqiladi   va   firmaning   faoliyat   ko‘rsatishi
natijalari   va   istiqbollarini   chuqur   iqtisodiy   tahlil   qilish   uchun   zarur   bo‘lgan
ko‘rsatkichlarni   qamrab   oladi.   Odatda   ma'lumotlar   bazasini   shakllantirishda
ma'lumotlarni saqlash va yangilash tizimi to‘g‘risidagi masala ham hal etiladi. 
2 1.1 Minimal kenglikdagi daraxt haqida tushuncha
Eng kichik uzunlikdagi daraxt   – berilgan grafning eng kam  darajaga ega
bo lgan   daraxti,   bu   yerda   daraxtning   darajasi   uning   qirralari   daajalari   yig indisiʻ ʻ
sifatida tushuniladi. 
Misol.   Minimal   uzunlikdagi   daraxtni   topish   muammosi   ko'pincha   xuddi
shunday   sharoitda   uchraydi:   masalan,   har   qanday   shahardan   boshqasiga
(to'g ridan-to'g ri yoki boshqa shaharlar orqali) o'tish uchun n ta shaharlarni yo'llar	
ʻ ʻ
bilan   bog lash   kerak.   Berilgan   juft   shaharlar   o'rtasida   yo'llar   qurishga   ruxsat	
ʻ
beriladi   va   har   bir   bunday   yo'lni   qurish   qiymati   ma'lum.   Qurilishning   umumiy
narxini   minimallashtirish   uchun   qaysi   yo'llarni   qurish   kerakligini   hal   qilish   talab
qilinadi.   Ushbu   muammoni   grafika   nazariyasi   nuqtai   nazaridan   shakllantirish
mumkin.   Bu   yerda   berilgan   grafnin   uchlari   shaharlarni,   qirralari   esa   to'g ri   yo'l	
ʻ
qurilishi   mumkin   bo'lgan   va   qirralarning   og irliklari   teng   bo'lgan   shaharlarni	
ʻ
ifodalaydigan minimal daraxtini topish muammosidir.
Minimal   uzunlikdagi   daraxtni   topish   uchun   bir   nechta   algoritmlar   mavjud.
Eng mashhurlari quyida keltirilgan:
1) Kruskal algoritmi;
2) Prima algoritmi;
3) Boruvka algoritmi;
4) Teskari o'chirish algoritmi;
Quyida ushbu algoritmlarni ko rib chiqamiz	
ʻ
2.1 Kruskal algoritmi
Kruskal   algoritmida   qirralarning   butun   birlashtirilgan   ro'yxati
kamaymaydigan   uch   darajalariga   muvofiq   tartiblangan.   Bundan   tashqari,   qirralar
darajalari   kichikroq   bo'lgan   qirralardan   yuqori   tomonga   siljiydi   va   keyingi   uch
3 ilgari   tanlangan   qirralar   bilan   sikl   hosil   qilmasa,   karkasga   qo'shiladi.   Xususan,
grafdagi   minimal   darajadagi   qirralaridan   biri   har   doim   birinchi   bo'lib
tanlanadi.Tanlangan qirralarning sikl hosil qilmasligini tekshirish uchun biz grafni
bir nechta bog langan komponentlarning birlashishi sifatida namoyish etamiz. Engʻ
boshida,   grafning   chekkalari   tanlanmaganida,   har   bir   uch   alohida   bog langan	
ʻ
komponent   hisoblanadi.    Yangi   qirralar   qo'shilganda,   ulanish   komponentlari   bitta
umumiy   ulanish   komponenti   bo'lguncha   birlashadi.   Barcha   bog langan   tarkibiy	
ʻ
qismlarni   raqamlaymiz   va   har   bir   uch   uchun   uning   ulangan   qismlarini   sonini
saqlaymiz,   shuning   uchun   har   bir   uch   uchun   boshida   uning   bog langan	
ʻ
komponentlari   soni   uchning   o'zi   soniga   teng   bo'ladi   va   oxirgi   barcha   uchlar   bir-
biriga bog langan komponentning bir xil raqamlariga tegishli bo'ladi.	
ʻ
Keyingi   qirrani   ko'rib   chiqayotganda,   ushbu   qirraning   uchlariga   to'g ri	
ʻ
keladigan   ulangan   komponentlarning   raqamlarini   ko'rib   chiqamiz.   Agar   bu
raqamlar   bir   xil   bo'lsa,   unda   qirra   allaqachon   bir   xil   bog langan   komponentda	
ʻ
joylashgan   ikkita   uchni   birlashtiradi,   shuning   uchun   bu   qirrani   qo'shish   siklni
tashkil   qiladi.   Agar   qirra   ikki   xil   bog langan   komponentni,   masalan,   a   va   b	
ʻ
raqamlari bilan bog lasa, u holda qirra asosiy daraxtning bir qismiga qo'shiladi va	
ʻ
bu   ikkita   bog langan   komponentlar   birlashtiriladi.   Buning   uchun,   masalan,   ilgari	
ʻ
komponentida   bo'lgan   barcha   uchlar   uchun   komponent   raqaminiga   o'zgartirish
kerak.
Kruskal algoritmini amalga oshirish bosqichlari quyidagicha:
1) Barcha qirralarni quyidan yuqorigacha saralash. 
2)   Vazni   eng   kichik   qirrasini   oling   va   uni   daraxtga   qo'shing.   Agar   qirra
qo shilganda, sikl hosil bo lsa, u holda bu qirrani olib tashlang. 	
ʻ ʻ
3) Barcha uchlarga yetguncha qirralarni qo'shishni davom eting.
2.2 Kruskal algoritmiga kirish:
Bu yerda biz berilgan vaznli grafikning  MST (Minumum Spanning Tree) ni
topish uchun   Kruskal algoritmini   muhokama qilamiz .
4 Kruskal   algoritmida   berilgan   grafikning   barcha   qirralarini   ortib   borish
tartibida   tartiblang.   Keyin,   agar   yangi   qo'shilgan   chekka   tsikl   hosil   qilmasa,
MSTga   yangi   qirralar   va   tugunlarni   qo'shishda   davom   etadi.   U   dastlab   minimal
og'irlikdagi qirrani, oxirida maksimal og'irlikdagi chetini tanlaydi.   Shunday qilib,
optimal echimni topish uchun har bir bosqichda mahalliy optimal tanlovni amalga
oshiradi, deb aytishimiz mumkin.   Demak, bu   ochko'z algoritmdir      .
Kruskal algoritmi yordamida MST ni qanday topish mumkin?
Quyida Kruskal algoritmi yordamida MST ni topish bosqichlari keltirilgan:
1. Barcha qirralarni og'irligi bo'yicha kamaymaydigan tartibda tartiblang.  
2. Eng   kichik   chetini   tanlang.   Hozirgacha   hosil   bo'lgan   oraliq   daraxt   bilan   tsikl
hosil   qilishini   tekshiring.   Agar   tsikl   shakllanmagan   bo'lsa,   bu   chekka
qo'shing.Aks holda, uni tashlang.  
3. Yopiladigan daraxtda (N-1) qirralar paydo bo'lguncha 2-qadamni takrorlang.
Kruskalning minimal xarajat daraxtini topish algoritmi ochko'z yondashuvdan
foydalanadi.   Ochko'z   tanlovi   hozirgacha   qurilgan   MSTda   tsiklga   olib
kelmaydigan   eng   kichik   og'irlik   chegarasini   tanlashdir.   Keling,   buni   misol   bilan
tushunamiz:
Tasvir:
Quyida yuqoridagi yondashuvning tasviri keltirilgan:
Kirish   grafigi :
Grafikda   9   ta   burchak   va   14   ta   burchak   mavjud.   Shunday   qilib,   hosil   bo'lgan
minimal   kenglikdagi   daraxt   (9   -   1)   =   8   qirraga   ega   bo'ladi.  
Saralashdan keyin:
Og'irlig Manba Manzil
5 i
1 7 6
2 8 2
2 6 5
4 0 1
4 2 5
6 8 6
7 2 3
7 7 8
8 0 7
8 1 2
9 3 4
10 5 4
11 1 7
14 3 5
Endi qirralarning tartiblangan ro'yxatidan barcha qirralarni birma-bir tanlang.
1-qadam:  
7-6 chetini tanlang.   Hech qanday tsikl shakllanmaydi, uni qo'shing.  
6 MSTda 7-6 chekka qo'shing
2-qadam:
8-2 chetini tanlang.   Hech qanday tsikl shakllanmaydi, uni qo'shing.
 
7 MSTda 8-2 chekka qo'shing
3-qadam:
6-5 chetini tanlang.   Hech qanday tsikl shakllanmaydi, uni qo'shing.  
MSTda 6-5 chekka qo'shing
4-qadam:
0-1 chetini tanlang.   Hech qanday tsikl shakllanmaydi, uni qo'shing.
8 MSTda 0-1 chekka qo'shing
5-qadam:
2-5 chetini tanlang.   Hech qanday tsikl shakllanmaydi, uni qo'shing.
9 MSTda 2-5 chekka qo'shing
6-qadam:
8-6   chetini   tanlang.   Ushbu   chekkaning   kiritilishi   tsiklga   olib   kelganligi
sababli,   uni   tashlang.   Pick   qirrasi   2-3:   Hech   qanday   tsikl   hosil   bo'lmaydi,   uni
qo'shing.
MSTda 2-3 chekka qo'shing
7-qadam:
7-8   chetini   tanlang.   Ushbu   chekkaning   kiritilishi   tsiklga   olib   kelganligi
sababli,   uni   tashlang.   0-7   chetini   tanlang.   Hech   qanday   tsikl   shakllanmaydi,   uni
qo'shing.
10 MSTda 0-7 chekka qo'shing
8-qadam:
1-2   chetini   tanlang.   Ushbu   chekkaning   kiritilishi   tsiklga   olib   kelganligi
sababli,   uni   tashlang.   3-4   chetini   tanlang.   Hech   qanday   tsikl   shakllanmaydi,   uni
qo'shing.
11 MSTda 3-4 chekka qo'shing
Eslatma:   MSTga   kiritilgan   qirralarning   soni   ( N   –   1)   ga   teng   bo lgani   uchunʻ
algoritm shu yerda to xtaydi.	
ʻ
2.3 Kruskal algoritmiga oid C++ dasturlash tilida dastur.
#include <bits/stdc++.h>
using   namespace   std;
 
class   DSU {
        int* parent;
        int* rank;
 
public:
        DSU(int   n)
        {
                parent = new   int[n];
                rank = new   int[n];
 
                for   (int   i = 0; i < n; i++) {
                        parent[i] = -1;
                        rank[i] = 1;
                }
12         }
 
        int   find(int   i)
        {
                if   (parent[i] == -1)
                        return   i;
 
                return   parent[i] = find(parent[i]);
        }
 
      void   unite(int   x, int   y)
        {
                int   s1 = find(x);
                int   s2 = find(y);
 
                if   (s1 != s2) {
                        if   (rank[s1] < rank[s2]) {
                                parent[s1] = s2;
                        }
                        else   if   (rank[s1] > rank[s2]) {
                                parent[s2] = s1;
                        }
                        else   {
                                parent[s2] = s1;
                                rank[s1] += 1;
                        }
                }
        }
};
 
class   Graph {
        vector<vector<int> > edgelist;
        int   V;
 
public:
        Graph(int   V) { this->V = V; }
 
        void   addEdge(int   x, int   y, int   w)
        {
                edgelist.push_back({ w, x, y });
        }
 
        void   kruskals_mst()
        {
13                 sort(edgelist.begin(), edgelist.end());
 
                DSU s(V);
                int   ans = 0;
                cout << "Following are the edges in the "
                                "constructed MST"
                          << endl;
                for   (auto   edge : edgelist) {
                        int   w = edge[0];
                        int   x = edge[1];
                        int   y = edge[2];
 
                        if   (s.find(x) != s.find(y)) {
                                s.unite(x, y);
                                ans += w;
                                cout << x << " -- "   << y << " == "   << w
                                          << endl;
                        }
                }
                cout << "Minimum Cost Spanning Tree: "   << ans;
        }
};
 
int   main()
{
        Graph g(4);
        g.addEdge(0, 1, 10);
        g.addEdge(1, 3, 15);
        g.addEdge(2, 3, 4);
        g.addEdge(2, 0, 6);
        g.addEdge(0, 3, 5);
 
        g.kruskals_mst();
 
        return   0;
}
Dasturning natijasi.
Quyida tuzilgan MSTning qirralari keltirilgan
2 -- 3 == 4
0 -- 3 == 5
0 -- 1 == 10
Minimal xarajat yoyilgan daraxt: 19
14 2.4 Dasturni murakkabligini baholash.
Vaqt  bo’yicha  murakkabligi:
O(E * logE) yoki O(E * logN)  
 Qirralarni saralash O(E * logE) vaqtni oladi.  
 Saralashdan   so'ng,   biz   barcha   qirralarni   takrorlaymiz   va   topish-
birlashma   algoritmini   qo'llaymiz.   Topish   va   birlashtirish   operatsiyalari
eng ko'p O(logN) vaqtni olishi mumkin.
 Shunday qilib, umumiy murakkablik O (E * logE + E * logN) vaqtidir.  
 N   ning   qiymati   ko'pi   bilan   O(N 2
  )   bo'lishi   mumkin,   shuning   uchun
O(logN)  va O(logE) bir  xil.   Shuning uchun umumiy vaqt  murakkabligi
O(E * logE) yoki O(E*logN) dir.
Eslatma:   O(N + E), bu erda N - tepalar soni va E - grafikdagi qirralarning soni.
2.5 Minimal kenglikdagi daraxt uchun  Prim algoritmi
Biz   Kruskalning   MST(Minimal   Spanning   Tree)   algoritmini      muhokama
qildik. Kruskal algoritmi singari, Prim algoritmi ham   ochko'z algoritmdir    . Ushbu
algoritm har doim bitta tugundan boshlanadi va yo'l davomida bog'langan barcha
qirralarni o'rganish uchun bir nechta qo'shni tugunlar bo'ylab harakatlanadi.
Algoritm   bo'sh   chiziqli   daraxtdan   boshlanadi.G'oya   ikkita   cho'qqi
to'plamini   saqlab   qolishdir.Birinchi   to'plamda   MSTga   allaqachon   kiritilgan,
boshqa to'plam esa hali kiritilmagan cho'qqilarni o'z ichiga oladi.Har bir qadamda
u ikkita to'plamni bog'laydigan barcha qirralarni ko'rib chiqadi va bu qirralarning
minimal og'irlik chekkasini tanlaydi. Chetni tanlagandan so'ng, u chetning boshqa
so'nggi   nuqtasini   MST   o'z   ichiga   olgan   to'plamga   o'tkazadi.   Grafikdagi   ikkita
cho'qqi   to'plamini   bog'laydigan   qirralar   guruhi   grafik   nazariyasida   kesilgan      deb
ataladi. Shunday qilib, Prim algoritmining har bir bosqichida kesimni toping,
kesimdan   minimal   og'irlik   chetini   tanlang   va   bu   cho'qqini   MST   to'plamiga
kiriting (allaqachon kiritilgan cho'qqilarni o'z ichiga olgan to'plam).
Prim algoritmining ishlashini quyidagi bosqichlar yordamida tasvirlash mumkin:
1-qadam:
MSTning boshlang'ich cho'qqisi sifatida ixtiyoriy cho'qqisini aniqlang.
2-qadam:
MSTga kiritilmagan cho'qqilar paydo bo'lguncha 3 dan 5 gacha bo'lgan 
bosqichlarni bajaring (chekka cho'qqi deb nomlanadi).
3-qadam:
Har qanday daraxt uchlarini chekka uchlari bilan bog'laydigan qirralarni 
toping.
4-qadam:
Ushbu qirralarning minimalini toping.
5-qadam:
15 MSTga tanlangan chekka qo'shing, agar u hech qanday tsiklni hosil 
qilmasa.
6-qadam:
MSTni qaytaring va chiqing .
Prim algoritmining tasviri:
Prim algoritmiga oid C++ dasturlash tilida dastur.
#include <bits/stdc++.h>
using   namespace   std;
 
// Number of vertices in the graph
#define V 5
 
// A utility function to find the vertex with
// minimum key value, from the set of vertices
// not yet included in MST
int   minKey( int   key[],  bool   mstSet[])
{
        // Initialize min value
        int   min = INT_MAX, min_index;
 
        for   ( int   v = 0; v < V; v++)
                if   (mstSet[v] ==  false   && key[v] < min)
                        min = key[v], min_index = v;
 
        return   min_index;
}
 
// A utility function to print the
// constructed MST stored in parent[]
void   printMST( int   parent[],  int   graph[V][V])
16 {
        cout << "Edge \tWeight\n";
        for   ( int   i = 1; i < V; i++)
                cout << parent[i] << " - "   << i << " \t"
                          << graph[i][parent[i]] << " \n";
}
 
// Function to construct and print MST for
// a graph represented using adjacency
// matrix representation
void   primMST( int   graph[V][V])
{
        // Array to store constructed MST
        int   parent[V];
 
        // Key values used to pick minimum weight edge in cut
        int   key[V];
 
        // To represent set of vertices included in MST
        bool   mstSet[V];
 
        // Initialize all keys as INFINITE
        for   ( int   i = 0; i < V; i++)
                key[i] = INT_MAX, mstSet[i] =  false ;
 
        // Always include first 1st vertex in MST.
        // Make key 0 so that this vertex is picked as first
        // vertex.
        key[0] = 0;
     
        // First node is always root of MST
        parent[0] = -1;
 
        // The MST will have V vertices
        for   ( int   count = 0; count < V - 1; count++) {
                 
                // Pick the minimum key vertex from the
                // set of vertices not yet included in MST
                int   u = minKey(key, mstSet);
 
                // Add the picked vertex to the MST Set
                mstSet[u] =  true ;
 
                // Update key value and parent index of
17                 // the adjacent vertices of the picked vertex.
                // Consider only those vertices which are not
                // yet included in MST
                for   ( int   v = 0; v < V; v++)
 
                        // graph[u][v] is non zero only for adjacent
                        // vertices of m mstSet[v] is false for vertices
                        // not yet included in MST Update the key only
                        // if graph[u][v] is smaller than key[v]
                        if   (graph[u][v] && mstSet[v] ==  false
                                && graph[u][v] < key[v])
                                parent[v] = u, key[v] = graph[u][v];
        }
 
        // Print the constructed MST
        printMST(parent, graph);
}
 
// Driver's code
int   main()
{
        int   graph[V][V] = { { 0, 2, 0, 6, 0 },
                                                { 2, 0, 3, 8, 5 },
                                                { 0, 3, 0, 0, 7 },
                                                { 6, 8, 0, 0, 9 },
                                                { 0, 5, 7, 9, 0 } };
 
        // Print the solution
        primMST(graph);
 
        return   0;
}
 
// This code is contributed by rathbhupendra
Chiqish
Kenar og'irligi
0 - 1 2
1 - 2 3
0 - 3 6
1 - 4 5
18 Vaqt murakkabligi:   O( N 2
  ), Agar kirish   grafigi qo shni ro yxat yordamida ʻ ʻ
tasvirlangan bo lsa	
ʻ      , Prim algoritmining vaqt murakkabligini ikkilik to p 	ʻ
yordamida O(E * log N ) ga kamaytirish mumkin.
2.6 Prim   va Kruskal algoritmlar o’rtasidagi farqlari
Prim   va   Kruskal   algoritmlari   Minimal   kenglikdagi   daraxtni   topadi   va
muammoni hal qilishda ochko'z yondashuvga amal qiladi, ammo   ular o'rtasida bir
nechta asosiy farqlar      mavjud.
Prim algoritmi Kruskal algoritmi
Grafikning istalgan cho'qqisidan 
Minimal kenglik daraxtini qurishni 
boshlaydi. Grafikdagi minimal og'irlikni 
ko'taruvchi cho'qqidan Minimal 
kenglikdagi daraxtni qurishni boshlaydi.
Minimal masofani olish uchun bir 
tugunni bir necha marta bosib o'tadi. U bitta tugunni faqat bir marta kesib 
o'tadi.
Prim algoritmi vaqt murakkabligi 
O( N 2
  ), V cho'qqilar soni va 
Fibonachchi to'plari yordamida O(E 
log  N ) gacha yaxshilanishi mumkin. Kruskal algoritmining vaqt 
murakkabligi O(E log N), N cho'qqilar 
soni.
Prim algoritmi ulangan komponentni
beradi, shuningdek, u faqat ulangan 
grafikda ishlaydi. Kruskal algoritmi har qanday lahzada 
o'rmonni (ajratilgan komponentlar) 
yaratishi mumkin, shuningdek, uzilgan 
komponentlar ustida ishlashi mumkin.
Prim algoritmi zich grafiklarda 
tezroq ishlaydi. Kruskal algoritmi siyrak grafiklarda 
tezroq ishlaydi.
Ildiz cho'qqisidan boshlab minimal 
kenglikdagi daraxtni hosil qiladi. U eng kam og'irlikdagi chekkadan 
boshlab minimal kenglikdagi daraxtni 
hosil qiladi.  
Prim algoritmining ilovalari: 
Sayohatchi sotuvchi muammosi, 
yo'llar tarmog'i va barcha shaharlarni
bog'laydigan temir yo'llar va 
boshqalar. Kruskal algoritmining ilovalari LAN 
ulanishi, TV tarmog'i va boshqalar.
Prim algoritmi ro'yxat ma'lumotlar  Kruskal algoritmi yig'ma ma'lumotlar 
19 Prim algoritmi Kruskal algoritmi
tuzilmalarini afzal ko'radi. tuzilmalarini afzal ko'radi.
2.7 Minimal kenglikdagi daraxt uchun Boruvka algoritmi
Minimal   oraliq   daraxt   (MST)   muammosi   uchun   quyidagi   ikkita   algoritm
odatda   o'rgatiladi. Prim   algoritmi        Kruskal   algoritmi   MST   uchun        Boruvka   
algoritmi   deb   ataladigan   uchinchi   algoritm   mavjud   (yuqoridagi   ikkitasi   kabi)
Greedy   algoritmidir.   Boruvka   algoritmi   eng   qadimgi   minimal   kenglikdagi   daraxt
algoritmi   bo'lib,   uni   kompyuterlar   paydo   bo'lishidan   ancha   oldin,   1926   yilda
Boruvka   kashf   etgan.   Algoritm   samarali   elektr   tarmog'ini   qurish   usuli   sifatida
nashr etildi.
Boruvka algoritmi
Ushbu   algoritmning   g'oyasi   juda   oddiy   va   intuitivdir.   Bu   ochko'z   algoritm
ekanligini   ilgari   aytib   o'tgan   edik.Algoritm   ochko'z   bo'lsa   ,   u   kichikroq   kichik
muammolar   uchun   kichikroq,   mahalliy   optimal   echimlardan   foydalangan   holda
global   "optimal"   yechimni   yaratadi.   Odatda,   u   etarlicha   yaxshi   yechim   bilan
birlashadi   ,   chunki   mahalliy   optimallarga   rioya   qilish   global   optimal   echimni
kafolatlamaydi.Oddiy   qilib   aytganda,   ochko'z   algoritmlar   muammoning   har   bir
bosqichida   eng   maqbul   tanlovni   (hozirda   ma'lum   bo'lgan   variantlardan   tashqari)
qiladi   va   barcha   kichik   qadamlar   qo'shilganda   umumiy   eng   maqbul   echimga
erishishga intiladi.Siz ochko'z algoritmlarni kontsertda improvizatsiya qiladigan va
har   daqiqada   eng   yaxshi   eshitiladigan   narsani   ijro   etadigan   musiqachi   deb
o'ylashingiz   mumkin.   Boshqa   tomondan,   ochko'z   bo'lmagan   algoritmlar   ko'proq
bastakorga   o'xshaydi,   ular   ijro   etmoqchi   bo'lgan   asar   haqida   o'ylaydi   va   uni   nota
sifatida yozishga vaqt ajratadi.
Endi biz algoritmni bir necha bosqichda ajratamiz:
1-qadam.
Biz barcha tugunlarni alohida komponentlar sifatida ishga tushiramiz.
2-qadam.
Biz minimal  kenglikdagi daraxtni Syechimni o'z ichiga olgan bo'sh to'plam
sifatida ishga tushiramiz.
3-qadam.
20 Agar bir nechta komponent mavjud bo'lsa:
•Ushbu   komponentni   boshqa   har   qanday   komponent   bilan   bog'laydigan   minimal
og'irlikdagi chetini toping.
•Agar bu chekka minimal kenglikdagi daraxtda bo'lmasa S, biz uni qo'shamiz.
4-qadam.
Agar faqat bitta komponent qolsa, biz daraxtning oxiriga yetdik.
Ushbu algoritm kirish sifatida bog'langan, vaznli va yo'naltirilmagan grafikni oladi
va uning chiqishi grafikning mos keladigan minimal chegara daraxti hisoblanadi .
Agar   qirralarning   aniq   og'irliklari   bo'lmasa,   u   holda   ,   masalan,   cho'qqilar
yoki   qirralarning   umumiy   tartibiga   asoslanib,   izchil   bog'lash
qoidasidan   foydalanish kerak .   Bunga cho'qqilarni butun sonlar sifatida ko'rsatish
va   ularni   to'g'ridan-to'g'ri   solishtirish   orqali   erishish   mumkin;   ularning   xotira
manzillarini   solishtirish   ;   va   hokazo.   Yaratilgan   grafik   haqiqatan   ham   o'rmon
ekanligini, ya'ni  unda tsikllar yo'qligini ta'minlash uchun galstukni buzish qoidasi
zarur.   Masalan,   {   a   ,   b   ,   c   }   tugunlari   va   og irlikning   barcha   qirralari   1   bo lganʻ ʻ
uchburchak   grafigini   ko rib   chiqaylik.   Agar   {	
ʻ   a   }   uchun   ab   ni   ,   {   b   }   uchun   bc
ni   minimal   og irlik   qirrasi   sifatida	
ʻ   tanlasak,   tsikl   yaratilishi   mumkin.{   c   }
uchun   ca.   Qirralarni   avval   manba   bo‘yicha,   so‘ngra   belgilangan   manzil   bo‘yicha
tartibga soladigan bog‘lash qoidasi tsiklning yaratilishiga to‘sqinlik qiladi, natijada
{   ab   ,   bc   } minimal kengayuvchi daraxt paydo bo‘ladi.
2.8 Minimal kenglikdagi daraxt uchun teskari o'chirish algoritmi
Teskari   o'chirish   algoritmi   Kruskal   algoritmi   bilan   chambarchas
bog'liq.Kruskal   algoritmida   biz   nima   qilamiz.Og'irliklari   tartibini   oshirish   orqali
qirralarni   tartiblang.   Saralashdan   so'ng   biz   birma-bir   o'sib   borayotgan   tartibda
qirralarni tanlaymiz.   Biz joriy tanlangan chekkani kiritamiz, agar uni kengayuvchi
daraxtga kiritish orqali N-1 qirralari bo'lmaguncha hech qanday sikl hosil qilmasa,
bu erda N-qirralari soni.
Teskari  o'chirish algoritmida biz barcha qirralarni   og'irliklarining   kamayishi
tartibida saralaymiz. Saralashdan so'ng biz chekkalarni kamayish tartibida birma-bir
tanlaymiz. Joriy qirrani istisno qilish joriy grafikda uzilishga olib keladigan bo'lsa,
joriy   tanlangan   chekkani   kiritamiz.Asosiy   g'oya   -   chetni   o'chirish,   agar   uning
o'chirilishi grafikning uzilishiga olib kelmasa.
Endi biz algoritmni bir necha bosqichda ajratamiz:
1-qadam.
Grafikning   barcha   qirralarini   chekka   og'irliklarining   ortib   bo'lmaydigan
tartibida tartiblang.
2-qadam.
21 MST-ni   asl   grafik   sifatida   ishga   tushiring   va   3-bosqichdan   foydalanib
qo'shimcha qirralarni olib tashlang.
3-qadam.
Qolgan qirralarning eng yuqori og'irlik chekkasini tanlang va chetni o'chirish
grafikni   uzib   qo'yishini   yoki   yo'qligini   tekshiring.Agar   u   uzilib   qolsa,   biz
chekkasini   o'chirmaymiz,aks   holda   biz   chetini   o'chirib   tashlaymiz   va   davom
etamiz.
22 Xulosa
Men “ Minimal kenglikdagi daraxt:Kruskal algoritmi ” mavzusida bajargan kurs
ishimni   bajarish   davomida   “ Minimal   kenglikdagi   daraxt:Kruskal   algoritmi ”
ma’lumotlar   bazasini   yaratdim.   Ma’lumotlar   bazasini   boshqarish   tizimlari   fanini
o’rganish   davomida   juda   ko’p   yangi   bilimlarga   va   ma’lumotlarga   ega   bo’ldim.
Ma’lumotlar   bazasini   boshqarish   tizimlarini   boshqarish.Ma’lumotlar   bazasini
yaratib   olish   hozirgi   axborot   texnologiyalari   jaddal   sur’atlar   bilan   rivojlanib
borayotgan   bir   vaqtida   juda   muhim   ekanligini   tushundim.   Fanni   o’rganishda   va
kurs   ishini   bajarish   chog’ida   yangi   adabiyotlarni   topdim   hamda   turli
ma’lumotlardan   foydalandim.Umuman   olganda   ushbu   kurs   ishi   biz   talabalarga
“Algartm   va   ma’lumotlar   stukturasi   fanidan   “fanidan   olgan   nazariy   va   amaliy
bilimlarimizni yanada mustahkamlashga yordam berdi.
23 FOYDALANILGAN ADABIYOTLAR
1. Kleinberg J., Tardos E. K48 Algoritmlar: ishlab chiqish va qo'llash. Klassikalar
Kompyuter fanlari / Per. ingliz tilidan. E.
Matveev. - Sankt-Peterburg: Peter, 2016. - 800 p.: kasal. - (Serial
"Informatika klassikasi").
2.   To‘rayev   X.T.   Matematik   mantiq   va   diskret   matematika.:   Oliy   ta'limning
talabalari   uchun   darslik:   11   jildlik.   X.T.To rayev,   1.   Azizov;   H.T.   To'rayevningʻ
umumiy   tahriri   ostida;   O'zR   Oliy   va   o'rta-maxsus   ta'lim   vazirligi.   -   Toshkent:
Tafakkur-Bo‘stoni, 2011. - 288 bet
3. Axo, Alfred, V., Xopkroft, Jon, Ullman, Jeffri, D.
Ma'lumotlar tuzilmalari va algoritmlari.: TRANS. Ingliz tilidan: Uch. Pos. – M.
Uilyams nashriyoti, 2000. - 384 p.: kasal. - Parall. Tityu ingliz.
4. Pishkin E.V. Ma'lumotlar tuzilmalari va algoritmlari: amalga oshirish
C/C++ da. - Sankt-Peterburg: FTK SPbGPU, 2009.- 200 p., kasal.
5.   Ovsyannikov,   A.   V.   Algoritmlar   va   ma'lumotlar   tuzilmalari:   1-31   03   07
mutaxassisligi bo'yicha o'quv majmuasi
"Amaliy informatika (yo'nalishlar bo'yicha)". 1-qism / A.V.
Ovsyannikov, Yu.A.Pikman; BDU, Fak. ijtimoiy-madaniy
aloqa, bo'lim axborot texnologiyalari. - Minsk: BGU, 2015. -
124 b. : kasal. – Bibliografiya: b. 122
6. L. N. Domnin, Grafik nazariyasi elementlari: Prok. Nafaqa / L.
N. Domnin. - Penza: Penz nashriyoti. Davlat. Univ., 2007. - 144 b.
75 ill., 13 jadval, bibliografiya 18 nom.
7. Niklaus Wirth, Algoritmlar va ma'lumotlar tuzilmalari. Yangi
Oberon + CD / Per uchun versiya. ingliz tilidan. Tkachev F.V. - M.:
DMK Press, 2010. - 272 b.:
24

Minimal kenglikdagi daraxt: Kruskal algoritmi Mundarija KIRISH ASOSIY QISM 1.Ma’lumot: 1.1. Minimal kenglikdagi daraxt haqida tushuncha 2. Amaliy : 2.1. Krusakal algaritmi 2.2 . Kruskal algoritmiga kirish 2.3. Krusakal algartmlari C++ dasturlash tilda ifodalash 2.4. Dasturni murakkabligini baholash 2.5. Minimal kenglikdagi daraxt uchun Prim algoritmi 2.6 Prim va Kruskal algoritmlar o’rtasidagi farqlari 2.7. Minimal kenglikdagi daraxt uchun Boruvka algoritmi 2.8. Minimal kenglikdagi daraxt uchun teskari o'chirish algoritmi Xulosa Foydanilgan adabiyotlar 1

Kirish Bugungi kunda mamlakatimizda axborot-kommunikatsiya texnologiyalarini qo‘llamaydigan korxonalar deyarli qolmadi va ulardan aksariyatining hozirgi vaqtdagi muammosi u yoki bu jarayonlarni avtomatlashtirilmaganligida emas, balki uzoq muddatli rejalarsiz amalga oshirilgan, ko‘r-ko‘rona avtomatlashtirish oqibatidir. Hisoblash texnikasi va dasturiy ta'minotni rejasiz xarid qilish, mayda kompaniyalarda yangilanmaydiga biznes takliflarga buyurtma berilishi va ularning joriy etilishi, turli bo‘linmalarga joriy etilgan bir vazifani hal etish uchun turli takliflarning mavjudligi, har xil segmentlangan tarmoqlarni ma'muriylashtirish va himoyalash muammolari — bularning barchasi turli kompaniyalar axborotkommunikatsiya texnologiyalar bo‘linmalari rahbarlari duch keladigan muammolar jumlasiga kiradi. AKTning rivojlanishi raqamli va matnli axborotga ishlov berishning barcha texnik vositalarini firma ichidagi yagona axborot tizimiga birlashtirish imkonini berdi. Bir vaqtning o‘zida hisoblash texnikasi va matnli axborotlarga avtomatlashtirilgan tarzda ishlov berish vositalaridan foydalanishga asoslangan axborot tizimi eng samarali hisoblanmoqda.Korxona faoliyati mobaynida ko‘p hajmdagi axborotlarni to‘playdi, ularni tezda qidirib topish esa ushbu axborot samarali joylashtirilgan va saqlangan taqdirda mumkin bo‘ladi. Ma'lumotlar bazasi firmaning ishlab chiqarish-sotish bo‘linmalarining xo‘jalik faoliyatini tavsiflovchi statistik ko‘rsatkichlar majmuini, shuningdek, firma rivojlanishining holati va tendensiyalariga ta'sir ko‘rsatuvchi barcha omillarga nisbatan materiallarni o‘z ichiga oladi. Ma'lumotlar bazasi uchun statistik ko‘rsatkichlar to‘plami puxta ishlab chiqiladi va firmaning faoliyat ko‘rsatishi natijalari va istiqbollarini chuqur iqtisodiy tahlil qilish uchun zarur bo‘lgan ko‘rsatkichlarni qamrab oladi. Odatda ma'lumotlar bazasini shakllantirishda ma'lumotlarni saqlash va yangilash tizimi to‘g‘risidagi masala ham hal etiladi. 2

1.1 Minimal kenglikdagi daraxt haqida tushuncha Eng kichik uzunlikdagi daraxt – berilgan grafning eng kam darajaga ega bo lgan daraxti, bu yerda daraxtning darajasi uning qirralari daajalari yig indisiʻ ʻ sifatida tushuniladi. Misol. Minimal uzunlikdagi daraxtni topish muammosi ko'pincha xuddi shunday sharoitda uchraydi: masalan, har qanday shahardan boshqasiga (to'g ridan-to'g ri yoki boshqa shaharlar orqali) o'tish uchun n ta shaharlarni yo'llar ʻ ʻ bilan bog lash kerak. Berilgan juft shaharlar o'rtasida yo'llar qurishga ruxsat ʻ beriladi va har bir bunday yo'lni qurish qiymati ma'lum. Qurilishning umumiy narxini minimallashtirish uchun qaysi yo'llarni qurish kerakligini hal qilish talab qilinadi. Ushbu muammoni grafika nazariyasi nuqtai nazaridan shakllantirish mumkin. Bu yerda berilgan grafnin uchlari shaharlarni, qirralari esa to'g ri yo'l ʻ qurilishi mumkin bo'lgan va qirralarning og irliklari teng bo'lgan shaharlarni ʻ ifodalaydigan minimal daraxtini topish muammosidir. Minimal uzunlikdagi daraxtni topish uchun bir nechta algoritmlar mavjud. Eng mashhurlari quyida keltirilgan: 1) Kruskal algoritmi; 2) Prima algoritmi; 3) Boruvka algoritmi; 4) Teskari o'chirish algoritmi; Quyida ushbu algoritmlarni ko rib chiqamiz ʻ 2.1 Kruskal algoritmi Kruskal algoritmida qirralarning butun birlashtirilgan ro'yxati kamaymaydigan uch darajalariga muvofiq tartiblangan. Bundan tashqari, qirralar darajalari kichikroq bo'lgan qirralardan yuqori tomonga siljiydi va keyingi uch 3

ilgari tanlangan qirralar bilan sikl hosil qilmasa, karkasga qo'shiladi. Xususan, grafdagi minimal darajadagi qirralaridan biri har doim birinchi bo'lib tanlanadi.Tanlangan qirralarning sikl hosil qilmasligini tekshirish uchun biz grafni bir nechta bog langan komponentlarning birlashishi sifatida namoyish etamiz. Engʻ boshida, grafning chekkalari tanlanmaganida, har bir uch alohida bog langan ʻ komponent hisoblanadi. Yangi qirralar qo'shilganda, ulanish komponentlari bitta umumiy ulanish komponenti bo'lguncha birlashadi. Barcha bog langan tarkibiy ʻ qismlarni raqamlaymiz va har bir uch uchun uning ulangan qismlarini sonini saqlaymiz, shuning uchun har bir uch uchun boshida uning bog langan ʻ komponentlari soni uchning o'zi soniga teng bo'ladi va oxirgi barcha uchlar bir- biriga bog langan komponentning bir xil raqamlariga tegishli bo'ladi. ʻ Keyingi qirrani ko'rib chiqayotganda, ushbu qirraning uchlariga to'g ri ʻ keladigan ulangan komponentlarning raqamlarini ko'rib chiqamiz. Agar bu raqamlar bir xil bo'lsa, unda qirra allaqachon bir xil bog langan komponentda ʻ joylashgan ikkita uchni birlashtiradi, shuning uchun bu qirrani qo'shish siklni tashkil qiladi. Agar qirra ikki xil bog langan komponentni, masalan, a va b ʻ raqamlari bilan bog lasa, u holda qirra asosiy daraxtning bir qismiga qo'shiladi va ʻ bu ikkita bog langan komponentlar birlashtiriladi. Buning uchun, masalan, ilgari ʻ komponentida bo'lgan barcha uchlar uchun komponent raqaminiga o'zgartirish kerak. Kruskal algoritmini amalga oshirish bosqichlari quyidagicha: 1) Barcha qirralarni quyidan yuqorigacha saralash. 2) Vazni eng kichik qirrasini oling va uni daraxtga qo'shing. Agar qirra qo shilganda, sikl hosil bo lsa, u holda bu qirrani olib tashlang. ʻ ʻ 3) Barcha uchlarga yetguncha qirralarni qo'shishni davom eting. 2.2 Kruskal algoritmiga kirish: Bu yerda biz berilgan vaznli grafikning MST (Minumum Spanning Tree) ni topish uchun Kruskal algoritmini muhokama qilamiz . 4

Kruskal algoritmida berilgan grafikning barcha qirralarini ortib borish tartibida tartiblang. Keyin, agar yangi qo'shilgan chekka tsikl hosil qilmasa, MSTga yangi qirralar va tugunlarni qo'shishda davom etadi. U dastlab minimal og'irlikdagi qirrani, oxirida maksimal og'irlikdagi chetini tanlaydi. Shunday qilib, optimal echimni topish uchun har bir bosqichda mahalliy optimal tanlovni amalga oshiradi, deb aytishimiz mumkin. Demak, bu ochko'z algoritmdir . Kruskal algoritmi yordamida MST ni qanday topish mumkin? Quyida Kruskal algoritmi yordamida MST ni topish bosqichlari keltirilgan: 1. Barcha qirralarni og'irligi bo'yicha kamaymaydigan tartibda tartiblang. 2. Eng kichik chetini tanlang. Hozirgacha hosil bo'lgan oraliq daraxt bilan tsikl hosil qilishini tekshiring. Agar tsikl shakllanmagan bo'lsa, bu chekka qo'shing.Aks holda, uni tashlang. 3. Yopiladigan daraxtda (N-1) qirralar paydo bo'lguncha 2-qadamni takrorlang. Kruskalning minimal xarajat daraxtini topish algoritmi ochko'z yondashuvdan foydalanadi. Ochko'z tanlovi hozirgacha qurilgan MSTda tsiklga olib kelmaydigan eng kichik og'irlik chegarasini tanlashdir. Keling, buni misol bilan tushunamiz: Tasvir: Quyida yuqoridagi yondashuvning tasviri keltirilgan: Kirish grafigi : Grafikda 9 ta burchak va 14 ta burchak mavjud. Shunday qilib, hosil bo'lgan minimal kenglikdagi daraxt (9 - 1) = 8 qirraga ega bo'ladi. Saralashdan keyin: Og'irlig Manba Manzil 5