Добавил:
t.me Инфо для ГУАП студентов от меня: https://kafaka.notion.site/99e6d9b70ca74f7baef3daea17839e5a Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Z9411_КафкаРС_ГРАФЫ_ПР1.docx
Скачиваний:
15
Добавлен:
18.06.2024
Размер:
684.25 Кб
Скачать
  1. Для каждого из представлений (матрица смежности, список ребер, массив записей) вывести на экран размер содержащего их объекта в байтах.

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

Таблица 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

Рисунок 16 – Результат работы функции 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 – Подпрограмма определения времени работы функций

# тест времени работы функций пункта 4

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, (0, 2, 4, 3))),

(get_chain_answer_by_l_edg, (l_edg, (0, 2, 4, 3))),

(get_chain_answer_by_graph_info, (g_info, (0, 2, 4, 3))),

(get_peaks_weight_more_value_by_adj_mat, (adj_mat, 10)),

(get_peaks_weight_more_value_by_l_edg, (peaks, l_edg, 10)),

(get_peaks_weight_more_value_by_graph_info, (peaks, g_info, 10)),

(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), 'секунд')

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

Вывод

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

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

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

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

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

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

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

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

Во время работы я столкнулся с некоторыми трудностями, которые, однако, помогли мне лучше понять материал. Например, в начале было сложно освоить различные представления графов, но после практического применения этих знаний, я смог уверенно работать с матрицей смежности, списком ребер и массивом записей. Работа показалась мне интересной и в то же время не очень простой из-за необходимости написания кода.

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

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