Проверка строки DFA - PullRequest
       26

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

3 голосов
/ 20 сентября 2011

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

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 20 сентября 2011

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

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

class StateInput {
    public State state;
    public int input;
}
0 голосов
/ 20 сентября 2011

Как то так, может быть?

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

  // ...

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

  // ...
}
...