在确定性有限自动机算法中需要帮助

时间:2015-02-16 19:28:26

标签: java linked-list finite-automata deterministic

我正在研究确定性有限自动机上的应用程序,但算法存在问题,所有细节都将根据用户的输入设置。如果用户输入如下的详细信息

,则会出现问题
totalStates = 3      //user input
initialState = 1      //user input
finalState = 3      //user input
//transitions created in linked-list
//contains three data members(prevState(int), transition symbol(String), nextState(int))  
2->b->1      //user input
1->a->2      //user input
2->b->3     //user input

string = ab
这是这个自动机的有效字符串,但不是根据我的算法,算法中的问题是它根据转换索引改变状态。像
为了' a'它运作良好,将状态从1改为2 因为' b'它选择从2到1而不是2到3的过渡 因为在> b>> 3

之前创建了2> b-> 1

如何使用java中的链表(用于转换)和字符串(用于字符串输入)来解决这个问题。由于
完整的代码是

public boolean match() {
    s = str;

    current = FiniteAutomata.startState;
    for (int t = 0; t < str.length(); t++) {
        curFlag = false;
        list2 = originalList.head;
        while (list2 != null) {
            if (current == list2.initialState) {

                for (int i = 0; i < s.length(); i++) {
                    String s2 = delL(s.toCharArray(), i);
                    if (s2.equals(list2.transitionString)) {
                        current = list2.finalState;
                        curFlag = true;
                        s = delF(s.toCharArray(), i);
                    }
                }
            }
            if (curFlag) {
                break;
            }
            list2 = list2.next;
        }
    }
    boolean flag = false;
    if (s.equals("")) {
        for (int i = 0; i < FiniteAutomata.finalStates.length; i++) {
            if (current == FiniteAutomata.finalStates[i]) {
                flag = true;
            }
        }
    }
    if (flag) {
        return true;
    } else {
        return false;
    }

}
String delF(char[] temp, int c) {
    String s = "";

    for (int i = c + 1; i < temp.length; i++) {
        s = s + temp[i];
    }
    return s;
}

String delL(char[] temp, int c) {
    String s = "";

    for (int i = 0; i <= c; i++) {

        s = s + temp[i];
    }
    return s;
}

0 个答案:

没有答案