Вы на самом деле не задали вопрос. Вы получите дополнительную и лучшую помощь, если у вас есть конкретный question для конкретной задачи (но все же дайте общую цель). Вопрос должен быть узким по охвату (например, не «Как я могу реализовать FSA?»).
Что касается представления FSA (похоже, что у вас возникают трудности), читайте дальше.
Начните с рассмотрения определению FSM: это алфавит Σ, множество состояний S, начальное состояние s, набор принимает состояний и переход функции δ от состояния и символа к состоянию. Вы должны быть в состоянии определить эти свойства из ввода. Любые состояния, недоступные для функции перехода, можно отбросить для получения эквивалентного FSM. Таким образом, минимальная совокупность состояний и алфавита неявна в функции перехода; вы можете сделать ваш FSM более удобным в использовании (и сложнее реализовать, но не намного сложнее), не требуя ни Σ, либо S на входе.
Вам не нужно использовать то же представление для состояний, которые использует вход. Вы можете использовать целые числа без знака для вашего внутреннего представления, если у вас есть карта от целых чисел до строк и строк до целых чисел, чтобы вы могли преобразовать внутреннее представление и внешнее представление. Таким образом, ваша функция перехода может быть сохранена как массив, поэтому шаг перехода может выполняться в постоянное время.
Простым подходом было бы использовать внешнее представление как ваше внутреннее представление.С помощью этой опции функция перехода будет храниться в виде карты из строк и символов в строки. На этапе перехода, вероятно, будет O (log (| S | + | Σ |)), учитывая производительность большинства структур данных карты. Если символы представлены целыми числами (например, char
с), функция перехода может быть представлена в виде карты из строк в массив строк, что дает производительность O (log (| S |)).
Еще одна опция, смоделированная после графического представления FSM, заключается в создании класса для состояний. Состояние имеет имя (внешнее представление). Государства несут ответственность за переходы; отправить символ в состояние и вернуть другое состояние.
Хранить набор состояний в виде карты от имен к состояниям.
Здесь вы идете, три разных места для начала, каждый с другим видом представления состояний.
Какой формат ввода? Прежде чем продолжить, он должен быть четко определен. – outis
Не могли бы вы описать формат вашего входного файла? – poundifdef
... что еще более важно, как вы собираетесь представлять «определение того, что должно делать каждое государство»? Вы должны предоставить дополнительную информацию о том, что вам нужно сделать. –