《演算法 時間複雜度的計算》

2022-05-02 08:54:12 字數 1630 閱讀 3200

一:為什麼要計算時間複雜度?

- 一說起時間複雜度,就和演算法扯上了關係,那麼就有了乙個問題,在我們寫好了乙個演算法之後,如何測試這個演算法的好或者不好呢?

- 事後統計法,指的是在演算法完成之後,通過實際的執行來檢驗演算法的好壞。但是,這樣也有兩個致命的缺點

- 如果演算法不行,那麼我們實際執行圖了個什麼?

- 機器效能一會好一會不行怎麼破?

- 因為 事後統計法 的不靠譜,所以我們採用了 事前分析 的方法,也就是我們說的 時間複雜度。

- 不過因為是事前統計,其演算法本身也並沒有通過實際環境的檢驗。

- 所以,時間複雜度,其實只是乙個度量,不是真正的執行時間的投影。

- 也就是說只是給了你乙個尺子去量一下這個演算法的耗時,不是這個演算法實現以後真的會耗時多少,也不是兩個不同的演算法的耗時比例真的可以這麼比。

二:時間複雜度的定義?

-  語句執行次數 t(n) 是問題規模 n 的函式

-  繼而分析 t(n) 隨著 n 的變化並確定 t(n) 的量級

-  記做 t(n) = o(f(n)), 表示隨著 n 的增大,時間的增長率 和 fn 增長率相同

-  一般用 o() 表示,也稱 大 (o) 記法

- 簡單來說,記住這個公式 f(n) = n 

三:如何計算演算法的時間複雜度?

- 推導大 o() 計數法

- 用常數 1 來代替 執行時間的加法常數

- 在修改後的執行次函式中,只保留最高端

- 如果最高端存在且不是1,則去除這個項相乘的常數

- 下面來嘗試如何計算時間複雜度

四:常數階o (1)

- 按照定義,這個演算法的執行次數是 f(n) = 4, 根據我們的大 o 推導演算法, 第一步就是將 4 變為 1。

- 在保留最高端時,發現這個演算法也沒有最高端,所以這個演算法的時間複雜度為 o(1)

- 事實上無論 n 為多少,都是時間恆定的演算法,也是為常數階 o(1)

五:線性階o (n)

-  按照定義,這個演算法的執行次數是f(n) = n, 根據我們的 大 o 推導演算法,儲存最高端的 1,

- 也是為線性階 o(n)

六:對數階o (logn)

- 由於 count 每次 x2 ,有多少個 2 相乘後,便會退出迴圈。

- 由 2x=n 得到 x = log2n

- 對數階o (logn)

七:平方階o (n2)

- 外層呼叫了乙個迴圈,迴圈 n 次去執行 func 函式

- func 函式內部又執行一次迴圈輸出

- 也就是說,這個演算法一共執行了 f(n) = n2 次

- 也就是 平方階o (n2)

七:時間複雜度耗時大小排列(越小越好)

- o(1) < o(logn) < o(n) < o(nlogn) < o(n2) < o(n3) < o(2n) < o(n!) < o(1) < o(nn)

- 一般超過 o(n2) 的,時間太長,就不做計算了,也就是說,乙個演算法,最長耗時不能超過 o(n2)

演算法時間複雜度計算

本部落格主要講解下演算法時間複雜度的基本計算過程。演算法時間複雜度是指演算法中基本操作的執行次數。記為t n o f n t n 為增長比最快項的係數。計算步驟 舉例說明 例1 void funfirst int n step1 基本操作是 j i 2 step2 確定規模,根據迴圈條件,確定規模為...

演算法時間複雜度的計算

定義 如果乙個問題的規模是n,解這一問題的某一演算法所需要的時間為t n 它是n的某一函式 t n 稱為這一演算法的 時間複雜性 求解演算法的時間複雜度的具體步驟是 1 找出演算法中的基本語句 演算法中執行次數最多的那條語句就是基本語句,通常是最內層迴圈的迴圈體。2 計算基本語句的執行次數的數量級 ...

演算法時間複雜度的計算

一 概念 時間複雜度 總運算次數表示式中受到n的影響最大的那一項 二 概念解釋 由於機器執行環境等的影響,的運算時間並不能準確的測算出來。但是,運算之間和演算法中語句的執行次數是成正比的,所以可以用語句之行次數來表徵時間複雜度的大小 三 計算方法 在計算演算法的時間複雜度的時候,先找出基本操作,再根...