2017-02-28 34 views
-2

兩個A和B的表達:數學 - 2算法的關係

img

A = 2^(3(log_3 n)) 
B = 6(n^2) 

正如我需要指明A是否大-OH,大歐米茄,或B的大-θ , 是A=O(B)

如何解決這個問題?

+0

你的問題沒有任何意義,這與算法有什麼關係(我假設'A,B'是一些算法的複雜性),但這與比較無關。 'A = O(B)'是什麼意思?'如何解決?你想找到閾值'n'值,所以'A(n)== B(n)'而不是?如果'A,B'確實很複雜,那麼你應該測量閾值,因爲現代架構 – Spektre

+0

上的估計值將會丟失,因爲誤導 – ttllm

+0

,所以你需要證明lim(n - > + inf)A(n) > = lim(n - > + inf)B(n)'這不是編程任務,而是純粹的數學......(但是你可以用數字解決它) – Spektre

回答

2

讓我們做一個簡單的數學(用於對數log(x, b)看臺上b基地; log(x) = log(x, 2)是二進制數):

A = 2 ** (3 * log(n, 3)) = 
    2 ** (log(n ** 3, 3)) = 
    2 ** (log(n ** 3)/log(3)) = 
    n ** (3/log(3)) = 
    n ** (log(2 ** 3, 3)) = 
    n ** (log(8, 3)) ~ 
    n ** 1.8928... 

B = 6 * n**2 

最後,算法A具有更好複雜度高於B1.8928… < 2):

A = O(n**(log(8, 3)) ~ O(n**1.8928) 
B = O(6 * n**2) = O(n**2) 
0

我想放大已經給出答案: 我們可以重寫功能A(n)=2^(3(log_3 n))

A(n) = 2^(3*(log_3 n)) 
    = exp(ln(2^(3*(log_3 n)))) 
    = exp(3*(log_3 n)*ln(2)) 
    = exp(3*ln(n)/ln(3)*ln(2)) 
    = exp(3*ln(2)/ln(3)*ln(n)) 
    = n^(3*ln(2)/ln(3)) 

其中ln是自然對數。所以,我們得到 A(n)/B(n) = 1/6 * n^(3*ln(2)/ln(3)-2)3*ln(2)/ln(3)-2<0 因此

lim_{n to inf} abs(A(n)/B(n)) = 0 < inf 

A=O(B)

由於A收斂時,LIMT,在限劣和限制優越相等:

liminf_{n to inf} abs(A(n)/B(n)) = 0 (!>0) 

A!=Omega(B),從而也A!=Theta(B)

有關定義,請參閱https://en.wikipedia.org/wiki/Big_O_notation