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

Regex 编辑两个正则表达式之间的距离,regex,string,algorithm,dynamic-programming,Regex,String,Algorithm,Dynamic Programming,我在一次采访中遇到了这个问题: 给定两个正则表达式,计算它们之间的编辑距离。编辑距离定义为两个正则表达式分别生成的任意两个字符串之间的最小编辑距离 形式上,我们正在寻找d(L1,L2)=min{d(x,y)| x来自L1,y来自L2},其中L1和L2是两个正则表达式生成的语言 我在面试时没能解决这个问题。即使现在我也不知道如何解决它。有什么想法吗 我认为这与表示这两种语言的有限状态机是一样的。假设第一种语言具有状态s[1]、s[2]、…、s[N1]和转换c:s[i]>s[j](表示状态i在输入字

我在一次采访中遇到了这个问题:

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

形式上,我们正在寻找
d(L1,L2)=min{d(x,y)| x来自L1,y来自L2}
,其中
L1
L2
是两个正则表达式生成的语言

我在面试时没能解决这个问题。即使现在我也不知道如何解决它。有什么想法吗


我认为这与表示这两种语言的有限状态机是一样的。假设第一种语言具有状态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

然后,找到从一对开始状态到任何一对接受状态的最小权重路径,就可以得到最小的编辑距离。

我不确定我是否遵循,正则表达式生成的语言可以是无限的,而不是字符串。如何定义两种语言之间的距离?你能举个例子吗?好的,我明白了-你是说
d(L1,L2)=min{d(x,y)| x从L1开始,y从L2开始}
?@amit:是的。我的意思是。IMHO,我们可以解决这个问题,就像我们解决两个字符串之间的最小编辑距离一样。你在第二条语句中是指
i1=j1