[英]How do you show that a language is in the class P?
我有兩種語言:
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這樣的常數使它變為多次時間。
任何幫助表示贊賞,謝謝!
算法時間表示為輸入大小的函數。 如果對於任何輸入,A占用2 ^ 500步,那么它實際上是恆定時間(無論輸入什么,運行時間都是恆定的),這絕對是P。
B采取t步,其中t大概是輸入的大小,因此它是線性時間(時間隨輸入大小線性增加),也以P表示。
如果您遇到的問題需要例如2 ^ t步或t! (階乘)步驟,則不在P中。查找Big O表示法
語言是P ,如果存在算法,則可以確定給定的輸入是否屬於該語言並且以多項式時間運行。 多項式時間,意味着您可以在輸入的長度中找到多項式函數的上限。
要解決您的示例:
將算法AL₁
定義為:
對於元素<M,w>
運行M(w)
。
由於M(w)
最多取一個常數c = 2⁵⁰⁰
步,所以AL₁
的復雜度由一個常數多項式來限制。 AL₁ ∈ O(1)
所以A
在P中 。
將算法AL₂
定義為:
對於元素<M,w,1 t >
運行M(w,1 t )
。
由於M(w,1 t )
最多需要t
步,因此我們必須將輸入長度和t
放在一起。 注意,輸入由w
和1 t
。 1 t
表示數字t
以一元形式輸入(例如1⁵=11111₁=5₁₀)。 這對於輸入長度很重要。 例如1²⁵⁶
的長度為256
,但是256 = 2⁸
的長度僅是8 = log₂(256)
(二進制)。 因此輸入長度為len(w) + t
, AL₂ ∈ O(t)
成立。 因此, AL₂
的復雜度也受多項式的限制,因此語言B
在P中 。
讓我添加一個示例以說明一元和其他數字系統之間的區別非常重要。
C = { <M, w, t> | M accepts w after running for at most t steps }
C
基本上像B
,但是t
不是一元數制,因此t
的長度為log c (t)
。 對數的底數c
無關緊要,因為它僅產生一個常數因子。
輸入長度現在為len(w) + log(t)
,因此O(t)
不必是輸入長度中的多項式。 假設len(w)
是一個常數(為簡化起見),則t = c log c (t)
在輸入長度上為指數,因此C
不在 P中 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.