Algoritmdan nazorat savollariga javoblar Algoritm nima


####Grafga ikki rangga boyash



Download 4,28 Mb.
bet55/61
Sana31.12.2021
Hajmi4,28 Mb.
#254919
1   ...   51   52   53   54   55   56   57   58   ...   61
Bog'liq
2 5355268973329911567

42..####Grafga ikki rangga boyash | (ochko'z algoritm)

Graflarni bo'yash keng qo'llaniladi. Afsuski, minimal miqdordagi ranglarga ega bo'lgan graflarni bo'yash uchun samarali algoritm mavjud emas, chunki muammo ma'lum NP to'liq muammosi. Muammoni hal qilish uchun taxminiy algoritmlar mavjud. Ranglarni belgilash uchun asosiy ochko'zlik algoritmi quyida keltirilgan. Bu minimal ranglardan foydalanishni kafolatlamaydi, lekin ranglar soniga bog'liq bo'lgan yuqori chegarani kafolatlaydi. Asosiy algoritmda hech qachon d + 1 dan ortiq ranglar ishlatilmaydi, bunda d - berilgan grafikdagi verteksning maksimal darajasi.

Ochko'zlikni bo'yashning asosiy algoritmi:
1. Birinchi verteksni birinchi rang bilan ranglang.

2. Qolgan V-1 vertikallari uchun quyidagini bajaring.

… .. a) Hozirgi tanlangan uchini ko'rib chiqing va uni rang bilan bo'yang

ilgari ishlatilmagan eng kam raqamlangan rang

unga ulashgan rangli uchlari. Agar ilgari ishlatilgan ranglar bo'lsa

v ga tutashgan vertikallarda paydo bo'ladi, unga yangi rang bering




#include

#include

using namespace std;

  

// A class that represents an undirected graph



class Graph

{


    int V;    // No. of vertices

    list *adj;    // A dynamic array of adjacency lists

public:

    // Constructor and destructor

    Graph(int V)   { this->V = V; adj = new list[V]; }

    ~Graph()       { delete [] adj; }

  

    // function to add an edge to graph



    void addEdge(int v, int w);

  

    // Prints greedy coloring of the vertices



    void greedyColoring();

};


  

void Graph::addEdge(int v, int w)

{

    adj[v].push_back(w);



    adj[w].push_back(v);  // Note: the graph is undirected

}


  

// Assigns colors (starting from 0) to all vertices and prints

// the assignment of colors

void Graph::greedyColoring()

{

    int result[V];



  

    // Assign the first color to first vertex

    result[0]  = 0;

  

    // Initialize remaining V-1 vertices as unassigned



    for (int u = 1; u < V; u++)

        result[u] = -1;  // no color is assigned to u

  

    // A temporary array to store the available colors. True



    // value of available[cr] would mean that the color cr is

    // assigned to one of its adjacent vertices

    bool available[V];

    for (int cr = 0; cr < V; cr++)

        available[cr] = false;

  

    // Assign colors to remaining V-1 vertices



    for (int u = 1; u < V; u++)

    {


        // Process all adjacent vertices and flag their colors

        // as unavailable

        list::iterator i;

        for (i = adj[u].begin(); i != adj[u].end(); ++i)

            if (result[*i] != -1)

                available[result[*i]] = true;

  

        // Find the first available color



        int cr;

        for (cr = 0; cr < V; cr++)

            if (available[cr] == false)

                break;

  

        result[u] = cr; // Assign the found color



  

        // Reset the values back to false for the next iteration

        for (i = adj[u].begin(); i != adj[u].end(); ++i)

            if (result[*i] != -1)

                available[result[*i]] = false;

    }


  

    // print the result

    for (int u = 0; u < V; u++)

        cout << "Vertex " << u << " --->  Color "

             << result[u] << endl;

}


  

// Driver program to test above function

int main()

{


    Graph g1(5);

    g1.addEdge(0, 1);

    g1.addEdge(0, 2);

    g1.addEdge(1, 2);

    g1.addEdge(1, 3);

    g1.addEdge(2, 3);

    g1.addEdge(3, 4);

    cout << "Coloring of graph 1 \n";

    g1.greedyColoring();

  

    Graph g2(5);



    g2.addEdge(0, 1);

    g2.addEdge(0, 2);

    g2.addEdge(1, 2);

    g2.addEdge(1, 4);

    g2.addEdge(2, 4);

    g2.addEdge(4, 3);

    cout << "\nColoring of graph 2 \n";

    g2.greedyColoring();

  

    return 0;



}



Output:

Coloring of graph 1

Vertex 0 ---> Color 0

Vertex 1 ---> Color 1

Vertex 2 ---> Color 2

Vertex 3 ---> Color 0

Vertex 4 ---> Color 1

Coloring of graph 2

Vertex 0 ---> Color 0

Vertex 1 ---> Color 1

Vertex 2 ---> Color 2

Vertex 3 ---> Color 0

Vertex 4 ---> Color 3
Asosiy algoritmni tahlil qilish

Yuqoridagi algoritm har doim ham minimal miqdordagi ranglardan foydalanmaydi. Bundan tashqari, ba'zi vaqtlarda ishlatiladigan ranglar soni vertikallarni qayta ishlash tartibiga bog'liq. Masalan, quyidagi ikkita grafni ko'rib chiqing. E'tibor bering, o'ng tomonidagi grafda 3 va 4-sonli uchlari almashtirilgan. Agar chap grafdagi 0, 1, 2, 3, 4 uchlarini hisobga olsak, grafni 3 ta rangdan foydalanib ranglashimiz mumkin. Ammo agar biz 0, 1, 2, 3, 4 uchlarini o'ng grafda ko'rib chiqsak, bizga 4 ta rang kerak bo'ladi



Shunday qilib, vertikallarni tanlash tartibi muhimdir. Ko'p odamlar o'rtacha algoritmdan ko'ra yaxshiroq ishlaydigan buyurtmalarni topish uchun turli xil usullarni taklif qilishadi. Eng keng tarqalgani Uels-Pauell algoritmi bo'lib, u vertikallarni daraja tushish tartibida ko'rib chiqadi.

Asosiy algoritm d + 1 ning yuqori chegarasini qanday kafolatlaydi?

Bu erda d - berilgan grafikdagi maksimal daraja. D maksimal darajaga ega bo'lganligi sababli, verteksni d dan ortiq vertikallarga biriktirish mumkin emas. Biz verteksni ranglaganda, ko'p ranglarda d qo'shni tomonidan ishlatilishi mumkin edi. Ushbu verteksni rang berish uchun, biz qo'shni uchlari tomonidan ishlatilmaydigan eng kichik raqamlangan rangni tanlashimiz kerak. Agar ranglar 1, 2, ... kabi raqamlangan bo'lsa, unda eng kichik raqamning qiymati 1 dan d + 1 gacha bo'lishi kerak (e'tibor bering, d raqamlari qo'shni uchlari bilan tanlangan).

Buni indüksiyon yordamida ham isbotlash mumkin.


Download 4,28 Mb.

Do'stlaringiz bilan baham:
1   ...   51   52   53   54   55   56   57   58   ...   61




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