Задачи дискретной математики, и прежде всего задачи, связанные с алгоритмами на графах, очень часто встречаются в прикладных областях. Большинство таких задач требуют достаточно богатого набора структур данных: от простейших списков, стеков и очередей до графов, деревьев, множеств и более сложных структур. Универсальные системы программирования содержат обычно лишь наиболее простые структуры данных. В результате при программировании структурам данных уделяется недостаточно внимания, либо программист вынужден самостоятельно реализовывать такие структуры.
Анализ программ, написанных студентами математико-механического факультета УрГУ, показывает, что программы по курсам ВМП и САПР на 60-70% состоят из процедур, обеспечивающих поддержку структур данных (включая их ввод/вывод). При этом программы очень тяжело читать и модифицировать.
Для решения сформулированной проблемы служит библиотека GRAPHLAB. GRAPHLAB - это набор структур данных, открытых для использования и наращивания плюс комплект реализованных алгоритмов для классических задач сетевой оптимизации. По сути дела GRAPHLAB - это среда для разработки собственных алгоритмов в области САПР. Библиотека реализована в системе программирования Borland C++ с использованием всей мощи объектно-ориентированного подхода. Теоретической основой библиотеки является монография Тарьяна. (R.E. Tarjan "Data Structures and Network Algorithms", SIAM, 1983.)
Структуры данных составляют основу библиотеки. Далее перечислены основные структуры в порядке нарастания сложности.
Предполагается также реализация бинарных деревьев поиска, деревьев общего вида и ряда других структур.
Результатом использования библиотеки является короткая и элегантная запись алгоритмов. Для иллюстрации этого факта в GRAPHLAB включены несколько алгоритмов для задач на графах:
Однако основную ценность представляют структуры данных, позволяющие просто записывать любые алгоритмы, не заботясь при этом о деталях реализации.
Описание системы GRAPHLAB включает:
В ближайшем будущем предполагается дополнить систему различными структурами данных, пополнить фонд алгоритмов и реализовать графическую среду визуальной обработки графов и дугих структур данных.