我感到困惑的僞多項式時間比較多項式時間僞多項式時間和多項式時間
input(n);
for (int i=0; i<n;i++){
doStuff; }
運行時會O(n)
但寫出數n取x=O(log n)
位。因此,如果我們讓x是寫入輸入n所需的位數,則此算法的運行時間實際上是O(2^x)
,這不是x中的多項式。 這個結論是否正確?
編輯:看看簡單的素數測試。
function isPrime(n):
for i from 2 to n - 1:
if (n mod i) = 0, return false
return true
運行時將是O(n)
。但是請記住,時間複雜度的正式定義會將算法的複雜性作爲輸入位數的函數。因此,如果我們讓x是寫入輸入n所需的位數,那麼算法的運行時間實際上是O(2^x),它不是x中的多項式。編輯2:我得到了你所有的觀點,但看看揹包問題。 //輸入:
// Values (stored in array v)
// Weights (stored in array w)
// Number of distinct items (n)
// Knapsack capacity (W)
for j from 0 to W do:
m[0, j] := 0
for i from 1 to n do:
for j from 0 to W do:
if w[i] > j then:
m[i, j] := m[i-1, j]
else m[i, j] := max(m[i-1, j], m[i-1, j-w[i]] + v[i])
如果你們是對的那豈不是揹包問題具有運行o(n*W)
,因此它具有多項式時間!
編輯我的回答:) –