衡量程式執行效率之時間複雜度和空間複雜度

2022-01-12 16:41:48 字數 1172 閱讀 3683

複雜度是衡量**執行效率的重要的度量因素。

複雜度與計算機實際任務處理的效率

計算機通過程式去執行計算任務,也就是對輸入資料的加工處理並得到結果的過程。對於相同的任務,不同的計算方法導致計算過程的複雜程度不同,比如:

假設乙個任務,系統平均每秒新增10m資料,如果你的**不能在1分鐘內處理10m資料,系統就會發生時間**和空間**。因此需要盡可能地降低計算複雜度。

衡量複雜度的維度:時間複雜度和空間複雜度

你的**在執行的時候消耗的是計算時間和計算空間,那麼就需要去衡量時間複雜度和空間複雜度。

有了時間複雜度和空間複雜度,我們就要關注其消耗的資源量有多少。為了更客觀的比較,我們通常會更關注時間或空間消耗量與輸入資料之間的關係。

計算複雜度

複雜度是乙個關於輸入資料量 n 的函式。假設你的**複雜度是 f(n),那麼就用個大寫字母 o 和括號,把 f(n) 括起來就可以了,即 o(f(n))。例如,o(n) 表示的是,複雜度與計算例項的個數 n 線性相關;o(logn) 表示的是,複雜度與計算例項的個數 n 對數相關。

通常,複雜度的計算方法遵循以下幾個原則:

首先,複雜度與具體的常係數無關,例如 o(n) 和 o(2n) 表示的是同樣的複雜度。我們詳細分析下,o(2n) 等於 o(n+n),也等於 o(n) + o(n)。也就是說,一段 o(n) 複雜度的**只是先後執行兩遍 o(n),其複雜度是一致的。

其次,多項式級的複雜度相加的時候,選擇高者作為結果,例如 o(n²)+o(n) 和 o(n²) 表示的是同樣的複雜度。具體分析一下就是,o(n²)+o(n) = o(n²+n)。隨著 n 越來越大,二階多項式的變化率是要比一階多項式更大的。因此,只需要通過更大變化率的二階多項式來表徵複雜度就可以了。

值得一提的是,o(1) 也是表示乙個特殊複雜度,含義為某個任務通過有限可數的資源即可完成。此處有限可數的具體意義是,與輸入資料量 n 無關。

時間複雜度與**結構的關係

總的來說:

複雜度與具體的常係數無關,o(n) 和 o(2n) 表示的是同樣的複雜度。

複雜度相加的時候,選擇高者作為結果,也就是說 o(n²)+o(n) 和 o(n²) 表示的是同樣的複雜度。

o(1) 也是表示乙個特殊複雜度,即任務與算例個數 n 無關。

演算法之 時間複雜度和空間複雜度

平時用的少,經常忘記,這裡記錄下時間複雜度的概念 複雜度是演算法的一種標記方法。用o表示,通常讀為big o o的包含了時間複雜和空間複雜度 這裡就只說時間複雜度。時間複雜度的概念,個人總結,可能不太準確。時間複雜度,即標記乙個問題,隨著問題規模的變化,所需要花費時間的關係。時間複雜度就是問題規模和...

演算法之時間複雜度

前言 學習這東西,很枯燥也很煩,參考許多博文,選了許多。結合一些東西,記錄一下,也是為了以後回顧學習。演算法效率 說到演算法效率 不得不提兩個指標,那就是 時間複雜度 空間複雜度 好的演算法應該具備時間效率高和儲存量低的特點。計算機能快速完成大量複雜的資料處理,但是要完成這個工作,計算機也是需要一定...

演算法系列 衡量的標準之時間複雜度

前言 數學中有演算法,計算機中亦有演算法,此處演算法系列討論的是計算機中的演算法。說到演算法,就要聊一聊演算法的複雜度了。什麼是複雜度?為什麼要知道複雜度?如何衡量複雜度?了解這些,是我們寫好演算法的基礎。下面我們就來聊一聊演算法世界的標準,演算法的複雜度。什麼是演算法複雜度,聽到這個名字,就是問號...