lis*_*isa 1 algorithm polynomial-math np
我似乎无法区分接受和决策算法,即使我觉得我理解这个概念.我目前正在阅读"算法简介"(Cormen),并且在NP-Completeness章节之后出现问题,因为它表明
"对于其他问题,例如图灵的停机问题,存在接受算法,但不存在决策算法".
这对我来说是有道理的,但是我们会更进一步说出来
"P= {L from {0,1}*: there exists an algorithm A that decides L in polynomial time}
Run Code Online (Sandbox Code Playgroud)
我们想要证明P也是
Run Code Online (Sandbox Code Playgroud)P={L:L is accepted by a polynomial time algorithm}, starting with"因为语言类由多项式时间算法决定,我们只需要证明如果L被多项式时间算法接受,它就由多项式时间算法决定."
然后我们继续构建接受算法的模拟,该模拟另外检查接受算法的行为,如果前一算法接受输入则输出1,否则输出0.
但是,如果我们可以构建这样的算法,那么停止问题怎么可能有接受但不是决策算法?
差异与运行时的上限有关.在考虑多项式时间算法时,如果您有多项式时间接受器,则可以将其转换为多项式时间决策器,如下所示:
因此,接受者可以变成决策者.
现在,考虑停止问题的同样事情:
这里的问题是算法不会接受一些固定的时间 - 程序可以在接受之前任意运行很长时间,所以没有办法说"运行它直到它已经被接受",因为没有计算可以弄清楚这是什么时间的过程.
有趣的是,这连接到Busy Beaver功能.直观地,大小为n的繁忙海狸是长度为n的程序,它总是停止,但是花费最长的时间来停止所有大小为n的程序.对于特定输入w,n阶w的繁忙海狸数是在输入w上停止大小为n的繁忙海狸程序所需的步数.此数字在数学上是明确定义的,但它不能由任何计算机程序计算,否则您可以使用它来使上述算法正常工作.
希望这可以帮助!