2011-09-20 7 views
3

모든 상태를 입력으로 상태 세트로 사용하는 프로그램이 있습니다. 그리고 나서 취해진 다음 입력은 상태 집합 중 초기 상태이고 최종 상태 집합입니다.DFA 문자열 유효성 확인

다음은 내가 상태에서 취하는 전환 집합입니다. 예를 들어

:이 입력 수단에 하나 q0,1,q1

Q1에 Q0로부터의 전이가있다.

각 상태에 대해 전환이 입력됩니다.

여기 내가 무엇을 마주하고 있습니다. refrences는 무작위로 jumpled 될 수 있습니다. 전환은 비 중복 문자의 전환 번호가 될 수 있습니다. 따라서이 때문에 hashmap 객체를 유지하려고합니다. 동적으로 각 상태.

어떻게하면됩니까?

답변

1

이것은 DFA이므로 하나의 해시 맵을 (상태, 입력) 쌍에서 결과 상태로 유지하는 것이 더 쉽고 효율적일 수 있습니다. DFA 속성은 전환 관계가 이러한 방식으로 함수로 간주 될 수 있음을 보장합니다.

그래서하는 HashMap<StateInput, State> trans 유지하고

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

뭔가 같은, 어쩌면 당신이 준 예를 들어 trans.put(StateInput(q0, 1), q1)을합니까?

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

    // ... 

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

    // ... 
} 
+0

이제 StateInput 클래스의 Class 상태에 대한 개체 참조가 위의 예에서 q0 값을 얻습니다. 나는 StateInput 클래스의 생성자에서 어떤 일이 일어나고 있는지 명확하지 않다. State 클래스의 생성자에 대해서도 마찬가지입니다. addTransition에는 Key와 State의 값이 주어지고 char은 키와 값으로 주어진다. 가치가 열쇠가된다면 더 좋을 것 같지 않습니까? –