一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式f(n),演算法的時間量度記作t(n)=o(f(n))。
它隨問題規模n的增大,演算法時間的增長率不超過f(n)的增長率,稱作演算法的漸進時間複雜度,簡稱時間複雜度。
一般情況下,通過找出執行次數最多的**段,把它們的執行語句的總次數表示為n的函式。
1、大部分情況下,單個表示式和語句的執行時間是常數,記為 o(1)( 即 o(n^0) )。
2、對於並列迴圈語句,取各迴圈結構計算時間的最大值。
3、對於巢狀迴圈結構,取最內層迴圈體中語句執行次數。
4、如果各層迴圈的次數是相互無關的,可簡單採用乘法法則:各層迴圈的次數相乘。
5、遞迴演算法的執行時間可分為以下兩部分
(1)執行目前層次的遞迴分解運算所需時間。
(2)執行遞迴呼叫所需時間。
下面將演算法中常見的f(n)值根據幾種典型的數量級來列成一張表,根據這種表,我們來看看各種演算法複雜度的差異類符號
舉例常數
o(1)
返回陣列的第乙個元素
對數o(logn)
對有序陣列進行折半查詢
線性o(n)
對陣列進行順序查詢
nlogn
o(nlogn)
歸併排序
平方o(n^2)
選擇排序
立方o(n^3)
傳統的矩陣相乘
指數o(2n)
漢諾塔
其中x軸代表n值,y軸代表t(n)值(時間複雜度)。t(n)值隨著n的值的變化而變化,其中可以看出o(n!)和o(2ⁿ)隨著n值的增大,它們的t(n)值上公升幅度非常大,而o(logn)、o(n)、o(nlogn)隨著n值的增大,t(n)值上公升幅度則很小。
常用的時間複雜度按照耗費的時間從小到大依次是:
o(1)1、常數階
int sum =
0,n =
100;
//執行一次
時間複雜度為o(1)
2、線性階
int sum =0;
for(
int i =
0; i<=n;
++i)
每次迴圈執行一次,迴圈n次,頻度為n,時間複雜度為o(n)。
3、對數階
int i=0;
for(
;i
從上面的**中,i每次乘以2後,都會越來越逼近n,當i不小於n時就會退出迴圈。假設迴圈的次數為x,則由2^x=n得出x=log₂n,因此得出這個演算法的時間複雜度為o(logn)。
4、平方階
int sum=
0for(int i=
0;i)}
從上面**可看出,內層與外層均迴圈了n次,所以該演算法時間複雜度為o(n^2)。
5、立方階
for
(i=1
;i<=n;i++
)for
(j=1
;j<=n;j++
)for
(k=1
;k<=n;k++
) s++
;
從上面**可以看出,執行次數是n*n *n次,時間複雜度為o(n^3)。
除了上述例子外,還有nlogn階和指數階。
時間複雜度 空間複雜度 小結
在計算機領域裡,演算法是一系列程式指令,用於處理特定的運算和邏輯問題。衡量演算法優劣的主要標準是時間複雜度和空間複雜度。資料結構是資料的組織 管理和儲存格式,其使用目的是為了高效地訪問和修改資料。資料結構包含陣列 鍊錶這樣的線性資料結構,也包含樹 圖這樣的複雜資料結構。時間複雜度是對乙個演算法執行時...
dfs時間複雜度 時間複雜度 空間複雜度
時間複雜度的數學證明方法相對比較複雜,通常在工程實際中,會分析就好。注意 只看最高複雜度的運算 int for for for for int遞迴如何分析時間複雜度?常數係數可以忽略,在分析時不用考慮,只要說以上術語即可。主定理 master throrem 上述第四種是歸併排序,所有排序演算法,最...
時間複雜度 空間複雜度
時間複雜度 在電腦科學中,演算法的時間複雜度是乙個函式,它定性描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的字串 的長度的函式。時間複雜度常用大o符號 表述,不包括這個函式的低階項和首項係數。計算時間複雜度的方法 1 只保留高階項,低階項直接丟棄 2 係數不要 3 執行次數是常數是為o 1...