• ПРОЕКТИРОВАНИЕ И АНАЛИЗ АЛГОРИТМОВ Тема
  • Ташкент – 2023 Тема
  • I. ОБЪЯСНЕНИЕ Алгоритм Крускала
  • II. РЕАЛИЗАЦИЯ АЛГОРИТМА
  • Graph
  • Алгоритм Крускала




    Download 268.77 Kb.
    Sana17.05.2023
    Hajmi268.77 Kb.
    #60931
    TuriСамостоятельная работа
    Bog'liq
    Berdiyev Nodir Kruskal algoritimi
    shoxida kurs ishi, 4-kurs OMK, Hujjatlarni tayyorlash va ularning bosqichlari, 1-Laboratoriya ishi 2, Jarislardi sholkemlestiriw., O, baxrom abdujalilov, Қодиров А, “Kartashunoslik” fanidan amaliy dars uchun tayorlangan taqdimot -www.fayllar.org, 1-Raqamli sxemotexnika faniga kirish (1), Hello World, Musoxon, 1-MT Raimov Bobur GRIXT, I va M.1 (1)

    O‘ZBEKISTON RESPUBLIKASI RAQAMLI TEXNOLOGIYALAR VAZIRLIGI
    MUHAMMAD AL-XORAZMIY NOMIDAGI TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI

    1



    1




    Самостоятельная работа по предмету
    ПРОЕКТИРОВАНИЕ И АНАЛИЗ АЛГОРИТМОВ
    Тема: Алгоритм Крускала


    Магистрант: Бердиев Нодирхужа
    Докладчик: Проф.Рахимов Нодир
    Ташкент – 2023
    Тема: АЛГОРИТМ КРУСКАЛА
    План:
    1. ОБЪЯСНЕНИЕ
    2. РЕАЛИЗАЦИЯ АЛГОРИТМА
    3. РЕАЛЬНЫЙ ПРИМЕР, В КОТОРОМ ПРИМЕНЯЕТСЯ АЛГОРИТМ КРУСКАЛА


    I. ОБЪЯСНЕНИЕ

    Алгоритм Крускала используется для построения минимального остова графа. Он работает следующим образом: сначала все ребра графа сортируются по весу от меньшего к большему. Затем алгоритм последовательно рассматривает каждое ребро по порядку и добавляет его в остовный граф, если оно соединяет две разные компоненты связности (т.е. две разные части графа, которые еще не соединены друг с другом). Если же ребро соединяет две вершины, которые уже принадлежат одной и той же компоненте связности, то оно не добавляется, так как добавление его создаст цикл в графе.
    В итоге алгоритм выдаст минимальный набор ребер, который соединяет все вершины графа и имеет наименьшую сумму весов. Этот набор ребер называется минимальным остовным деревом графа.



    II. РЕАЛИЗАЦИЯ АЛГОРИТМА

    Пример реализации алгоритма Крускала на языке программирования C++:

    #include
    #include
    #include

    using namespace std;

    struct Edge {
    int src, dest, weight;
    };

    class Graph {


    public:
    vector edges;
    int V;

    Graph(int V) {


    this->V = V;
    }

    void addEdge(int src, int dest, int weight) {


    Edge edge = {src, dest, weight};
    edges.push_back(edge);
    }

    vector kruskalMST() {


    vector result;
    vector parent(V);
    for (int i = 0; i < V; i++) {
    parent[i] = i;
    }

    sort(edges.begin(), edges.end(), [](Edge a, Edge b) {


    return a.weight < b.weight;
    });

    int i = 0;


    while (result.size() < V - 1) {
    Edge next_edge = edges[i++];
    int x = find(parent, next_edge.src);
    int y = find(parent, next_edge.dest);

    if (x != y) {


    result.push_back(next_edge);
    parent[x] = y;
    }
    }
    return result;
    }

    private:
    int find(vector &parent, int i) {


    if (parent[i] == i) {
    return i;
    }
    return find(parent, parent[i]);
    }
    };

    int main() {


    Graph g(4);
    g.addEdge(0, 1, 10);
    g.addEdge(0, 2, 6);
    g.addEdge(0, 3, 5);
    g.addEdge(1, 3, 15);
    g.addEdge(2, 3, 4);

    vector result = g.kruskalMST();


    for (auto edge : result) {
    cout << edge.src << " - " << edge.dest << " : " << edge.weight << endl;
    }
    return 0;
    }

    Эта реализация создает класс Graph, содержащий список ребер и метод kruskalMST(), который находит минимальное остовное дерево графа.


    Метод kruskalMST() сначала сортирует ребра по весу и затем последовательно добавляет ребра в остовное дерево, проверяя при этом, не создает ли добавление ребра цикл.
    Метод find() используется для быстрого определения, в какой компоненте связности находится вершина.


    III. РЕАЛЬНЫЙ ПРИМЕР, В КОТОРОМ ПРИМЕНЯЕТСЯ АЛГОРИТМ КРУСКАЛА

    Алгоритм Крускала широко применяется в различных областях, в которых требуется нахождение минимального остовного дерева графа.


    Некоторые примеры областей, в которых используется алгоритм Крускала, включают:


    1. Сетевое планирование: алгоритм Крускала может использоваться для построения минимального остовного дерева в транспортных сетях, таких как дороги и трубопроводы.




    1. Информационные технологии: алгоритм Крускала может использоваться в сжатии данных и визуализации сетей.



    2. Теория игр: алгоритм Крускала может быть использован в играх с большим количеством игроков, где требуется нахождение минимального остовного дерева для определения наилучшего пути передачи ресурсов.




    1. Математика и теория графов: алгоритм Крускала используется для доказательства теорем о связности графов и определении минимальной длины пути в графе.


    1. Маркетинг и исследование: алгоритм Крускала может быть использован для определения минимальной суммы затрат на рекламу в социальных сетях, где требуется определить наименьшее количество контактов с потенциальными клиентами для достижения целей маркетинговой компании.

    Реальный пример, в котором применяется алгоритм Крускала, - это проектирование транспортных сетей, например, газопроводов.


    Представьте, что вы должны спроектировать газопроводную сеть, соединяющую несколько городов. Каждый город представляет вершину в графе, а расстояние между городами представляет вес ребер. Ваша задача - определить минимальную длину трубопровода, который нужен для соединения всех городов.
    В этом случае вы можете использовать алгоритм Крускала для нахождения минимального остовного дерева графа. Алгоритм Крускала найдет минимальную сумму весов ребер, которые нужно использовать для связывания всех городов.

    Download 268.77 Kb.




    Download 268.77 Kb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    Алгоритм Крускала

    Download 268.77 Kb.