动态规划与循环字符串解析技术解析
1. 动态规划模拟非确定性有限自动机(NFA)
动态规划可用于模拟其他 NFA,下面介绍几种不同场景下的应用。
- 汉明距离近似字符串匹配 :在使用汉明距离进行近似字符串匹配时,唯一允许的编辑操作是替换。通过从莱文斯坦距离的 NFA 中省略插入和删除转换,可得到汉明距离的 NFA。同时,在公式 1 中省略模拟插入和删除转换的项,就能得到模拟汉明距离 NFA 的公式。此外,由于在这种 NFA 中只有初始状态在开始时是活跃的(没有 ε - 转换),所以还需改变向量的初始设置。
- Σ 版本的 NFA :如果用 Σ 标记替换和插入转换(即即使 $t_i$ 是匹配符号,这些转换也会被使用),就得到了所谓的 Σ 版本的 NFA。该 NFA 的公式稍简单,但行为略有不同。原始的用于莱文斯坦距离近似字符串匹配的动态规划算法模拟的就是 Σ 版本的 NFA。
- 广义莱文斯坦距离 :若在莱文斯坦距离的 NFA 中引入转置转换(交换两个相邻符号),则可得到广义莱文斯坦距离的 NFA。此转换从级别为 $l$、深度为 $j$ 的状态 $q$ 引导到辅助状态 $q’$,再到级别为 $l + 1$、深度为 $j + 2$ 的状态 $q’‘$,它会读取两个符号:$p_{j + 2}$ 和 $p_{j + 1}$。为得到使用广义莱文斯坦距离进行近似字符串匹配的公式,需将模拟转置转换的项 2 插入公式 1 中。
- 项 2:若 $i > 1$ 且 $j > 1$ 且 $t_{i - 1} = p_j$ 且 $t_i = p_{j - 1}$,则 $d_{j