Я работаю над программой для преобразования недетерминированных автоматов с конечным состоянием (NFA) в детерминированные автоматы с конечным состоянием (DFA). Чтобы сделать это, я должен вычислить эпсилон-замыкание каждого состояния в NFA, которое имеет эпсилон-переход. Я уже нашел способ сделать это, но я всегда предполагаю, что первое, о чем я думаю, обычно является наименее эффективным способом что-то сделать.
Вот пример того, как я бы вычислил простое замыкание эпсилон:
Входные строки для функции перехода: формат startState, символ = endState
EPS - это эпсилон-переход
1, ЭПС = 2
Результаты в новом состоянии { 12 }
Очевидно, это очень простой пример. Мне нужно было бы иметь возможность вычислить любое количество эпсилон-переходов из любого количества состояний. С этой целью мое решение представляет собой рекурсивную функцию, которая вычисляет эпсилон-замыкание для заданного состояния, просматривая состояние, в которое он имеет эпсилон-переход. Если это состояние имеет эпсилон-переход(ы), то функция вызывается рекурсивно в цикле for для такого количества эпсилон-переходов, какое у нее есть. Это выполнит работу, но, вероятно, это не самый быстрый способ. Итак, мой вопрос таков: каков самый быстрый способ вычислить закрытие epsilon в Java?