
- •Задание на курсовую работу
- •Аннотация
- •Содержание
- •Введение
- •1. Система непересекающихся множеств
- •1.1 Описание структуры
- •1.2 Способы оптимизации
- •2. Хранение графа
- •Сортировка слиянием
- •Алгоритм краскала
- •4.1 Остовное дерево
- •4.2 Алгоритм Краскала
- •Заключение
- •Список использованных источников
- •Приложение а исходный код программы
2. Хранение графа
Существует несколько способов хранения графов: списки смежности, матрицы смежности, матрицы инцидентности.
Для курсовой работы был выбран способ хранения графа с помощью структуры ArrayList, реализованной в Лабораторной работе №1. Список хранит себе множество подсписков длины 3. В каждом подсписке записан вес ребра и две вершины, которые это ребро соединяет. Этот способ выбран из-за удобства сортировки рёбер в дальнейшем.
Разрабатываемая программа принимает на вход текстовый файл, содержащий в первой строке названия вершин, а в последующих матрицу смежности графа.
Сортировка слиянием
Для сортировки рёбер по весу в работе используется сортировка слиянием.
Возможный объём данных в работе может достигать 2500 элементов, эта сортировка хорошо показывает себя на большом объёме данных.
Сортировка использует принцип «разделяй и властвуй». Задача разделяется на несколько подзадач меньшего размера, затем эти задачи решаются с помощью рекурсивного вызова или непосредственно, если их размер достаточно мал.
Более подробно алгоритм сортировки можно представить так:
Сортируемый массив разбивается на две части примерно одинакового размера.
Каждая из получившихся частей сортируется отдельно, например — тем же самым алгоритмом.
Два упорядоченных массива половинного размера соединяются в один.
Алгоритм сортировки был реализован в Лабораторной работе №2.
Алгоритм краскала
4.1 Остовное дерево
Цель курсовой работы – реализовать алгоритм поиска минимального остовного дерева графа.
Под минимальным остовным деревом в неориентированном связном взвешенном графе называется остовное дерево данного графа, имеющее минимальный возможный вес, где под весом понимается сумма весов входящих в него рёбер.
Для нахождения минимального остовного дерева существует несколько алгоритмов:
Алгоритм Прима.
Алгоритм Борувки.
Алгоритм обратного удаления (получение минимального остовного дерева из связного рёберно взвешенного графа).
В курсовой работе используется алгоритм Краскала.
4.2 Алгоритм Краскала
Алгоритм Краскала (Крускала) - эффективный алгоритм построения минимального островного дерева взвешенного связного неориентированного графа. Суть алгоритма заключается в выборе самых маленьких по весу рёбер графа до тех пор, пока мы не обойдём все вершины.
В начале текущее множество рёбер устанавливается пустым. Затем, пока это возможно, проводится следующая операция: из всех рёбер, добавление которых к уже имеющемуся множеству не вызовет появление в нём цикла, выбирается ребро минимального веса и добавляется к уже имеющемуся множеству. Когда таких рёбер больше нет, алгоритм завершён. Подграф данного графа, содержащий все его вершины и найденное множество рёбер, является его остовным деревом минимального веса.
Заключение
При выполнении курсовой работы получены практические навыки работы с графами на языке Python.
В работе реализовано чтение графа из входного файла, который содержит матрицу смежности. Полученная матрица преобразуется в список рёбер, которые сортируются по весу. Для полученного графа был реализован алгоритм Краскала.
В курсовой работе выполнена поставленная задача: был реализован алгоритм поиска минимального остовного дерева на основе алгоритма Краскала с использованием собственных структур данных и применением алгоритма сортировки.
В работе продемонстрировано знание следующих вопросов: сортировка, построение системы непересекающихся множеств, хранение графа.