为什么非确定性(下推自动机)是必需的?


9

我想知道为什么对于上下文无关语言的识别只能使用非确定性下推自动机(DPA = NPDA)。为什么确定性下推自动机(DPDA)无法识别此类语言?


10
如果某种语言存在某种LR(1)语法,则该语言可以通过确定性下推自动机识别。由于存在上下文无关的语言,没有描述它们的任何LR(1)语法,因此NPDA!= DPDA。由于这些结果是众所周知的,并且通常会在有关编译器的课程中得到处理,因此我不确定这是否能回答您的问题:您是否正在寻找这个事实背后的直觉?
亚历克斯十布林克

鉴于存在其他不确定性对FSM和TM的语言没有影响的其他关键模型,这确实有点违反直觉。
vzn

Answers:


25

我不太确定您要寻找哪种口味的“为什么”。下例显示了允许不确定性时功率增加的原因之一:

L 是回文集 ww¯ 在一些字母(至少两个符号)上,其中 w¯ 是相反的 w。用于此语言的NPDA可以继续将符号推入其堆栈,然后在某个时候猜测它已到达输入的中间并逐渐清空堆栈。请注意,接受条件纯粹是存在的-足以正确猜测要接受的单词。

确定性PDA必须以仅取决于当前前缀的某种方式来选择它所考虑的中间位置。假设A就是这样的DPDA。对于任何kN,让 uk=ab2ka; 让v0 是空话,并且 vk+1=vkukvk。这是回文序列,每个回文序列的下一个前缀,因此A 必须处于接受状态 qk,读取后堆栈为空 vk。根据鸽子洞的原理,一定有一些k,l 这样 klqk=ql (状态数量是有限的,因此必须“重用”某些状态,因为存在无限数量的状态 ks)。但是之后A 无法区分 vkukvk是回文,来自 vlukvk,事实并非如此。


0

FA确定性或非确定性地接受相同的语言(即常规语言)。

但是在PDA的情况下,如果我们限制其确定性地运行,它将不接受某些CFL(不具有前缀属性的 CFL(RL除外))。

为什么这样?

考虑一个没有前缀属性的CFL示例(lang的Prefix属性:没有字符串是lang中另一个字符串的适当前缀)。

L = wwr

例如。字符串000000。(00是一个适当的前缀0000,因此wwr没有首选属性)。

发生00时, DPDA将进入最终状态。现在,由于DPDA在接受性和连续性之间没有选择,因此接受00之后就不能接受0000。这是PDA需要不确定性的地方。

观察结果:对于FA,lang(RL)不带偏好。属性可以确定地接受(例如,以0开头的字符串)。这说明RL和CFL的前缀属性影响不同。PDA的确定性和非确定性之间的差异产生了一个新的lang系列。DPDA接受。该语言称为DCFL

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.