MEDICAL SCIENCES / <<Ш^Ш(МиМ~ЛШ®Ма1>#Ш(№)),2(0]9
УДК: 004.415.25
Родкина Э. А., Завражнова М. В., Шошина А. В.
Национальный исследовательский ядерный университет "МИФИ"
DOI: 10.24411/2520-6990-2019-10597 РАЗРАБОТКА МОДУЛЯ-ЗАДАНИЯ "ПОСТРОЕНИЕ ГРАФА ПО МАТРИЦЕ СМЕЖНОСТИ" ДЛЯ ЛАБОРАТОРНОГО КОМПЛЕКСА GRAPHLABS
Rodkina E. A., Zavrajnova M. V., Shoshina A. V.
National research nuclear university "MEPhl"
DEVELOPMENT OF MODULE "CREATION OF GRAPH BY ADJACENCY MATRIX" FOR
LABORATORY COMPLEX GRAPHLABS
Аннотация
В статье описаны результаты реализации модуля-задания для проверки знаний по университетскому курсу "Теория графов", рассмотрена модификация алгоритма визуализации графа на основе окружности и алгоритма автоматизированной проверки. Abstract
The article describes the results of realization of module for testing knowledges in theory of graphs, shows modification of graph visualization and automatic checking algorithms.
Ключевые слова: лабораторный комплекс, модуль, граф, матрица смежности, алгоритм визуализации, алгоритм автоматизированной проверки.
Key words: laboratory complex, module, graph, adjacency matrix, graph visualization algorithm, automatic checking algorithm.
Введение
Графы впервые встречаются в письмах Леонардо Эйлера, где он предлагает решение задачи о семи кенигсбергских мостах [5, с.13]. Сам термин был введен Джеймсом Джозефом Сильвестром в 1878 году [5, с.13]. Сейчас теория графов - наука, широко применяющаяся в программировании, что подчеркивает ее актуальность в нынешнем веке 1Т-технологий.
Практическое применение графов достаточно обширно. На основе данного математического объекта могут быть реализованы алгоритмы поиска решений, разрешения зависимостей. В частности, матрица смежности (простейшая модель связанной системы, учитывающая не только связь между элементами системы, но и направление связи) используется в мобильных приложениях для построения маршрутов.
Основная цель данной работы - разработка модуля построения графа по матрице смежности для проверки знаний студентов по курсу "Теория графов". Непосредственно к задачам относятся:
• Анализ структуры и средств комплекса ОгарЬЪаЬБ.
• Выбор и модификация алгоритмов отри-совки и автоматизированной проверки;
• Реализация и тестирование модуля.
Структура лабораторного комплекса
GraphLabs
Лабораторный комплекс GraphLabs представляет собой сайт, пользовательский интерфейс которого включает форму для входа на сайт (после ее заполнения происходит переход в личный кабинет студента с доступными к выполнению лабораторными работами). Сами лабораторные - это модули, реализованные на языке JavaScript. Интерфейс каждого модуля включает в себя панель инструментов, рабочую область, задание и панель с полученной оценкой.
Лабораторный комплекс включает следующие библиотеки: Core.Graphs - модуль, реализующий логику работы с графами, Core.GraphVisualizer -модуль, реализующий расчет координат при визуализации, Core.Template - шаблон для создания модулей, Core.Lib - библиотека визуальных компонентов.
На рисунке 1 можно видеть небольшую схему, где изображена взаимосвязь компонентов лабораторного комплекса.
Рис. 1 - Взаимосвязь компонентов ОгарЫаЪз
Все модули на схеме наследуются от шаблона, а шаблон использует библиотеки Core.GraphVisual-izer и Core.Graph. Разрабатываемый модуль (Tasks.GraphByAdjacencyMatrix) также использует Core.Lib для отображения матрицы в качестве задания для студента.
Описание алгоритма визуализации графа Для визуализации графа в лабораторном комплексе используется алгоритм отрисовки вершин по кругу [1, с. 119], поскольку он несколько проще в реализации, чем иные наиболее распространенные ([1, с.119], [1, с.120], [2]): в его основе лежат
всем известные математические формулы для правильного многоугольника, не требуются предварительные действия.
Алгоритм (рис.2) принимает на вход количество вершин, которые необходимо отрисовать.
1. Если вершин нет, то мы не выполняем операций.
2. Если вершина 1, то вычисляем координаты центра экрана по формулам:
' (1),
Ус
width
2
height
(2),
где width и height - ширина и высота экрана.
Рис. 2 - Алгоритм работы кругового визуализатора
2
MEDICAL SCIENCES /
3. Если вершин строго больше одной, то определяется угол между вершинами в отрисованной модели по формуле:
2п /оч
<Р=Т (3),
где N - количество вершин. Радиусы вершин и окружности, на которой будут располагаться вершины, определяются по формулам:
Г = ■
R =
(min(width,height)-r*2)
(4),
(5).
Дальше для каждой вершины из графа в массив модельных координат добавляется координата
в зависимости от предыдущей координаты вершины и смещения по окружности на угол между вершинами. Начальное значение координаты определяется при значении угла <р = 0.
Описание алгоритма автоматизированной проверки
Были проанализированы несколько алгоритмов автоматизированной проверки ([3], [4], [6]), после чего в качестве основы выбран алгоритм из модуля "Построение матрицы смежности на основе графа" [6], поскольку он максимально адаптирован к лабораторному комплексу GraphLabs.
Алгоритм (рис.3) состоит из следующих ша-
2
Рис.3 - Алгоритм проверки модуля
"Построение графа по матрице смежности"
1. получаем данные о графе и матрице из модели в Redux Storage;
2. начинаем с элемента матрицы, который находится на первой строке и в первом столбце, штраф равен нулю; index=0; jndex=0;
3. если index больше или равен размеру матрицы, то завершаем работу;
4. если jndex больше или равен размеру матрицы, то jndex=index, index=index+1, переходим к шагу 5;
5. если index<jndex, то переходим к шагу 6. Если нет - переходим к шагу 10;
6. если элемент в ячейке матрицы на пересечении строки index и столбца jndex равен единице, то переходим к шагу 7 и jndex=jndex+1. Если равен нулю - переходим к шагу 11:
7. если нет ребра между вершинами с номерами index и jndex, то переходим к шагу 8. Если есть - шаг 9;
8. увеличиваем штраф на 5 и переходим к шагу 9;
9. jndex=jndex+1 и переходим к шагу 3;
10. если index=jndex, то переходим к шагу 11. Если нет - шаг 9;
11. если есть ребро между вершинами с номерами index и jndex, то переходим к шагу 8. Если нет - шаг 9;
12. завершаем работу.
Результаты реализации и тестирования модуля
На рисунке 4 можно увидеть итоговую структуру модуля "Построение графа по матрице смежности". Основной класс, который содержит модуль, носит название App.
Рис.4 - UML-диаграмма, характеризующая модуль
В ходе реализации модуля были выполнены следующие шаги:
1. Модифицирована панель инструментов
(рис.5), а именно: добавлены кнопки "Add vertex"
"Choose first vertex", "Choose second vertex", "Add edge", "Remove vertex", "Remove vertex";
Рис.5 - Интерфейс модуля с модифицированной моделью инструментов
2. Разработана новая модель для задания -матрица смежности (рис.6);
MEDICAL SCIENCES / <<Ш^Ш(МиМ~ЛШ®Ма1>#Ш№)),2(0]9
Рис. 6 - Интерфейс модуля с заданием-матрицей
3. Разработан алгоритм автоматизированной проверки (рис.7);
Рис. 7 - Интерфейс модуля, где рассчитана оценка за выполнение задания
4. Добавлена возможность выделения вершин цветом (рис.8).
Рис.8 - Интерфейс модуля с выделенными вершинами
Также была составлена схема тестирования модуля, результаты которой можно увидеть в таблице 1.
<<ЭД1ШадУМ-^©1УГМ&1>>#Щ42)Ш]]9 / MEDICAL SCIENCES_
Таблица 1.
Результаты тестирования модуля
Номер кейса Результат прохождения
Проверка отображения матрицы Пройден
Проверка наличия и внешнего соответствия кнопок Пройден
Проверка отображения компонентов на экране Пройден
Проверка отображения графа с разным количеством вершин Пройден
Проверка отображения ребра Пройден
Проверка отсутствия ребра при нажатии на вершины, которые оно будет соединять Пройден
Проверка отсутствия ребра при нажатии на кнопку "Добавить ребро" Пройден
Проверка возможности перетаскивать вершины Пройден
Проверка возможности растягивать ребра при перемещении вершин Пройден
Проверка внешнего отображения вершин Пройден
Проверка внешнего отображения ребер Пройден
Проверка корректности вычисления результата Пройден
Проверка отсутствия ребра при последовательном нажатии на ребро и на кнопку "Удалить ребро" Пройден
Проверка отсутствия изменений на графе при нажатии на кнопку "Удалить ребро" Пройден
Проверка смены цвета вершины на красный при однократном нажатии на нее Пройден
Проверка возвращения к оригинальному вершины при двукратном нажатии на нее Пройден
Таким образом, функционал модуля работает корректно, все основные задачи работы выполнены.
Заключение
Как уже было упомянуто выше, основная цель работы - создание модуля создания графа по матрице смежности. Для ее достижения на данный момент были решены следующие задачи: изучена структура лабораторного комплекса GraphLabs, выбраны и модифицированы алгоритм визуализации графов и автоматизированной проверки.
Основной областью применения реализуемого модуля является образование, так как весь лабораторный комплекс направлен на закрепление практических навыков по теории графов у студентов, в частности на обучение построению графа по матрице смежности.
В качестве практической значимости можно упомянуть изучение структуры графа, которая встречается во многих повседневных ситуациях (метро, генеалогическое древо и т.п.), а также изучению задач, где используется матрица смежности (например, определение расстояний между вершинами - построение маршрутов, минимизация ДНФ - представление данных для обработки алгоритмами).
Список литературы
1. Демешко М. В., Демин А. Ю. Программная реализация алгоритмов визуализации графов // Технологии Microsoft в теории и практике программирования: тезисы докл. Всерос. конф. (Томск, 22-23 марта 2016 г.). - Томск, 2016. - С. 119-122.
2. Пупырев С. Н. Модели, алгоритмы и программный комплекс визуализации сложных сетей: Автореф. дис. канд. физ.-мат. наук. - Екатеринбург, 2009. - 21 с.
3. Реализация графов и деревьев на Python. [Электронный ресурс] - URL: https://habr.com/ru/post/112421/ (дата обращения: 24.06.2019).
4. Топ-15 алгоритмических задач, реализованных на C++. [Электронный ресурс] - URL: https://proglib.io/p/algorithm-tasks/ (дата обращения: 24.06.2019).
5. Харари Ф. Теория графов. - М.: Мир, 1973. - 300 с.
6. Tasks.AdjacencyMatrixByGraph. Task module for GraphLabs. [Электронный ресурс] - URL: https://github.com/GraphLabsSuite/Tasks.Adjacency MatrixByGraph/blob/master/src/App.tsx (дата обращения: 24.06.2019).