【发布时间】:2020-11-21 23:12:15
【问题描述】:
所以,我有一个非常大的 DFA 并且它充满了 PHI,所以我想将它转换为邻接列表以节省大量内存并使用它来检查输入是否被接受或返回输入的状态站立。
我搜索了很多但一无所获......
我知道权重图的代码,但在 DFA 机器中有多个权重。
另一件事,当我们在 DFA 转换表上移动时,我们使用此代码
state = DFA_TransitionTable[state][weight];
我需要一个替代方案。
【问题讨论】:
所以,我有一个非常大的 DFA 并且它充满了 PHI,所以我想将它转换为邻接列表以节省大量内存并使用它来检查输入是否被接受或返回输入的状态站立。
我搜索了很多但一无所获......
我知道权重图的代码,但在 DFA 机器中有多个权重。
另一件事,当我们在 DFA 转换表上移动时,我们使用此代码
state = DFA_TransitionTable[state][weight];
我需要一个替代方案。
【问题讨论】:
这是用 Java 中的邻接列表表示 DFA 的一种方法。您可以将其表示为“符号”到“状态”的映射,而不是转换函数的数组,这样给定一个状态和一个符号,您就可以使用state.transitionFunction.get(symbol) 获得下一个状态。
class DFA {
Set<State> states;
State initialState;
Set<State> acceptStates;
}
class State {
Map<Symbol, State> transitionFunction;
}
class Symbol {}
这假设您希望拥有自己的 Symbol 类 - 您当然可以将 Character 或 String 用于将 DFA 应用于字符串的传统用例。
【讨论】: