大O表示法和時間複雜度

2021-10-08 03:25:28 字數 1396 閱讀 3596

學資料結構和演算法的目的 => 實現程式的高速執行,那麼必然要了解複雜度。

複雜度分為兩個維度:時間、空間。在開發過程中,我們希望時間和記憶體消耗都越少越好,但很多時候無法做到兼顧,需要在時間和空間之間做出取捨已達到最佳狀態。

對複雜度的計算一般採用事前分析估算的方法,即大o表示法。

接下來讓我們進入複雜度的學習!

由保羅·**曼在《解析數論》中首先引入。它描述的是乙個函式數量級的漸進上界,即演算法最壞的情況。

某個演算法的複雜度達到了這個問題複雜度的下界,即為最佳演算法。

比如:從大小為100的存放數字的陣列中找到10,我們需要從頭到尾遍歷,那麼這個是時間複雜度就為 ο(n),(這裡n=100,下面講解為何為ο(n))。若10不是陣列最後一項,我們在<100次的時候就找到 ,可跳出迴圈,所以,大o表示法描述的是最壞的情況。

說明:1. 決定演算法複雜度的,是

執行次數最多的語句

;2. 複雜度的得出,忽略了

常量,低次冪和最高次冪的係數

;3. 加法法則:總複雜度

量級最大

的那段**的時間複雜度;

3. 乘法法則:巢狀**的複雜度等於

內外**複雜度的乘積

度量乙個程式片段的執行時間 

度量乙個程式的執行時間通常有兩種方法

ο(1)<ο(log2(n))<ο(n)<ο(n^2)<ο(n^3)<…<ο(2^n) 

我們可以用

console.time(''mark)  console.timeend(''mark)

來檢視執行時間

1. ο(1):(常數階)如果演算法的執行時間不隨著問題規模n的增加而增長,即使演算法中有上千條語句,其執行時間也不過是乙個較大的常數;

let a = 1;

let b = 2;

let temp = a;

a = b;

b = temp;

2. ο(logn):(對數階)(以2為底n的對數)當資料增大 n 倍時,耗時增大 logn 倍(比如,當資料增大 256 倍時,耗時只增大 8 倍);

例子:二分查詢就是 o(logn)的演算法,每找一次排除一半的可能。

let i = 1;

while(i <= n)

3. ο(n):(線性階)資料量的增大幾倍,耗時也增大幾倍;

for(i = 1; i <= n; i++)
4.  ο(n^2):(平方階)資料量增大 n 倍時,耗時增大 n 的平方倍;

for(i = 1; i <= n; i++) 

}

本文章持續完善中......

大O表示法 時間複雜度

引入原因 用另乙個 通常更簡單的 函式來描述乙個函式數量級的漸近上界。定義 如果乙個問題的規模是n,解這一問題的某一演算法所需要的時間為t n 它是n的某一函式。t n 稱為這一演算法的 時間複雜度 某個演算法的複雜度到達了這個問題複雜度的下界,那就稱這樣的演算法是最佳演算法 決定演算法複雜度的是執...

大O法時間複雜度計算

困惑的點 log,如何計算得出?上限 用來表示該演算法可能有的最高增長率。大o表示法 如果某種演算法的增長率上限 最差情況下 是f n 那麼說這種演算法 在o f n 中 n為輸入規模。上限的精確定義 對非負函式t n 若存在兩個正常數c和n0,對任意n n0,有t n t n 表示演算法的實際執行...

大O演算法複雜度表示

序言 演算法的時間複雜度和空間複雜度都是用 大o表示法 來表示的。其中o是個常量。常見的排序演算法的時間複雜度 氣泡排序 插入排序 希爾排序 選擇排序的時間複雜度是o n 2 快速排序的時間複雜度是o n log n 空間複雜度 氣泡排序 插入排序 希爾排序 選擇排序的空間複雜度是o 1 快速排序的...