Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПиАГ.docx
Скачиваний:
0
Добавлен:
16.05.2025
Размер:
1.09 Mб
Скачать
  1. Для каждого из представлений (матрица смежности, список ребер, массив записей) вывести на экран размер содержащего их объекта в байтах.

Функция view_objects_size для определения размера объектов, содержащих представления графа. Список использованных переменных в соответствии с таблицей 12, код в соответствии с листингом 13. Результат работы функций на рисунке 15.

Таблица 12 - Список переменных подпрограммы из Листинга 13

Название

Значение

adj_mat

Список значений матрицы смежности

l_edg

Список ребер графа

g_info

Массив записей графа

Листинг 13 – Подпрограмма определения размера объектов, содержащих

представления графа (матрица смежности, список ребер, массив значений)

# Узнать размер представлений графа def view_objects_size(adja_mat, l_edg, g_info): info = '\nРазмер представлений:\n\t- матрица смежности: ' + str(sys.getsizeof(adja_mat)) + \ ' байт;\n\t- список ребер: ' + str(sys.getsizeof(l_edg)) + \ ' байт;\n\t- массив записей: ' + str(sys.getsizeof(g_info)) + ' байт.' print(info) return info

Рисунок 15 - Результат работы функции view_objects_size

  1. Каждую подпрограмму, реализующую выполнение пункта 6 п/р (в том числе и для каждого представления графа), повторить 106 раз при постоянных входных параметрах. Засечь время выполнения каждой подпрограммы и оценить среднее время ее выполнения. Вывести полученные результаты на экран.

Функция func_time_test для определения времени работы функций. Список использованных переменных в соответствии с таблицей 13, код в соответствии с листингом 14. Результат работы функций в соответствии с рисунком 17.

Таблица 13 - Список переменных подпрограммы из Листинга 14

Название

Значение

adj_mat

Список значений матрицы смежности

peaks

Список вершин графа

l_edg

Список ребер графа

g_info

Массив записей графа

view

Список названий представлений графа

fun_name

Список названий функций

fun

Список функций с параметрами их вызова

f

Итератор по списку функций

Листинг 14 – Подпрограмма определения времени работы функций

def func_time_test(adj_mat, l_edg, g_info, peaks): view = ('в представлении графа матрица смежности' , 'в представлении графа список ребер' , 'в представлении графа массив записей') fun_name = ('поиска соседей' , 'проверки последовательности вершин на образование цепи' , 'поиска вершин, сумма инцидентных ребер которых больше заданного числа' , 'определения кол-ва ребер') fun = ( (get_neighbours_by_adj_mat, (adj_mat, peaks, 5)), (get_neighbours_by_l_edg, (5, l_edg)), (get_neighbours_by_graph_info, (5, g_info, peaks)), (get_chain_answer_by_adj_mat, (adj_mat, (1, 2, 3))), (get_chain_answer_by_l_edg, (l_edg, (1, 2, 3))), (get_chain_answer_by_graph_info, (g_info, (1, 2, 3))), (get_peaks_weight_more_value_by_adj_mat, (adj_mat, 8)), (get_peaks_weight_more_value_by_l_edg, (peaks, l_edg, 8)), (get_peaks_weight_more_value_by_graph_info, (peaks, g_info, 8)), (get_edge_count_by_adj_mat, (adj_mat,)), (get_edge_count_by_l_edg, (l_edg,)), (get_edge_count_by_graph_info, (g_info,)), ) for f in range(len(fun)): print('\nФункция', fun[f][0].__name__, fun_name[f // 3], view[f % 3]) start_time = time.time() for iter in range(10 ** 6): fun[f][0](*fun[f][1]) end_time = (time.time() - start_time) print('\tВремя выполнения функции 10^6 раз:', round(end_time, 3), 'секунд') print('\tСреднее время одного выполнения функции:', round(end_time / 10 ** 6, 8), 'секунд')

Рисунок 16 - Результат работы функции func_time_test

Вывод

В ходе выполнения практической работы были успешно освоены следующие навыки и знания:

  1. Был выбран граф и составлена его матрица смежности, которая была введена в ЭВМ в явном виде.

  2. Была написана подпрограмма для построения списка ребер из заданной матрицы смежности.

  3. Была выполнена визуализация графа, что позволило убедиться в его соответствии исходному графу.

  4. Была разработана подпрограмма, позволяющая представить граф в виде массива записей на основе заданной матрицы смежности. Полученный массив записей был выведен в понятном пользователю виде.

  5. Для каждого из представлений графа (матрица смежности, список ребер, массив записей) были написаны подпрограммы поиска и вывода на экран различных параметров графа.

  6. Был выведен на экран размер каждого из представлений графа в байтах.

  7. Было проведено тестирование времени выполнения каждой подпрограммы, что позволило оценить среднее время ее выполнения.

В результате выполнения работы были получены важные навыки работы с графовыми моделями, а также опыт использования различных представлений графов в ЭВМ. Это знание будет полезно для выполнения более сложных задач по анализу графовых моделей.