
Цель работы
Изучение представление графов в ЭВМ при помощи матрицы смежности, множества пар вершин и массива структур. Визуализация графов.
Запись матрицы смежности
Записывается матрица смежности согласно варианту 14, выданным преподавателем. Вариант работы представлен на рисунке 1, матрица смежности на рисунке 2.
Рисунок 1 – Граф, вариант 14
Рисунок 2 – Матрица смежности
Ход работы
Создается функция get_list_edges, которая по матрице смежности, выдаёт список рёбер с её весом. Переменные, используемые в функции, представлены в таблице 1. На рисунке 3 представлен результат работы этой фукнции. Листинг функции представлен в Приложении.
Таблица 1 – Переменные функции get_list_edges
-
Название
Тип
Комментарий
df
DataFrame
Параметр функции, матрица смежности
edges_list
list
Список рёбер с их весами
Рисунок 3 – Список рёбер функции
Создается функция info_graph, позволяющую представить граф в виде массива записей, основываясь на заданной матрице смежности. Каждой вершине графа соответствует запись. В каждой такой записи обязательным является вывод следующих параметров вершины графа: № вершины, подпись/имя вершины, количество детей / родителей /соседей, номера вершин детей / родителей / соседей, веса исходящих / входящих / инцидентных ребер. Переменные, используемые в функции, представлены в таблице 2. На рисунке 4 представлен результат работы этой функции. Листинг функции представлен в Приложении.
Таблица 2 – Переменные функции info_graph
-
Название
Тип
Комментарий
df
DataFrame
Параметр функции, матрица смежности
data_list
list
Список всех собранных данных
parents_list
list
Список родителей вершин
child_list
list
Список детей вершин
child_weights_list
list
Список весов ребер к детям
parents_weight_list
list
Список весов ребер к родителям
Рисунок 4 – Матрица записей
Создается функция find_neighbours_matrix, которая по матрице смежности, выдаёт список соседей заданной вершины. Переменные, используемые в функции, представлены в таблице 3. Листинг функции представлен в Приложении.
Таблица 3 – Переменные функции find_neighbours_matrix
-
Название
Тип
Комментарий
df
DataFrame
Параметр функции, матрица смежности
graph_index
int
Номер вершины, по которой ищутся соседи; параметр функции
neighbours_list
list
Список соседних вершин
Создается функция find_chain_matrix, которая по матрице смежности, выдаёт ответ, есть ли в заданной последовательности вершин цепь. Переменные, используемые в функции, представлены в таблице 4. Листинг функции представлен в Приложении.
Таблица 4 – Переменные функции find_chain_matrix
-
Название
Тип
Комментарий
df
DataFrame
Параметр функции, матрица смежности
vertexes
list
Последовательность, содержащая набор вершин; параметр функции
Создается функция find_vertexes_edge_sum_matrix, которая по матрице смежности ищет вершины, сумма инцидентных ребер которых больше заданной в матрице. Переменные, используемые в функции, представлены в таблице 5. Листинг функции представлен в Приложении.
Таблица 5 – Переменные функции find_vertexes_edge_sum_matrix
-
Название
Тип
Комментарий
df
DataFrame
Параметр функции, матрица смежности
fixed_number
int
Заданное значение для сравнения, параметр функции
vertexes
list
Последовательность, содержащая набор вершин
Создается функция find_sum_edges_matrix, которая по матрице смежности ищет количество вершин в графе. Переменные, используемые в функции, представлены в таблице 6. Листинг функции представлен в Приложении.
Таблица 6 – Переменные функции find_sum_edges_matrix
-
Название
Тип
Комментарий
df
DataFrame
Параметр функции, матрица смежности
sum_edges
int
Количество ребер
На рисунке 5 представлены результаты работы последних четырёх описанных функций.
Рисунок 5 – Результат работы функций с матрицей смежности
Создается функция find_neighbours_edges, которая по списку ребер, выдаёт список соседей заданной вершины. Переменные, используемые в функции, представлены в таблице 7. Листинг функции представлен в Приложении.
Таблица 7 – Переменные функции find_neighbours_edges
-
Название
Тип
Комментарий
edges_list
DataFrame
Параметр функции, список ребер
vertex
int
Номер вершины, по которой ищутся соседи; параметр функции
neighbours_list
list
Список соседних вершин
Создается функция find_chain_edges, которая по списку ребер, выдаёт ответ, есть ли в заданной последовательности вершин цепь. Переменные, используемые в функции, представлены в таблице 8. Листинг функции представлен в Приложении.
Таблица 8 – Переменные функции find_chain_edges
-
Название
Тип
Комментарий
edges_list
DataFrame
Параметр функции, матрица смежности
vertexes
list
Последовательность, содержащая набор вершин; параметр функции
count
int
Переменная, хранящее количество ребер в пути
Создается функция find_vertexes_edge_sum_edges, которая по списку ребер ищет вершины, сумма инцидентных ребер которых больше заданной в матрице. Переменные, используемые в функции, представлены в таблице 9. Листинг функции представлен в Приложении.
Таблица 9 – Переменные функции find_vertexes_edge_sum_matrix
-
Название
Тип
Комментарий
edges_list
DataFrame
Параметр функции, список ребер
fixed_number
int
Заданное значение для сравнения, параметр функции
vertexes
list
Последовательность, содержащая набор вершин
sum
int
Промежуточная переменная
Создается функция find_sum_edges_edges, которая по списку ребер ищет количество вершин в графе. Переменные, используемые в функции, представлены в таблице 10. Листинг функции представлен в Приложении.
Таблица 10 – Переменные функции find_sum_edges_edges
-
Название
Тип
Комментарий
edges_list
DataFrame
Параметр функции, список ребер
На рисунке 6 представлены результаты работы последних четырёх описанных функций.
Рисунок 6 - Результат работы функций со списком рёбер
Создается функция find_neighbours_datalist, которая по таблице данных, выдаёт список соседей заданной вершины. Переменные, используемые в функции, представлены в таблице 11. Листинг функции представлен в Приложении.
Таблица 11 – Переменные функции find_neighbours_datalist
-
Название
Тип
Комментарий
data
DataFrame
Параметр функции, таблица данных
vertex_index
int
Номер вершины, по которой ищутся соседи; параметр функции
vertexes
list
Список соседних вершин
Создается find_chain_datalist, которая по таблице данных, выдаёт ответ, есть ли в заданной последовательности вершин цепь. Переменные, используемые в функции, представлены в таблице 12. Листинг функции представлен в Приложении.
Таблица 12 – Переменные функции find_chain_datalist
-
Название
Тип
Комментарий
data
DataFrame
Параметр функции, таблица данных
vertexes
list
Последовательность, содержащая набор вершин; параметр функции
count
int
Переменная, хранящее количество ребер в пути
Создается функция find_vertexes_edge_sum_datalist, которая по таблице данных ищет вершины, сумма инцидентных ребер которых больше заданной в матрице. Переменные, используемые в функции, представлены в таблице 13. Листинг функции представлен в Приложении.
Таблица 13 – Переменные функции find_vertexes_edge_sum_datalist
-
Название
Тип
Комментарий
data
DataFrame
Параметр функции, список ребер
fixed_number
int
Заданное значение для сравнения, параметр функции
vertexes
list
Последовательность, содержащая набор вершин
count
int
Промежуточная переменная
Создается функция find_sum_edges_datalist, которая по таблице данных ищет количество вершин в графе. Переменные, используемые в функции, представлены в таблице 14. Листинг функции представлен в Приложении.
Таблица 14 – Переменные функции find_sum_edges_datalist
-
Название
Тип
Комментарий
data
DataFrame
Параметр функции, список ребер
count
int
Промежуточная переменная
На рисунке 7 представлены результаты работы последних четырёх описанных функций.
Рисунок 7 - Результат работы функций со матрицей данных
Создается функция, выводящую визуализацию графа на основе матрицы смежности. Результат представлен на рисунке 8.
Рисунок 8 – Визуализация графа
Для каждого представления подсчитывается размер содержащего их объекта в байтах. Это представлено на рисунке 9.
Рисунок 9 – Размеры представлений
Однозначным победителем в размере оказался список ребер – он весит меньше всех.
Подсчитывается время выполнения подпрограмм, реализующих различную обработку с разными представлениями, в цикле 100 раз. Результат представлен на рисунке 10.
Рисунок 10 – Результат работы каждой подпрограммы каждого представления
В данном случае первенство лидера берёт список рёбер, так как он занимает меньше места и быстрее выполняется, но для работы и создания функций лучше всего именно матрица записей, так как она нагляднее представляет информацию.