Добавил:
t.me Инфо для ГУАП студентов от меня: https://kafaka.notion.site/99e6d9b70ca74f7baef3daea17839e5a Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Z9411_КафкаРС_ГРАФЫ_ПР1.docx
Скачиваний:
15
Добавлен:
18.06.2024
Размер:
684.25 Кб
Скачать
  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 – Результат работы подпрограммы построения графа

  1. Написал подпрограмму, позволяющую представить граф в виде массива записей, основываясь на заданной матрице смежности. Каждой вершине графа соответствует запись.

Вывел полученный массив записей в понятном пользователю виде таблицы. Для создания таблицы записей использовали пакет 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 – Результат работы подпрограммы, представляющей граф в виде массива записей

Соседние файлы в предмете Построение и анализ графовых моделей