Научная статья на тему 'Теория конечных графов и её приложения: математика или программирование?'

Теория конечных графов и её приложения: математика или программирование? Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
1215
106
i Надоели баннеры? Вы всегда можете отключить рекламу.
i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Теория конечных графов и её приложения: математика или программирование?»

Теория конечных графов и её приложения: математика или программирование?

Т.А. Панюкова, Южно-Уральский государственный университет, доцент, kwark@mail.ru;

Во многих вычислительных приложениях естественным образом используется не только набор элементов, но и набор связей между парами элементов. Отношения, которые вытекают из этих связей, порождают множество разнообразных задач [1], например:

1. существует ли путь, состоящий из связей от одного элемента к другому;

2. к каким элементам можно перейти из заданного элемента;

3. каков кратчайший путь от одного элемента к другому...

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

Потребности программирования определяют развитие «стыка» информатики и математики (алгебры, математической логики, теории игр, общей теории систем и т.д.). Эта область знаний не исчерпывается теорией графов, однако она является характерной, основополагающей. Алгоритмическое изучение графов - весьма молодая отрасль знаний. Даже простейшие алгоритмы на графах позволяют получить полезные компьютерные программы.

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

Без графов нельзя обойтись в современном программировании при создании операционных систем, разработке структур данных и построения эффективных алгоритмов [2].

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

В данной статье рассмотрим особенности построения курса «Теория конечных графов и ее применения» для направления 010300 «Фундаментальная информатика и информационные технологии», а также магистров по направлению 010400 «Прикладная математика и информати-

ка» (профиль «Математическое и информационное обеспечение экономической деятельности»).

Цели и задачи изучения дисциплины

Целью преподавания дисциплины «Теория конечных графов и ее применения» является формирование у студентов теоретических знаний, практических навыков по вопросам, касающимся построения математических моделей с помощью теории графов и программной реализации алгоритмов теории графов.

В результате изучения дисциплины студент должен:

Знать теоретические основы теории конечных графов и теории алгоритмов.

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

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

Владеть языками программирования для компьютерной реализации разработанных алгоритмов.

Уметь использовать полученные знания для решения прикладных и теоретических задач, анализировать сложность разработанного алгоритма, доказывать корректность разработанного алгоритма.

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

Таким образом, данная дисциплина является одним из важных связующих звеньев между теоретическими дисциплинами и IT-дисциплинами.

Компьютерные программы для решения задач теории графов

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

Например, существует разработка преподавателя Саратовского университета Печенкина В.В., называемая Grin [3]. Grin является простой, доступной, полезной для студентов и преподавателей университетов программой. Она может быть использована не только математиками, но и экономистами, социологами, всеми, кто так или иначе интересуется дискретными моделями. Одними из основных достоинств программы

является простой и удобный интерфейс, легкость в освоении и работе (рис.1).

Рис.1. Программа Grin для решения задач на графах

С помощью Grin можно создавать, интерактивно редактировать и исследовать графы и сети (сетью в программе называют взвешенные графы, т.е. графы у которых все ребра имеют вес). Графы сохраняются на внешние носители и легко могут быть загружены. Справочная система содержит информацию не только по самой программе, но и подробную справку по теории графов и оптимизационным задачам теории сетей.

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

Следовательно, используя Grin, нет возможности с ее помощью продемонстрировать решение задач алгоритмизации с использованием инструментария теории графов.

Еще одним средством для работы с графами является библиотека GOBLIN [4]. Это библиотека классов, предоставляющая функции решения задач на графах. Данная программа является программным обеспечением с открытым исходным кодом и распространяется под лицензией GNU LGPL.

Библиотека GOBLIN реализует самые эффективные на сегодняшний момент полиномиальные алгоритмы для решения следующих задач:

• нахождение кратчайшего пути в графах и в двудольных графах, имеющих отрицательные веса ребер;

• нахождение минимальных остовных деревьев и 1-деревьев;

• нахождение решений задач о назначении всех типов;

• нахождение паросочетаний, b-сочетаний и f-факторов;

• нахождение решений многих других задач.

Библиотека также включает средства для решения некоторых NP-трудных задач, таких как симметрическая и асимметрическая задачи коммивояжера, задача о раскраске и пр.

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

Программа Graph Calculator, студенческий проект

Для того чтобы дать возможность студентам самостоятельно запрограммировать классические алгоритмы, был создан проект Graph Calculator. Реализация начальной стадии проекта осуществлялась в рамках курса «Дискретная математика» для студентов специальности «Математические методы в экономике».

Программа служит не только калькулятором для проверки правильности решения задачи, но и позволяет добиться следующих целей при преподавании теории графов [5]:

1) организация коллективной работы в группе и распределение задач между членами коллектива;

2) закрепление знаний и навыков, полученных в рамках курсов алгоритмизации и программирования;

3) закрепление материала курса «Дискретная математика», решение прикладных задач;

4) совершенствование навыков работы с литературными источниками.

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

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

Программа работает с помощью графического интерфейса, который позволяет пользователю рисовать различные графы с помощью инструментов «Вершина» и «Ребро», расположенных на панели инструментов. Предусмотрена возможность масштабирования изображения в окне, сохранения данных в файл и чтения данных из файла. Например, на рис. 2 приведено окно для рисования графа и задания весов его ребер.

Рис.2. Окно для создания и редактирования графа.

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

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

Поиск кратчайшего пути между двумя вершинами, выбранными пользователем (алгоритм Дейкстры). Пользователь выбирает концевые вершины пути с помощью щелчка мышью. Кратчайший путь в графе выделяется пунктиром (рис.3).

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

Рис.3. Решение задачи о кратчайшем пути

Подсчет числа компонент связности и сохранение матрицы инцидентности в блочном виде.

Поиск эйлеровых и гамильтоновых циклов и цепей. При запуске модуля проверяется возможность поиска решения. Если граф не является эйлеровым (гамильтоновым), пользователю выдается соответствующее сообщение.

Проверка заданного орграфа на наличие циклов. При наличии таковых вывести каждый цикл в виде последовательности вершин циклического пути.

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

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

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

Дополнительные модули программы

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

Модуль для решения задачи сетевого планирования. Для графа, изображенного в области редактирования, в окне диалога задаются работы (для каждого созданного ребра пользователь может сопоставить с меткой ребра некоторое название работы) и время их выполнения. Пользователем выбираются источник (начальная вершина, t=0) и сток (конечная вершина, окончание проекта), а также задаются ориентации ребер. Модуль рассчитывает минимальное время выполнения проекта, находит всевозможные критические пути и резервы времени по дугам, не входящим в этот путь.

Модуль для решения задачи о назначениях. В качестве входных данных пользователю предлагается заполнить таблицу, соответствующую прибылям/убыткам, получаемыми организацией за занятость работника N на работе M. Число работников и работ совпадает. Пользователь самостоятельно выбирает, решается задача на минимум или на максимум. В качестве результата предоставляется список работников и назначенных им работ, а также общая сумма прибыли/убытков, полученных благодаря найденному распределению. Двудольный граф, полученный в процессе решения, отображается в окне редактирования (рис.4).

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

Специальные модули программы Graph Calculator

Программа Graph Calculator является гибкой для подключения различных модулей. То есть проект может быть использован для тестирования алгоритмов, построенных в результате научной работы студентов выпускных курсов, аспирантов и преподавателей. Для этого необходимо подключить к проекту отлаженный алгоритм и реализовать передачу данных от программы к алгоритму и наоборот. Для некоторых задач

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

Например, для проверки работоспособности программы, в Graph Calculator был подключен модуль поиска покрытия с упорядоченным охватыванием [6] и реализована анимация полученного результата (рис.5). Рассмотренный в [6] алгоритм был построен для решения задачи моделирования процесса раскроя. Требовалось определить такую кратчайшую траекторию режущего инструмента, чтобы отрезанная от листа часть не требовала дополнительных разрезаний. Формально множество таких траекторий и определено как покрытие с упорядоченным охватыванием для плоского графа.

Еще один модуль, подключенный к программе Graph Calculator, позволяет найти последовательность ребер графа, в которой отсутствуют запрещенные переходы [7].

Mi ~t"* ■ hrw titM

Рис.5. Поиск покрытия с упорядоченным охватыванием Выводы

Создаваемый проект Graph Calculator позволяет студентам более глубоко освоить прикладные разделы теории графов, научиться применять знания, полученные в курсе программирования, для решения прикладных задач. В перспективе планируется ориентировать данную программу на подключение параллельных алгоритмов обработки данных

для NP -сложных задач с целью оптимизации времени выполнения

алгоритмов. Литература

1. Седжвик, Р. Алгоритмы на C++.: Пер. с англ. - М.: ООО «И.Д. Вильямс», 2011. - 1056 с.

2. Мельников, О.И. Обучение дискретной математике/ О.И. Мельников. - М.: Издательство ЛКИ, 2008. - 224 с.

3 Печенкин В .В. GRaph INterface (GRIN)

http://www.ecsocman.edu.ru/db/msg/324869.html

4. Тычинин С.А., Разработка программы для решения задачи MAX TSP с использованием свободной библиотеки GOBLIN. - Свободное программное обеспечение в образовании: сборник трудов Всероссийской конференции (г. Челябинск, 25-26 марта, 2009 г.) / под ред. А.В. Панюкова. - Челябинск: Изд-во ЮУрГУ, 2009. - с. 49-51.

5. Панюкова Т.А. Программа GraphCalculator: теория и практика курса «Дискретная математика». - Современные информационные технологии и ИТ-образование. Сб.докл. научно-практической конференции: учебно-методическое пособие. Под ред. проф. В.А. Сухомлина. - М.: ИНТУИТ.РУ, 2009. - С. 346-351.

6. Panyukova T., Savitskiy E. Optimization of Resources Usage for Technological Support of Cutting Processes. - The International Workshop on Computer Science and Information Technologies' 2010. Proceedings of Workshop, Russia, Moscow-St.Petersburg, September 13-19, 2010. Vol.1. - Ufa State Technical University, 2010. - P. 66-70.

7. Panyukova T. The Covering of Graphs by Trails with Local Restrictions. - The International Workshop on Computer Science and Information Technologies' 2011. Proceedings of Workshop, Germany, Garmish-Partenkirchen, September 27 - October 1, 2011. Vol.1. - Ufa State Technical University, 2011. - P. 200205.

i Надоели баннеры? Вы всегда можете отключить рекламу.