2015-05-11 132 views
1

我目前正在參加一個算法課,我們正在討論大O符號等。上一次,我們談到了如何您可以使用Big O符號進行加法/乘法嗎?

O (n^2 + 3n + 5) = O(n^2) 

,我想知道,如果同樣的規則適用於本:

O(n^2) + O(3n) + O(5) = O(n^2) 

另外,不要下面的符號持有?

O(n^2) + n 

O(n^2) + Θ (3n+5) 

後來n爲0之外,所以我不知道它應該意味着。在第二種表示法中,我將O和Θ相加。

+0

我不喜歡使用這種標記沒有定義它,因爲目前還不清楚是什麼應該是這個意思。可能O(x)+ O(y)表示O(x + y),同樣O(x)+ y;當你混合像O(n^2)+Θ(3n + 5)這樣的漸近類時,它會變得模糊不清。如果您參與了這類練習,請提出澄清。 –

回答

3

至少在實踐中,the Landau O(...) can be viewed as a function(因此其符號的吸引力)。This function has properties for standard operations,例如:

O(f(x)) + O(g(x)) = O(f(x) + g(x)) 
O(f(x)) * O(g(x)) = O(f(x) * g(x)) 
O(k*f(x)) = O(f(x)) 

井定義的函數f(x)g(x),並且一些常數k

因此,對於你的例子,

是:O(n^2) + O(3n) + O(5) = O(n^2)
和:
O(n^2) + n = O(n^2) + O(n) = O(n^2)
O(n^2) + Θ(3n+5) = O(n^2) + O(3n+5) = O(n^2)

+0

感謝您的回答!但我不完全明白爲什麼Θ(3n + 5)可以簡單地變成O(3n + 5)?如果我是正確的,Θ(3n + 5)應該意味着'增長完全像3n + 5',所以我可以說它也'增長不超過3n + 5',從而使得Θ(3n + 5)= O(3n + 5)? – ThunderBalls

+0

是的,這是完全正確的。 'O(3n + 5)'是一個稍微更一般的,不太具體的語句---你不能**做出反向聲明,即'O(3n + 5)=Θ(3n + 5)',因爲在技​​術上'n^0.5 = O(n^2)'(因爲'n^2'仍然是一個上限),但'n^0.5≠Θ(n^2)' – DilithiumMatrix

+1

啊我想我現在明白了。非常感謝你的幫助 :) – ThunderBalls

0

記號:

O(n^2) + O(3n) + O(5) = O(n^2) 

以及,例如:

f(n,m) = n^2 + m^3 + O(n+m) 

濫用平等符號,因爲它違背平等的公理。爲了更加正式地正確,你需要將O(g(x))定義爲一個集值函數,其值是所有函數的增長速度都不會快於g(x),並且使用集合成員符號來表示特定的功能是該組的成員。

Landau符號(大O)沒有定義加法和乘法。

+0

這些例子如何違反(哪個?)公平的公理? – DilithiumMatrix

+0

對稱公理:「如果a = b,則b = a」。大多數Landau符號的用法是這樣的形式:f(x)= O(g(x)),這意味着「存在常數N和C,使得| f(x)| <= C * | g(x)|所有x> N「,並且不表示平等。 (與f(x)爲O(g(x)))或類似的用法相反) –

0

而且下面的符號持有

O(n^2) + n = O(n^2) 

O(n^2) + Θ(3n+5) = O(n^2), Θ(n) 

希望這是有道理的......

0

在複雜性理論,朗道符號用於套的功能。因此O(*)不代表一個單一的功能,而是一整套。的操作者+沒有爲集定義,然而,在分析功能當下列常用:

O(*) + g(n) 

這通常表示一組其中g(n)被添加到每個函數中O(*)功能。結果集可以用大O符號再次表示。

O(*) + O(**) 

這與此類似。然而,它表現得像一種笛卡爾產品。來自O(**)的每個功能都被添加到O(*)的每個功能中。

O(*) + Θ(*) 

這裏適用同樣的規則。但是,由於O(*)的鬆動,結果通常不能表示爲Θ(**)。表示爲O(**)仍然有可能。