Реализация алгоритма достижимости с контекстно-свободными ограничениями от нескольких источников в рамках библиотеки LAGraph

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

Илья Муравьёв предложил оптимизации алгоритма достижимости с ограничениями в виде КС языков, которые позволили обойти по производительности существующие аналоги:

Оптимизации, предложенные Ильёй, показали свою состоятельность при решении задачи достижимости для всех пар вершин. Помогут ли они ускорить алгоритм для нескольких стартовых вершин, который был ранее предложен Арсением Тереховым: * Multiple-Source Context-Free Path Querying in Terms of Linear Algebra

В рамках работы предлагается интегрировать алгоритм, предложенный Арсением, в LAGraph --- библиотеку алгоритмов анализа графов, выраженных в терминах линейной алгебры, которая написана на C и использует SuiteSparse:GraphBLAS для операций над матрицами. Кроме этого, необходимо оценить применимость оптимизаций, предложенный Ильёй, для данного алгоритма и, возможно, предложить специфичные для случая нескольких источников.

Требования к студенту
  • Отличное знание языка программирования Си и соответствующего инструментария разработчика: средства сборки, отладки, профилирования, тестирования.
  • Отличное знание основ линейной алгебры: (полу)кольца, моноиды, матрицы и операции над ними (умножение, поэлементные).
  • Основы теории графов: ориентированные графы, помеченные (на рёбрах) графы, матрица смежности, алгоритмы решения задач достижимости, поиска кратчайших путей, алгоритмы обхода графов.
  • Основы теории формальных языков: контекстно-свободные языки и грамматики, понятие вывода цепочки в грамматике.
Уровень

2 курс, 3 курс


Руководитель

Григорьев Семен Вячеславович


Консультант

Grigorev Semyon


Источник

Кафедра системного программирования СПбГУ