用C#代码表示DFA转换表的最简单方法是什么?

问题描述 投票:0回答:1

这是我到目前为止要做的,因此在DFA中正确的是,您具有状态,并且在这些状态之间具有转换,要从state A变为state B,您需要消耗symbol ex: 'a'。现在,我正在尝试编写一个需要DFA transition functioncurrent 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 statenested 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添加另一个过渡时,那不是因为字典不能有重复的键,所以在这里做什么?

c# dictionary state-machine finite-automata dfa
1个回答
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。

© www.soinside.com 2019 - 2024. All rights reserved.