编辑两个正则表达式之间的距离

时间:2015-04-30 08:29:47

标签: regex string algorithm dynamic-programming

我在接受采访时遇到了这个问题:

给定两个正则表达式,计算它们之间的编辑距离。编辑距离定义为两个正则表达式分别生成的任意两个字符串之间的最小编辑距离。

正式地,我们正在寻找d(L1,L2) = min { d(x,y) | x from L1, y from L2 },其中L1L2是由两个正则表达式生成的语言。

我在采访中无法解决这个问题。即使是现在我也没有任何线索如何解决它。有什么想法吗?

我认为这与http://www.spoj.com/problems/AMR10B/

相同

1 个答案:

答案 0 :(得分:4)

代表这两种语言的有限状态机。让我们说第一语言有状态S [1],S [2],...,S [N1]和转换c:S [i] - > S [j](意思是状态i转到输入字符c)下的状态j,第二语言的T [1],T [2],... T [N2](具有自己的一组转换)。

现在,您可以构建加权多图,其中节点是状态对,并且对之间的边(S [i1],T [i2]) - > (S [j1],T [j2])如果这四种情况中的任何一种持有:

  • 其中c:S [i1] - > S [j1]和i2 = j2。这有重量1
  • 其中c:T [i2] - > T [j2]和i1 = j1。这有重量1
  • 其中c:S [i1] - > S [j1]和c:T [i2] - > T [J2]。这有权重0
  • 其中c:S [i1] - > S [j1]和d:T [i2] - > T [J2]。这有重量1

然后,找到从这对开始状态到任何一对接受状态的最低权重路径,可以为您提供最小的编辑距离。