最多只能找到一个长度词的难度


10

问题陈述 :

M 是一个(可能不确定的)下推自动机,让 A是其输入字母。有话吗wA|w|k 被接受 M

这个问题NP是否完整?已经研究过了吗?有没有算法可以找到这样的单词?


Djikstra的算法不应该解决这个问题吗?(我很可能在这里误会了一些东西!)
alpoge 2011年

“最大长度 k“?
alpoge 2011年

不客气,卡夫。是的,我“最多”忘记了,我再次编辑。
Lamine

1
答案很容易-这是一个作业问题吗?
Sariel Har-Peled

我们可以访问自动机描述还是仅将其作为黑匣子使用?
拉斐尔

Answers:


9

计算CFG语言与常规语言的交集 i=0kAk (这等于将状态数乘以 k并添加“终止”状态)。现在检查结果是否为空:将其转换为语法(我认为结果将具有多项式大小)并从epsilon生成中“回溯”。

编辑:Kaveh提到这是多项式 k, 因此,如果 k 作为输入给出,该算法在 |k|。但是,Kaveh找到了一种解决方法。将原始自动机转换为CFG,并用固定端子替换所有端子。现在,使用迭代算法查找由每个非终端生成的单词的最小大小,如下所示。

初始化所有长度 ,然后以明显的方式迭代更新所有长度:给定生产 AatBi (顺序无关紧要),放 f(A)=min(f(A),t+f(Bi))。声明:这收敛于迭代,其中是非终结点的数量。原因是在生成最小长度字的树中,没有两次使用非终结符。每个“边缘”最多需要进行一次迭代处理(某些边缘可以并行“更新”)。O(n)n


我也认为转换PDA CFG是多项式。谢谢!所以问题出在。P
Lamine

好的,因为有一种方法可以直接计算最小长度,不是输入。但是我不明白为什么要用固定的终端替换所有终端。该算法应在原始终端上正常运行。|k|
Lamine

您是对的,实际上没关系。
Yuval Filmus

5

将所有字母字符更改为单个特定字符。现在,您已经在单个字符上定义了PDA。它的语言是上下文无关的语法。但是,关于单个字符的上下文无关语法是正常的。因此,将CFG转换为常规语言,然后检查它是否包含长度为k的单词。

现在,所有这些转换趋向于需要指数时间,但是在我看来,这个问题不太可能是NP完整的。特别是如果您允许以多项式时间。k

我可能是错的,对于最初的简短回答我深表歉意...

顺便说一句,CFG在单个字母上是规则的事实来自于帕里克定理。虽然直接证明并不太难。有关帕里克定理的更多详细信息,请参见链接-这是一个美丽的结果... http://www8.cs.umu.se/kurser/TDBC92/VT06/final/3.pdf


不,我不是学生。我提到的问题最初是一个被建模为自动机的网络问题。我只想知道是否值得寻找一个多项式解。
Lamine

5
这个答案不应该发表评论吗?
Oleksandr Bondarenko

2
是的,应该。Sariel,您可以将其移至评论或提供答案吗?
Suresh Venkat

@Suresh:您可能已经意识到这一点,但是现在主持人可以将答案变成评论
伊藤刚(Tsuyoshi Ito)

我将原始答案转为评论。这是一个新答案。
Suresh Venkat

0

可能不是最理想的方法:运行Djikstra的算法。然后,对于每个最终状态,将距离与进行比较。如果有,请接受。拒绝。kk

编辑:以上仅适用于NFA!对于那个很抱歉。


(但绝对是多时间!)
alpoge 2011年

我不确定Dijkstra的算法能否解决问题。它可以找到初始状态和最终状态之间的最短路径。当然,可以生成可以通过该路径接受的单词。但是,这条路径是基本的,单词可以通过非基本的路径接受。否则,确定上下文无关文法是否可以生成任何单词的问题将是可判定的,但事实并非如此。
Lamine

CFL的空性测试是可以决定的,不是吗?
alpoge 2011年

(如果我误会了,请原谅我!)
alpoge 2011年

好吧,可以使用“标记”算法来执行此操作(给CFG):标记终端,然后标记派生终端的事物,然后标记派生了被标记事物的事物,依此类推,直到过程终止,然后检查如果标记了起始变量。另外,请忽略我的答案-这是您应该对NFA进行的操作(肯定不是对PDA!)。
alpoge 2011年
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.