Проверка строки 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);
}
// ...
}