如何创建DAWG

How to create a DAWG?

本文关键字:DAWG 创建 何创建      更新时间:2023-10-16

如何创建 dawg ?我发现有两种方法。一个是将一个Trie转换为Dawg,另一个正在立即创建新的Dawg?哪一个最简单?您能详细说明两者并提供一些链接吗?

思考dawg的一种方法是作为单词列表中所有单词的最低状态DFA。结果,用于构建DAWG的传统算法如下:

  1. 首先构建一个文字收集的trie。
  2. 在所有输入上从自身到本身的边缘添加一个新节点。
  3. 对于Trie中的每个缺少字母过渡,请添加从开始节点到这个新的死节点的过渡。
  4. (在这一点上,您现在有一个(可能是非最小值) dfa 对于单词集。)
  5. 使用最小化DFA> DFA状态最小化的标准算法

完成此操作后,您将为您感兴趣的一组单词留下DAWG。

该算法的运行时如下。可以通过为所有原始单词构造一个TRIE来完成构建初始DFA(这需要时间O(n),其中n是所有输入字符串中字符的总数),然后填充丢失的过渡(需要时间)o(n |σ |),其中|σ |是字母中不同字符的数量)。从那里,最小化算法在时间O(N 2 |σ |)中运行。这意味着该算法的总运行时为O(n 2 |σ |)。

据我所知,没有直接算法可以逐步构建DAWG。通常,仅当您已经提前所有单词时,才会为一组单词构建DAWG。直觉上,这是正确的,因为插入一个新词在DAWG中已经存在一些后缀可能需要大量重组DAWG,以使某些旧的接受状态不接受,反之亦然。从理论上讲,这是因为插入新单词可能会大大改变DFA的区分性关系的等价类别,这可能需要对DFA的结构进行实质性更改。

希望这会有所帮助!