我目前正在參加一個算法課,我們正在討論大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和Θ相加。
我目前正在參加一個算法課,我們正在討論大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和Θ相加。
至少在實踐中,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)
感謝您的回答!但我不完全明白爲什麼Θ(3n + 5)可以簡單地變成O(3n + 5)?如果我是正確的,Θ(3n + 5)應該意味着'增長完全像3n + 5',所以我可以說它也'增長不超過3n + 5',從而使得Θ(3n + 5)= O(3n + 5)? – ThunderBalls
是的,這是完全正確的。 'O(3n + 5)'是一個稍微更一般的,不太具體的語句---你不能**做出反向聲明,即'O(3n + 5)=Θ(3n + 5)',因爲在技術上'n^0.5 = O(n^2)'(因爲'n^2'仍然是一個上限),但'n^0.5≠Θ(n^2)' – DilithiumMatrix
啊我想我現在明白了。非常感謝你的幫助 :) – ThunderBalls
記號:
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)沒有定義加法和乘法。
這些例子如何違反(哪個?)公平的公理? – DilithiumMatrix
對稱公理:「如果a = b,則b = a」。大多數Landau符號的用法是這樣的形式:f(x)= O(g(x)),這意味着「存在常數N和C,使得| f(x)| <= C * | g(x)|所有x> N「,並且不表示平等。 (與f(x)爲O(g(x)))或類似的用法相反) –
而且下面的符號持有
O(n^2) + n = O(n^2)
和
O(n^2) + Θ(3n+5) = O(n^2), Θ(n)
希望這是有道理的......
在複雜性理論,朗道符號用於套的功能。因此O(*)
不代表一個單一的功能,而是一整套。的操作者+
沒有爲集定義,然而,在分析功能當下列常用:
O(*) + g(n)
這通常表示一組其中g(n)
被添加到每個函數中O(*)
功能。結果集可以用大O符號再次表示。
O(*) + O(**)
這與此類似。然而,它表現得像一種笛卡爾產品。來自O(**)
的每個功能都被添加到O(*)
的每個功能中。
O(*) + Θ(*)
這裏適用同樣的規則。但是,由於O(*)
的鬆動,結果通常不能表示爲Θ(**)
。表示爲O(**)
仍然有可能。
我不喜歡使用這種標記沒有定義它,因爲目前還不清楚是什麼應該是這個意思。可能O(x)+ O(y)表示O(x + y),同樣O(x)+ y;當你混合像O(n^2)+Θ(3n + 5)這樣的漸近類時,它會變得模糊不清。如果您參與了這類練習,請提出澄清。 –