Проверка строки DFA

У меня есть программа, которая просто принимает все состояния как набор состояний в качестве входных данных. И затем следующий вход, который берется, является начальным состоянием среди набора состояний и затем набором конечных состояний.

Следующий набор переходов, который я беру между штатами.

Например: q0,1,q1

Это означает, что на входе 1 происходит переход от q0 к q1.

Для каждого состояния вводятся переходы.

Но здесь я сталкиваюсь с тем, что ссылки можно перемещать случайным образом, то есть число переходов может быть n числом переходов для неповторяющихся символов, и поэтому я хочу поддерживать объект hashmap для каждого состояния динамически.

Как мне этого добиться?

2 ответа

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

Итак, поддерживать HashMap<StateInput, State> trans и делать trans.put(StateInput(q0, 1), q1) для примера, который вы дали, где

class StateInput {
    public State state;
    public int input;
}

Может быть как то так?

class State {
  private Map<State, Character> transitions;

  // ...

  public void addTransition(State nextState, Character input) {
     transistions.put(nextState, input);
  }

  // ...
}
Другие вопросы по тегам