![](/img/trans.png)
[英]Is there any way to represent a DFA (Deterministic finite automata) into an adjacency List?
[英]How to internally represent a Deterministic Finite Automata
我有一个具有约 15M 状态的大型确定性有限自动机,而当前的 Java 实现相当缓慢且消耗内存。 我正在寻找可以替换当前代码的紧凑且快速的表示。
自动机由以下部分组成:
0
。我正在尝试以下方法,并且正在寻找其他想法。
state 转换以下列方式表示:
final List<Map<Character, Integer>> transitions = new ArrayList<>();
final Set<Integer> acceptingStates = new HashSet<>();
列表中的第 i 个项目包含第 i 个 state 的 state 转换。 一些分析告诉我,大部分执行时间都花在了访问 map 上。
final int[][] states = new int[STATE_COUNT][32];
Set<Integer> acceptingStates = new HashSet<>();
第 i 行包含第 i 个 state 的 state 转换。 内部数组的第 j 列包含来自第 i 个 state 的第 j 个字符的 state 的 id,如果缺失,则为 -1。
这种表示要快得多,但它仍然占用至少 N * 32 * 4 个字节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.