簡體   English   中英

不同漸近符號之間有什么區別?

[英]What is difference between different asymptotic notations?

我對漸近符號真的很困惑。 據我所知,Big-O 表示法是最差的,omega 是最好的情況,theta 是平均情況。 然而,我總是看到 Big O 無處不在,即使在最好的情況下也是如此。 例如,在以下鏈接中,請參閱提及不同排序算法的時間復雜度的表格 -

https://en.wikipedia.org/wiki/Best,_worst_and_average_case

表中的每個地方都使用大 O 表示法,無論是最好的情況、最壞的情況還是平均情況。 那么另外兩種記法有什么用呢,又用在什么地方呢?

Big O 用於上限,而不是最壞的情況! 沒有專門針對最壞情況/最好情況的符號。 您正在談論的示例都有大 O,因為它們都以給定值為上限。 我建議你再看看你從中學習基礎知識的書,因為這對理解非常重要:)

編輯:回答您的疑問 - 因為通常,我們對我們的最高性能感到困擾,即當我們說我們的算法在最佳情況下以 O(logn) 執行時,我們知道它的性能不會比對數時間差在給定的場景中。 這是我們通常尋求減少的上限,因此我們通常會提到大 O 來比較算法。 (並不是說我們從未提及其他兩個)

據我所知,Big-O 表示法是最差的,omega 是最好的情況,theta 是平均情況。

他們不是 Omicron 是(漸近)上限,omega 是下界,theta 是界,既是上限又是下界。 如果算法的下界和上限不同,則復雜度無法用 theta 符號表示。

上限、下限、緊邊界的概念與最佳、平均、最壞情況的概念正交。 您可以分析每種情況的上限,也可以分析最壞情況的不同界限(以及上述任何其他組合)。

漸近邊界總是與表達式中的變量集有關。 例如, O(n)n 最好的、平均的和最壞的情況來自除n所有其他情況。 例如,如果n是元素的數量,那么不同的情況可能來自元素的順序、唯一元素的數量或值的分布。

然而,我總是看到 Big O 無處不在,即使在最好的情況下也是如此。

這是因為在描述算法時,上限幾乎總是最重要和最有趣的上限。 我們很少關心下限。 就像我們很少關心最好的情況一樣。

下限有時可用於描述已被證明具有特定復雜性的問題。 例如,已證明所有通用比較排序算法的最壞情況復雜度為Ω(n log n) 如果排序算法也是O(n log n) ,那么根據定義,它也是Θ(n log n)

O(...)基本上意味着“不(遠)比...慢”。
它可以用於所有三種情況(“最壞情況不慢於”,“最好情況不慢於”,等等)。

Omega 正好相反:您可以說,某些事情不可能比 ...快得多 同樣,它可以用於所有三種情況。 O(...)相比,這並不重要,因為告訴某人“我確定我的程序沒有你的快”並沒有什么值得驕傲的。

Theta 是一個組合:它“(或多或少)與……一樣快”,而不僅僅是更慢/更快。

Big-O表示法類似於這樣>=在漸近相等方面。

例如,如果你看到這個:

x = O(x^2)它確實說x <= x^2 (在漸近術語中)。

它確實意味着“x 至多與 x^2 一樣復雜”,這是您通常感興趣的東西。

即使在比較最佳/平均情況時,您也可以說“在最好的輸入中,我最多會有這種復雜性”。

有兩件事混為一談:Big O、Omega、Theta 是純粹的數學結構。 例如,O (f (N)) 是小於 c * f (n) 的函數集,對於某些 c > 0,並且對於所有 n >= 某個最小值 N0。 根據該定義,n = O (f (n^4)),因為 n ≤ n^4。 100 = O (f (n)),因為 n ≥ 100 時 100 <= n,或者 n ≥ 1 時 100 <= 100 * n。

對於算法,您希望給出最壞情況下的速度,平均情況下的速度,很少是最佳情況下的速度,有時是攤銷平均速度(即運行一次算法確實有效,再次運行時可以使用。就像計算 n! for n = 1, 2, 3, ... 其中每個計算都可以利用前一個)。 無論你測量什么速度,你都可以用一種符號給出結果。

例如,您可能有一個算法,您可以證明最壞的情況是 O(n^2),但您無法證明是否存在更快的特殊情況,也無法證明該算法實際上並沒有更快,就像 O (n^1.9)。 所以 O (n^2) 是唯一可以證明的。

暫無
暫無

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

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