Добавил:
t.me Инфо для ГУАП студентов от меня: https://kafaka.notion.site/99e6d9b70ca74f7baef3daea17839e5a Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Z9411_Чурилов_ПиАГМ_ПР1

.docx
Скачиваний:
9
Добавлен:
10.11.2024
Размер:
1.43 Mб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

федеральное государственное автономное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ

КАФЕДРА 41

ОЦЕНКА

ПРЕПОДАВАТЕЛЬ

старший преподаватель

М. Н. Шелест

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ПРАКТИЧЕСКОЙ РАБОТЕ №1

Представление графов в ЭВМ

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

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. №

Z9411

А.С.Чурилов

номер группы

подпись, дата

инициалы, фамилия

Студенческий билет № 2019/3684

Санкт-Петербург 2024

Цель работы:

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

Ход работы:

Возьмём указанный в работе вариант задания (рисунок 1)

Рисунок 1 – Мой вариант графа

Примечание для проверяющего – Две разные точки названы одинаково (Div), я так понимаю ошибка, называю вторую Div(2).

Составим вручную матрицу смежности (таблица 1):

Таблица 1

X

Y

Plus

Div

K

Multiplic

Z

Div(2)

A

X

0

0

2

0

0

0

0

0

0

Y

0

0

7

0

0

0

0

0

0

Plus

0

0

0

9

0

9

0

0

0

Div

0

0

0

0

0

0

0

0

0

K

0

0

0

3

0

3

0

3

0

Multiplic

0

0

0

0

0

0

0

72

24

Z

0

0

0

0

0

8

0

0

0

Div(2)

0

0

0

0

0

0

0

0

24

A

0

0

0

0

0

0

0

0

0

Внесём в редактор кода матрицу смежности и список вершин (рисунок 2).

Рисунок 2 – Матрица смежности и список вершин

Напишем подпрограмму, создающую список рёбер из матрицы смежности (рисунок 3).

Рисунок 3 – Программа создания списка рёбер из матрицы смежности

Результат работы программы представлен на рисунке 4.

Рисунок 4 – Результат работы программы

Визуализируем граф с помощью полученного списка рёбер, программный код представлен на рисунке 5.

Рисунок 5 – Код программы построения графа

Результат работы программы представлен на рисунке 6.

Рисунок 6 – Результат работы программы

Полученный граф совпадает с исходным, значит всё сделано верно.

Напишем подпрограмму, создающую список записей из матрицы смежности (рисунок 7).

Рисунок 7 – Программа создания массива записей из матрицы смежности

Результат работы программы представлен на рисунке 8.

Рисунок 8 – Результат работы программы

Визуализируем граф с помощью полученного массива записей, программный код представлен на рисунке 9.

Рисунок 9 – Код программы построения графа

Результат работы программы представлен на рисунке 10.

Рисунок 10 – Результат работы программы

Полученный граф совпадает с исходным, значит всё сделано верно.

Для каждого из представлений (матрица смежности, список рёбер, массив записей) напишем подпрограммы в соответствии с заданием.

Код программы по поиску всех соседей вершины для матрицы смежности представлен на рисунках 11, 12.

Рисунок 11 – Код программы

Рисунок 12 – Код программы

Результат работы программы представлен на рисунке 13.

Рисунок 13 – Результат выполнения программы

Код программы по поиску всех соседей вершины для списка рёбер представлен на рисунке 14.

Рисунок 14 – Код программы

Результат работы программы представлен на рисунке 15.

Рисунок 15 – Результат выполнения программы

Код программы по поиску всех соседей вершины для массива записей представлен на рисунках 16, 17.

Рисунок 16 – Код программы

Рисунок 17 – Код программы

Результат работы программы представлен на рисунке 18.

Рисунок 18 – Результат выполнения программы

Код программы возвращающий список вершин, сумма весов инцидентных ребер которых больше заданной величины для матрицы смежности представлен на рисунке 19.

Рисунок 19 – Код программы

Результат работы программы представлен на рисунке 20.

Рисунок 20 – Результат выполнения программы

Код программы возвращающий список вершин, сумма весов инцидентных ребер которых больше заданной величины для списка рёбер представлен на рисунке 21.

Рисунок 21 – Код программы

Результат работы программы представлен на рисунке 22.

Рисунок 22 – Результат выполнения программы

Код программы возвращающий список вершин, сумма весов инцидентных ребер которых больше заданной величины для массива записей представлен на рисунке 23.

Рисунок 23 – Код программы

Результат работы программы представлен на рисунке 24.

Рисунок 24 – Результат выполнения программы

Код программы, возвращающий количество рёбер в графе для матрицы смежности представлен на рисунке 25.

Рисунок 25 – Код программы

Результат работы программы представлен на рисунке 26.

Рисунок 26 – Результат выполнения программы

Код программы, возвращающий количество рёбер в графе для списка рёбер представлен на рисунке 27.

Рисунок 27 – Код программы

Результат работы программы представлен на рисунке 28.

Рисунок 28 – Результат выполнения программы

Код программы, возвращающий количество рёбер в графе для массива записей представлен на рисунке 29.

Рисунок 2912 – Код программы

Результат работы программы представлен на рисунке 30.

Рисунок 30 – Результат выполнения программы

Для каждого представления (матрица смежности, список рёбер, массив записей) выведем размер объекта в байтах (рисунки 31-33).

Рисунок 31 – Размер матрицы смежности

Рисунок 32 – Размер списка рёбер

Рисунок 33 – Размер массива записей

Замерим время выполнения подпрограмм для всех исполнений.

Время выполнения функций по 1 миллиону раз для матрицы смежности приведено на рисунке 34.

Рисунок 34 – Время выполнения подпрограмм матрицы смежности

Время выполнения функций по 1 миллиону раз для списка рёбер приведено на рисунке 35.

Рисунок 35 – Время выполнения подпрограмм списка рёбер

Время выполнения функций по 1 миллиону раз для массива записей приведено на рисунке 36.

Рисунок 36 – Время выполнения подпрограмм массива записей

Время выполнения функций по созданию графа по 1 миллиону раз приведено на рисунке 37.

Рисунок 37 – Время выполнения подпрограмм создания графа

Вывод:

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

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

Как мы видим, нет универсального представления, ведь для его выбора нужно понимать какие задачи нам более важны и какие параметры (скорость или память)

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