時間複雜度與 P 類

時間複雜度類別(time-complexity class)

一旦我們能量測機器花多久,自然的下一步就是依所需時間把問題分箱。時間複雜度類別正是這樣一個箱子:所有「某台機器能在所述時間預算內判定」的決定問題(語言)的集合。我們不再問單一演算法,而是問一整群問題,並在「給定時間量內可解」的範圍周圍畫出界線。

基本的建構單元寫成 TIME(f(n)),有時寫成 DTIME(f(n)) 以強調「確定型」。若存在一台確定型圖靈機能判定語言 L(對每個輸入都停機並給出正確的是/否),且對每個大小為 n 的輸入都在 O(f(n)) 步內停機,則 L 屬於 TIME(f(n))。所以 TIME(n^2) 是所有可在平方時間解出的問題,TIME(2^n) 是所有可在指數時間解出的問題,依此類推。我們在定義裡用 O(f(n)),使類別不取決於瑣碎的常數因子。這些類別會層層相套:能在 n 時間解出的問題當然也能在 n^2 時間解出,所以 TIME(n) 包含於 TIME(n^2)。

像 TIME(n^3) 這樣的單一類別對確切的界限、甚至對機器模型都很敏感,這就是為什麼最有用的類別是把這些皺褶撫平的聯集。最典型的例子是 P,它是對所有常數 k 取 TIME(n^k) 的聯集,收攏一切可在任何多項式時間解出的東西。這樣捆綁讓類別在合理模型間穩健,並在計算的地圖上給我們穩定的地標(P、EXPTIME,以及之後的 PSPACE)。接著時間階層定理保證:真正更多的時間能買到真正更多的能力,所以這些箱子並非暗地裡全都相等。

用比較把 n 個數字排序,屬於 TIME(n^2)(簡單的氣泡排序),甚至屬於 TIME(n log n)(合併排序),因此屬於 P。靠嘗試所有子集來判定一個困難搜尋,落在 TIME(2^n),屬於 EXPTIME。這些類別層層相套:每個 TIME(n log n) 裡的問題也在 TIME(n^2) 裡,後者在 P 裡,P 又在 EXPTIME 裡。

TIME(f(n)) 依時間預算把問題分箱;像 P 這樣的聯集把許多箱子捆成一個穩健的地標。

TIME(f(n)) 以確定型機器與 O(f(n)) 步數界限定義;單一界限對模型敏感,這就是耐久的類別(尤其是 P)要對一整族界限取聯集的原因。

又稱
TIME(f(n))DTIME(f(n))time-bounded classdeterministic time class時間類別