Computer science 如何确定一种语言是否属于NP?

Computer science 如何确定一种语言是否属于NP?,computer-science,turing-machines,np,Computer Science,Turing Machines,Np,例如,我知道语言 CFL的泵送引理不是上下文无关的,但我如何证明它属于NP,而不是经验时间、可判定语言或图灵可识别的 编辑:我做了一些挖掘,我的一个疏忽是NP中的问题是那些在多项式时间内可由不确定图灵机验证的问题。我怎么知道: 答:这种语言在多项式时间内存在一个验证器 b:NDTM可以识别它 但我如何证明它属于NP,而不是经验时间、可判定语言或图灵可识别语言 你不能,因为那不可能发生。NP中的每一种语言都是可表达的、可判定的和图灵可识别的。L在NP中当且仅当存在多项式p和PTIME语言L’这样

例如,我知道语言

CFL的泵送引理不是上下文无关的,但我如何证明它属于NP,而不是经验时间、可判定语言或图灵可识别的

编辑:我做了一些挖掘,我的一个疏忽是NP中的问题是那些在多项式时间内可由不确定图灵机验证的问题。我怎么知道: 答:这种语言在多项式时间内存在一个验证器 b:NDTM可以识别它

但我如何证明它属于NP,而不是经验时间、可判定语言或图灵可识别语言

你不能,因为那不可能发生。NP中的每一种语言都是可表达的、可判定的和图灵可识别的。L在NP中当且仅当存在多项式p和PTIME语言L’这样

当且仅当存在长度为p(| x |)的y,使得(x,y)在L'中

为了证明NP是EXPTIME的一个子集,我们可以对所有可能的y进行蛮力搜索。每一次朗格都是明显的可判定和可识别的

现在,关于显示语言L属于NP的问题:尝试想出一种方法,对于L中的每个x,您可以写下它属于L的“证明”或“证书”。对于x而不是L,这样的证书不应该存在,并且这个证书是正确的,应该是可有效验证的(在多项式时间内)。证书本身的长度最多应为x长度的多项式

当然,具体如何做到这一点取决于特定的语言L。许多NP问题被称为搜索(存在)问题:这个图是否有哈密顿圈,这个布尔公式是否有满意的赋值,等等。在这种情况下,证书的选择通常是明确的,可以将证书作为正在搜索的对象(哈密顿路径或满意赋值本身)。我们需要检查给定一个图和一个所谓的哈密顿路径,我们可以检查它在多项式时间内是否真的是哈密顿路径,或者给定一个公式和一个所谓的满意赋值,我们可以检查它在多项式时间内是否真的是一个满意赋值。这通常很容易表现出来


请注意,p是NP的一个子集(只要对证书取任何值,证书检查器就可以在多项式时间内解决原始问题本身)。你要的语言,{a^n b^n c^n | n>=0}很容易用P表示(因此用NP表示)。

你知道用什么方法证明一种语言是NP表示的?我知道,如果一种语言可以通过确定性图灵机在多项式时间内运行,那么它将被证明是NP表示的,但在这种情况下,我不确定如何分类它是在NP中,还是在更高的区域中,如更适合cstheory.stackexchange的可判定语言。com@RaymondChem,C理论仅用于研究层面的问题。这个问题对于即将到来的考试来说是完美的。所以,如果你想有这样一个问题的地方,请继续,并帮助这个建议起飞!