检查两个单词是否在某种语言中有交织的复杂性


9

对于固定语言 L 在某些字母上 A,让我们考虑以下问题,我称之为 L交错

  • 输入:两个字 u,vA
  • 输出:是否存在一个交错uv 在里面 L

在这里,两个单词的交织uv 是一个字 w 可以通过取字母来直观地获得 uv同时保持其相对秩序。正式地,wuv 如果我们可以将其划分为两个不相交的子序列,一个等于 u 另一个等于 v。例如,“ bheleloll”是“ hello”和“ bell”的交错。

的复杂性是什么 L-interleaving问题,取决于语言 L特别是:

  • 如果 L是常规的,那么我们可以对这两个字符串使用动态算法解决问题,这表明它在NL类中。对某些常规语言来说,NL难吗?但是,对于某些常规语言,问题显然出在L(确定性日志空间)中。L中存在问题的语言是否有某种特征?
  • 如果 L 是不规则的,问题仍然存在于NL中 L具有多项式在线确定性空间复杂度(有关此概念,请参阅此处,或者我之前的问题)。但是,这并不包括例如所有上下文无关的语言。然而,也可以将其他一些(例如回文)显示为NL(例如,通过从头到尾同时执行动态算法)。有没有上下文无关的语言,L-交织问题是NP难吗?

Answers:


6

一句话 w=w1w 和两个整数 i,j1ij 我们用 w(i,j) 子词 wiwi+1wjw。此外,我们让w(0,0) 表示空词。

  • u=u1umv=v1vn 是正在考虑的两个词。
  • 假设上下文无关的语言 L 由Chomsky范式的上下文无关语法指定。

构造一个动态程序,其中一个状态 [i,j,r,s,A] 由指定

  • 两个整数 i,j1ijm 要么 i=j=0
  • 两个整数 r,s1rsn 要么 r=s=0
  • 非终结符 A 在上下文无关的语法中

对于每个状态,确定在上下文无关的语法中是否存在以非终结符开头的某些派生 A 最后是两个单词的交错 u(i,j)w(r,s)。如果以正确的顺序处理状态(短子字在长子字之前),则可以轻松地做出此决定。

总而言之,这产生了多项式时间算法 L上下文无关的语言的交织问题 L


谢谢!的确,我没有注意到en.wikipedia.org/wiki/CYK_algorithm的这种变体可以表明问题出在无上下文语言的P中。就是说,我们看不到如何使用该算法证明问题出在NL:我们似乎需要进行对数猜测(树的高度),每个猜测都是对数的(即,串)。有什么想法吗?
a3nm

2
@ a3nm空单词是否属于CFL已经是P-hard了。
Sylvain

@Sylvain:好的,它是P困难的,但取决于CFL。:)请记住,在我的问题中,语言(或其CFL)是固定的,输入仅是两个字符串,因此我认为此参数不适用。
a3nm

2
@ a3nm对不起,我确实错过了该语言固定的事实。那么自然的候选者将是LogCFL硬度。
Sylvain

@Sylvain:是的,谢谢!因此,我确实确实认为,即使对于固定的CFL语言(即,Greibach最困难的语言),单词问题也是LogCFL困难的,所以特别是有些问题是LogCFL困难的CFL语言(例如,第二个字符串为空的情况) )。相反,我认为Gamow的算法在LogCFL(?)中。尽管如此,这仍然让我感到疑惑的是,我的问题将更容易解决此问题,以及如何对其进行分类...
a3nm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.