Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Задача 3. Регулярные запросы для всех пар вершин #3

Merged
merged 2 commits into from
Sep 30, 2024

Conversation

tepa46
Copy link
Owner

@tepa46 tepa46 commented Sep 29, 2024

  • Реализовать тип (AdjacencyMatrixFA), представляющий конечный автомат в виде разреженной матрицы смежности из sciPy (или сразу её булевой декомпозиции) и информации о стартовых и финальных вершинах. У типа должны быть конструктор от DeterministicFiniteAutomaton и NondeterministicFiniteAutomaton (первый является подклассом второго, так что можно не различать их явно) из Задачи 2.
  • Реализовать функцию-интерпретатор для типа AdjacencyMatrixFA, выясняющую, принимает ли автомат заданную строку и является ли язык, задающийся автоматом, пустым. Для реализации последней функции рекомендуется использовать транзитивное замыкание матрицы смежности.
    • Требуемые функции:
      def accepts(self, word: Iterable[Symbol]) -> bool:
       pass
      def is_empty(self) -> bool:
       pass
  • Используя разреженные матрицы из sciPy реализовать функцию пересечения двух конечных автоматов через тензорное произведение.
    • Требуемая функция:
      def intersect_automata(automaton1: AdjacencyMatrixFA,
              automaton2: AdjacencyMatrixFA) -> AdjacencyMatrixFA:
         pass
  • На основе предыдущей функции реализовать функцию выполнения регулярных запросов к графам: по графу с заданными стартовыми и финальными вершинами и регулярному выражению вернуть те пары вершин из заданных стартовых и финальных, которые связанны путём, формирующем слово из языка, задаваемого регулярным выражением.
    • Требуемая функция:

      def tensor_based_rpq(regex: str, graph: MultiDiGraph, start_nodes: set[int],
            final_nodes: set[int]) -> set[tuple[int, int]]:
         pass
    • Для конструирования регулярного запроса и преобразований графа использовать результаты Задачи 2.

  • Добавить собственные тесты при необходимости.

@tepa46 tepa46 merged commit e2943c1 into main Sep 30, 2024
4 checks passed
@tepa46 tepa46 deleted the task3 branch September 30, 2024 15:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants