你如何证明一种语言属于P类?

时间:2015-04-02 21:46:06

标签: big-o time-complexity complexity-theory

我有两种语言:

A = { <M, w> | M accepts w after running for at most 2^500 steps }
B = { <M, w, 1^t> | M accepts w after running for at most t steps }

我需要弄清楚这些语言是否属于P类。我知道如果它在聚合时间运行,那么语言就属于P类。我很确定语言A是以指数时间运行的,但是我不太确定像2 ^ 500这样的常量是否会使它成为多时间。

感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:2)

算法时间表示为输入大小的函数。如果,对于任何输入,A需要2 ^ 500步,那么它实际上是恒定时间(无论输入是什么,运行时间是恒定的),这肯定是在P.

B需要t步,其中t可能是输入的大小,因此它是线性时间(时间随输入大小线性增加),也在P中。

如果您遇到需要的问题,例如2 ^ t步或t! (阶乘)步骤,然后它不在P.查找Big O表示法

答案 1 :(得分:2)

语言在 P 中,如果存在算法,则可以决定给定输入是否属于该语言并以多项式时间运行。多项式时间,意味着您可以在输入的长度中找到多项式函数的上限。

解决你的例子:

  1. 将算法AL₁定义为:
    对于元素<M,w>运行M(w)

    由于M(w)最多采用一个常数c = 2⁵⁰⁰步,因此AL₁的复杂度受一个常数来限制,这是一个多项式。 AL₁ ∈ O(1)。因此A位于 P

  2. 将算法AL₂定义为:
    对于元素<M,w,1t>运行M(w,1t)

    由于M(w,1t)最多需要t步,因此我们必须将输入长度和t放在一起。请注意,输入包含w1t1t表示数字t作为一元输入(例如1⁵= 11111 1 = 5 10)。这对输入长度很重要。例如。 1²⁵⁶的长度为256,但256 = 2⁸的长度仅为二进制8 = log₂(256)。 因此输入长度为len(w) + tAL₂ ∈ O(t)成立。因此AL₂的复杂性也受到多项式的限制,因此语言B位于 P

  3. 让我添加一个例子来表明haw重要的是它在一元和其他数字系统之间存在差异。

    C = { <M, w, t> | M accepts w after running for at most t steps }
    

    C基本上与B类似,但t不在一元数字系统中,因此t的长度为logc(t)。对数的基础c无关紧要,因为它只会产生一个常数因子。

    输入长度现在为len(w) + log(t),因此O(t)在输入长度中不是必需的多项式。假设len(w)是一个常数(为了简化),那么t = clogc(t)在输入长度中是指数的,因此C P < /强>