演算法學習 大O表示法

2021-09-21 19:33:47 字數 1310 閱讀 5141

上一節我們使用了兩種不同的方式來獲得兩個數的最大公約數,那麼如何判斷我們應該使用哪一種方式呢?這裡就涉及到了演算法的時間複雜度、空間複雜度、穩定性等幾個方面的因素,這次我們要討論的大o表示法就是用來表示時間複雜度。

大o表示法法讓你能夠比較運算元,它指出了演算法執行時間的增速——《演算法**》

在開始學習之前請先確認一下你是否還記得高中所學的對數。

$$ \log_9 $$

如果你可以一眼看出這個對數的結果是3,那麼我們就可以進入接下來的部分了。

大o表示法是一種特殊的表示法,指出了演算法的運算速度有多快。

首先我們來看乙個函式,當我們輸入n時,函式的結果是1+2+...+n的和。

int add(int n)

return a; //第5行

}

在這裡for語句需要執行n次,我們就稱他是時間複雜度為o(n)。

之所把他叫做大o表示法,僅僅因為運算元前面有乙個大o。

這裡我們可以再看乙個二分查詢的例子,二分查詢類似於我們小時候玩的猜數遊戲,當你猜乙個數時,你的小夥伴會告訴你這個數是否正確,偏大了還是偏小了。直到你最終猜出正確的答案。比如我們猜1-100中的乙個數,我們會猜50,得到結果之後就可以把範圍縮小到1-50或者51-100,以此類推。每次我們都能將查詢的範圍縮小一半。

所以我們每次的查詢範圍就是n,n/2,n/4,....直到

$$ n/2^k $$

其中k就是迴圈的次數,隨著k的增大,他們的比值將越來越接近於1。

令$$ n/2^k=1 $$

可得$$ k=\log_2 n $$

即當我們需要在長度為n的表上查詢的時候,最多需要查詢的次數是

$$ \log_2 n $$

所以二分查詢的時間複雜度即為

$$ o(\log_2 n) $$

注意事項:演算法的速度並非指時間,而是運算元的增速。

1.$$ o(\log_x n) $$

這樣的演算法包括二分查詢

2.$$ o(n) $$

這樣的演算法包括簡單查詢

3.$$ o(n*\log_x n) $$

這樣的演算法包括快速排序

4.$$ o(n)^2 $$

這樣的演算法包括選擇排序

1.《演算法**》

2.《演算法(第四版)》

大O表示法

用另乙個 通常更簡單的 函式來描述乙個函式數量級的漸近上界。大o表示法 稱乙個函式g n 是o f n 當且僅當存在常數c 0和n0 1對一切n n0均有 g n c f n 成立,也稱函式g n 以f n 為界或者稱g n 受限於f n 記作g n o f n 定義 如果乙個問題的規模是n,解這一...

大O表示法

大o表示法 汽交按尺寸被分為若干類 微型 小型 中型等等。在不提及具體尺寸的情況下,這些分類可以為我們所涉及到車的大小提供乙個大致慨念。我們同樣也需要一種快捷的方法來評價計算機演算法的效率,在電腦科學中,這種粗略的度量方法被稱作 大o 表示法。在比較演算法時似乎應該說一些類似 演算法a比演算法b快兩...

大o表示法

下面是一些常用的時間複雜度以及簡單的定義 o 1 常量時間 o 1 表示該演算法的執行時間 或執行時占用空間 總是為乙個常量,不論輸入的資料集是大是小。bool isfirstelementnull ilistelements o n o n 表示乙個演算法的效能會隨著輸入資料的大小變化而線性變化。...