
lab1_graphs
.pdf

1.Цель работы
Изучение представление графов в ЭВМ при помощи матрицы смежности, множества пар вершин и массива структур. Визуализация графов.
2.Запись матрицы смежности
Записывается матрица смежности согласно варианту 14, выданным преподавателем. Вариант работы представлен на рисунке 1, матрица смежности на рисунке 2.
Рисунок 1 – Граф, вариант 14
Рисунок 2 – Матрица смежности
3.Ход работы
Создается функция get_list_edges, которая по матрице смежности,
выдаѐт список рѐбер с еѐ весом. Переменные, используемые в функции,
представлены в таблице 1. На рисунке 3 представлен результат работы этой фукнции. Листинг функции представлен в Приложении.
Таблица 1 – Переменные функции get_list_edges
Название |
Тип |
Комментарий |
|
|
|
df |
DataFrame |
Параметр функции, матрица |
|
|
смежности |
|
|
|
|
2 |
|

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. Листинг функции
представлен в Приложении.
Таблица 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
Название |
Тип |
Комментарий |
|
|
|
|
4 |
|

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
Название |
Тип |
Комментарий |
|
|
|
|
5 |
|
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 |
Заданное |
значение |
для |
|
|
сравнения, параметр функции |
||
|
|
|
|
|
|
6 |
|
|
|

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 |
Список соседних вершин |
||
|
|
|
|
|
|
7 |
|
|
|
Создается 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 |
Промежуточная переменная |
|
|
|
|
|
|
|
8

Создается функция find_sum_edges_datalist, которая по таблице данных ищет количество вершин в графе. Переменные, используемые в функции,
представлены в таблице 14. Листинг функции представлен в Приложении.
Таблица 14 – Переменные функции find_sum_edges_datalist
Название |
Тип |
Комментарий |
|
|
|
data |
DataFrame |
Параметр функции, список ребер |
|
|
|
count |
int |
Промежуточная переменная |
|
|
|
На рисунке 7 представлены результаты работы последних четырѐх описанных функций.
Рисунок 7 - Результат работы функций со матрицей данных Создается функция, выводящую визуализацию графа на основе
матрицы смежности. Результат представлен на рисунке 8.
Рисунок 8 – Визуализация графа Для каждого представления подсчитывается размер содержащего их
объекта в байтах. Это представлено на рисунке 9.
Рисунок 9 – Размеры представлений
9

Однозначным победителем в размере оказался список ребер – он весит меньше всех.
Подсчитывается время выполнения подпрограмм, реализующих различную обработку с разными представлениями, в цикле 100 раз. Результат представлен на рисунке 10.
Рисунок 10 – Результат работы каждой подпрограммы каждого представления
В данном случае первенство лидера берѐт список рѐбер, так как он занимает меньше места и быстрее выполняется, но для работы и создания функций лучше всего именно матрица записей, так как она нагляднее представляет информацию.
4.Дополнительное задание
Также в рамках дополнительного задания создается функция dop_task,
которая по таблице данных ищет вершины в графе, у которых количество входящих в них ребер превышает количество исходящих на заданную величину. Переменные, используемые в функции, представлены в таблице
15. Листинг функции представлен в Приложении.
Таблица 15 – Переменные функции dop_task
Название |
Тип |
Комментарий |
|
|
|
data |
DataFrame |
Параметр функции, матрица |
|
|
|
|
10 |
|