Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая алгоритм Краскала.docx
Скачиваний:
0
Добавлен:
28.12.2024
Размер:
45.81 Кб
Скачать

2. Хранение графа

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

Для курсовой работы был выбран способ хранения графа с помощью структуры ArrayList, реализованной в Лабораторной работе №1. Список хранит себе множество подсписков длины 3. В каждом подсписке записан вес ребра и две вершины, которые это ребро соединяет. Этот способ выбран из-за удобства сортировки рёбер в дальнейшем.

Разрабатываемая программа принимает на вход текстовый файл, содержащий в первой строке названия вершин, а в последующих матрицу смежности графа.

  1. Сортировка слиянием

Для сортировки рёбер по весу в работе используется сортировка слиянием.

Возможный объём данных в работе может достигать 2500 элементов, эта сортировка хорошо показывает себя на большом объёме данных.

Сортировка использует принцип «разделяй и властвуй». Задача разделяется на несколько подзадач меньшего размера, затем эти задачи решаются с помощью рекурсивного вызова или непосредственно, если их размер достаточно мал.

Более подробно алгоритм сортировки можно представить так:

  1. Сортируемый массив разбивается на две части примерно одинакового размера.

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

  3. Два упорядоченных массива половинного размера соединяются в один.

Алгоритм сортировки был реализован в Лабораторной работе №2.

  1. Алгоритм краскала

4.1 Остовное дерево

Цель курсовой работы – реализовать алгоритм поиска минимального остовного дерева графа.

Под минимальным остовным деревом в неориентированном связном взвешенном графе называется остовное дерево данного графа, имеющее минимальный возможный вес, где под весом понимается сумма весов входящих в него рёбер.

Для нахождения минимального остовного дерева существует несколько алгоритмов:

  1. Алгоритм Прима.

  2. Алгоритм Борувки.

  3. Алгоритм обратного удаления (получение минимального остовного дерева из связного рёберно взвешенного графа).

В курсовой работе используется алгоритм Краскала.

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

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

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

Заключение

При выполнении курсовой работы получены практические навыки работы с графами на языке Python.

В работе реализовано чтение графа из входного файла, который содержит матрицу смежности. Полученная матрица преобразуется в список рёбер, которые сортируются по весу. Для полученного графа был реализован алгоритм Краскала.

В курсовой работе выполнена поставленная задача: был реализован алгоритм поиска минимального остовного дерева на основе алгоритма Краскала с использованием собственных структур данных и применением алгоритма сортировки.

В работе продемонстрировано знание следующих вопросов: сортировка, построение системы непересекающихся множеств, хранение графа.