这是我到目前为止要做的,因此在DFA中正确的是,您具有状态,并且在这些状态之间具有转换,要从state A
变为state B
,您需要消耗symbol ex: 'a'
。现在,我正在尝试编写一个需要DFA transition function
的current state (int) and a transition symbol (char) and returns the next state (int)
,现在要做的是,您必须具有一个过渡表的访问权限,现在是表示该过渡表的最佳方法是什么,这是到目前为止我得到的:
Dictionary<int, Dictionary<char, int>> transitionMap = new Dictionary<int, Dictionary<char, int>>();
这是我的过渡图,它是第一个int key is current state
和nested dictionary consists of symbol consumed and the other int is the next state that I have to return
所在的字典,我遇到的问题是字典不能有重复的键(在这种情况下为状态),而DFA可以有多个转换为相同状态。例如,如果我尝试这样做:
Dictionary<char, int> dict = new Dictionary<char, int>();
dict.Add('a', 1); // 'a' here is the symbol consumed to go to state 1 from state 0
transitionMap.Add(0, dict); // 0 is the current state
现在,当我添加它时,它可以工作,但是当我尝试为状态0添加另一个过渡时,那不是因为字典不能有重复的键,所以在这里做什么?
是的,所以我在理解字典时遇到问题,我现在明白了:
if (transitionMap.ContainsKey(state))
{
Dictionary<char, int> res = new Dictionary<char, int>();
transitionMap.TryGetValue(state, out res);
res.Add(symbol, nextState);
transitionMap[state] = res;
}
我只需要检查状态是否存在,然后获取字典,向它添加另一个过渡,然后添加到transitionMap。