- •Матрица смежности представлена в таблице 1.
- •Написал подпрограмму для построения списка ребер по заданной матрицы смежности.
- •Визуализировал заданный граф. Убедился в том, что он совпадает с исходным графом.
- •Написал подпрограмму, позволяющую представить граф в виде массива записей, основываясь на заданной матрице смежности. Каждой вершине графа соответствует запись.
- •Для каждого из представлений (матрица смежности, список ребер, массив записей) написал подпрограммы поиска и вывода на экран:
- •Для каждого из представлений (матрица смежности, список ребер, массив записей) вывести на экран размер содержащего их объекта в байтах.
- •Приложение а. Код программы
Визуализировал заданный граф. Убедился в том, что он совпадает с исходным графом.
Код подпрограммы в соответствии с листингом 4, список использованных переменных в соответствии с таблицей 3. Результат работы в соответствии с рисунком 3.
Таблица 3 – Список переменных подпрограммы из Листинга 4.
-
Название
Значение
adj_mat
Список значений матрицы смежности
peaks
Список названий вершин
g
Объект igraph содержащий граф
Листинг 4 – Подпрограмма построения графа
# Рисует график по МАТРИЦЕ СМЕЖНОСТИ def view_graph(adj_mat, peaks, curved_value = False): g = ig.Graph(directed=True) # создание ориентированного графа g.add_vertices(len(peaks)) # добавление вершин графа
# добавление идентификаторов и меток к вершинам for i in range(len(g.vs)): g.vs[i]["id"]= i g.vs[i]["label"]= peaks[i]
# получаем список ребер и их веса list_edges = get_list_edges_by_adjacency_matrix(adj_mat, peaks) # задаем ребра g.add_edges([(edge[0][0][0], edge[0][1][0]) for edge in list_edges]) # задаем веса ребер weights = [edge[1] for edge in list_edges] g.es['label'] = weights g.es['edge_width'] = weights g.es["curved"] = curved_value
# построение графика ig.plot(g, target='my_graph.png', bbox = (350,350), margin = 30, vertex_label_size = 10, vertex_size = 55, vertex_color = 'white') return 1 |
Рисунок
3 – Результат работы подпрограммы
построения графа
Написал подпрограмму, позволяющую представить граф в виде массива записей, основываясь на заданной матрице смежности. Каждой вершине графа соответствует запись.
Вывел полученный массив записей в понятном пользователю виде таблицы. Для создания таблицы записей использовали пакет pandas (в коде pd). Код подпрограммы в соответствии с листингом 5, список использованных переменных в соответствии с таблицей 4. Результат работы в соответствии с рисунком 4.
Таблица 4 – Список переменных подпрограммы из Листинга 5
-
Название
Значение
adj_mat
Список значений матрицы смежности
peaks
Список названий вершин
info
Временный массив с информацией о графе
row
Итератор по строкам матрицы смежности
children
Список кортежей с номерами вершин и весами ребер детей
конкретной вершины
parents
Список кортежей с номерами вершин и весами ребер
родителей конкретной вершины
neighbours
Список кортежей с номерами вершин и весами ребер соседней
(инцидентных вершин) конкретной вершины
col_name
Список названий столбцов вершины
g_info
Датафрейм хранящий массив записей о графе
Листинг 5 – Подпрограмма представления графа в виде массива записей
# представление графа в виде МАССИВА ЗАПИСЕЙ def get_array_of_graph_information(adj_mat, peaks): info = [] for row in range(len(adj_mat)): # находим по матрице смежности № и веса вершин детей, родителей и соседей children = [(i, adj_mat[row][i]) for i in range(len(adj_mat[row])) if adj_mat[row][i] != 0] parents = [(i, adj_mat[i][row]) for i in range(len(adj_mat)) if adj_mat[i][row] != 0] neighbours = tuple(set(children + parents)) # находим необходимые значения по полученным спискам вершин info.append([row , peaks[row] , *tuple(len(i) for i in [children, parents, neighbours]) , *tuple(tuple([j[0] for j in i]) for i in [children, parents, neighbours]) , *tuple(tuple([j[1] for j in i]) for i in [children, parents, neighbours]) ]) col_name = ['№ вершины', 'Подпись вершины', 'Кол-во детей', 'Кол-во родителей' , 'Кол-во соседей', '№ вершин детей', '№ вершин родителей' , '№ вершин соседей', 'Веса исходящих', 'Веса входящих', 'Веса инцидентных ребер'] g_info = pd.DataFrame(info, columns=col_name) return g_info |
Рисунок
5 – Результат работы подпрограммы,
представляющей граф в виде массива
записей
