簡體   English   中英

證明或反駁時間復雜性

[英]Proving or Refuting Time Complexity

我馬上要考試了,我很久沒上大學了,因為我在醫院

證明或反駁以下陳述:

  1. log(n)= O( √ n)

  2. 3^(n-1)= O(2^n)

  3. f(n) + g(n) = O(f(g(n)))

  4. 2^(n+1) = O(2^n)

有人可以幫我解釋一下嗎?

(1) 是正確的,因為 log(n) 的增長速度比任何多項式都慢,包括 sqrt(n) = n^(1/2)。 為了證明這一點,我們可以觀察到 log(n) 和 sqrt(n) 都是 n > 0 的嚴格遞增函數,然后將重點放在一個都容易計算的序列上,例如 2^(2k)。 現在我們看到 log(2^(2k)) = 2k,但是 sqrt(2^(2k)) = 2^k。 對於 k = 2,2k = 2^k,對於 k > 2,2k < 2^k。 這掩蓋了一些細節,但這個想法是合理的。 您可以通過論證在 2^(2k) 和 2^(2(k+1)) 之間,當 k >= 2 時,兩個函數的值都大於 1,因此可以通過將 sqrt(n) 乘以消除任何交叉一些常數。

(2) 3^(n-1) 不是 O(2^n)。 假設這是真的。 然后存在 n0 和 c,使得對於 n > n0,3^(n-1) <= c*2^n。 首先,通過在前面添加(1/3)來消除-1; 所以 (1/3)*3^n <= c*2^n。 接下來,除以 2^n:(1/3)*(3/2)^n <= c。 乘以 3:(3/2)^n <= 3c。 最后,取以 3/2 為底的雙方的對數:n <= log_3/2 (3c)。 RHS 是一個常量表達式,n 是一個變量; 所以這對於需要的任意大的 n 是不可能的。 這是一個矛盾,所以我們的假設是錯誤的; 也就是說,3^(n-1) 不是 O(2^n)。

(3) 這不是真的。 f(n) = 1 和 g(n) = n 是一個簡單的反例。 在這種情況下,f(n) + g(n) = 1 + n 但 O(f(g(n)) = O(f(n)) = O(1)。

(4) 這是真的。 將 2^(n+1) 重寫為 2*2^n,很明顯,通過選擇 c > 2,這對於 n >= 1 是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM