我有两种语言:
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这样的常量是否会使它成为多时间。
感谢任何帮助,谢谢!
答案 0 :(得分:2)
算法时间表示为输入大小的函数。如果,对于任何输入,A需要2 ^ 500步,那么它实际上是恒定时间(无论输入是什么,运行时间是恒定的),这肯定是在P.
B需要t步,其中t可能是输入的大小,因此它是线性时间(时间随输入大小线性增加),也在P中。
如果您遇到需要的问题,例如2 ^ t步或t! (阶乘)步骤,然后它不在P.查找Big O表示法
答案 1 :(得分:2)
语言在 P 中,如果存在算法,则可以决定给定输入是否属于该语言并以多项式时间运行。多项式时间,意味着您可以在输入的长度中找到多项式函数的上限。
解决你的例子:
将算法AL₁
定义为:
对于元素<M,w>
运行M(w)
。
由于M(w)
最多采用一个常数c = 2⁵⁰⁰
步,因此AL₁
的复杂度受一个常数来限制,这是一个多项式。 AL₁ ∈ O(1)
。因此A
位于 P 。
将算法AL₂
定义为:
对于元素<M,w,1t>
运行M(w,1t)
。
由于M(w,1t)
最多需要t
步,因此我们必须将输入长度和t
放在一起。请注意,输入包含w
和1t
。 1t
表示数字t
作为一元输入(例如1⁵= 11111 1 = 5 10)。这对输入长度很重要。例如。 1²⁵⁶
的长度为256
,但256 = 2⁸
的长度仅为二进制8 = log₂(256)
。
因此输入长度为len(w) + t
且AL₂ ∈ O(t)
成立。因此AL₂
的复杂性也受到多项式的限制,因此语言B
位于 P 。
让我添加一个例子来表明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 < /强>