本篇概念皆是關於時間複雜度
首先需要了解乙個概念
乙個演算法中的語句執行次數稱為語句頻度或時間頻度。記為 t(n)。
乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多
n 稱為問題的規模,當 n 不斷變化時,時間頻度 t(n) 也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念
一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用 t(n) 表示,若有某個輔助函式 f(n),使得當 n 趨近於無窮大時,t(n) / f(n) 的極限值為不等於零的常數,則稱 f(n) 是 t(n) 的同數量級函式。記作 t(n) =o(f(n)). 稱 o(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度。
常數階o(1) < 對數階 o(log2n) < 線性階o(n) < 線性對數階 o(nlog2n) < 平方階o(n²) < 次方階o(n³) < k次方階 o(n^k)
< 指數階 o(2^n) < o(n!) < o(n^n)
(1)最壞時間複雜度
即最壞情況執行時間
通常,除非特別指定,我們提到的執行時間都是最壞情況的執行時間
(2) 平均時間複雜度
因此平均情況通常指的是一種數學期望值,而計算數學期望值則需要對輸入的分布情況進行假設。平均執行時間很難通過分析得到,一般都是通過執行一定數量的實驗資料後估算出來的
(1)計算出基本操作的執行次數t(n)
基本操作即演算法中的每條語句的執行次數一般預設為考慮最壞的情況。
(2)計算出t(n)的數量級
忽略常量、低次冪和最高次冪的係數
令f(n)=t(n)的數量級。
(3)用大o來表示時間複雜度
精簡步驟:
1. 找到執行次數最多的語句
2. 計算語句執行次數的數量級
3. 用大o來表示結果
除此之外, 演算法的時間複雜度不僅僅依賴於問題的規模,還與輸入例項的初始狀態有關
概念理解 時間複雜度 空間複雜度
一.時間複雜度 time complexity 在進行演算法分析時,語句總執行次數t n 是關於問題規模 n 的函式。進而分析執行次數t n 隨規模 n 的變化情況並確定t n 的數量級。演算法的時間複雜度就是演算法的時間度量,記作t n o f n 它表示隨問題規模 n 的增大,演算法的執行時間的...
理解均攤時間複雜度
均攤時間複雜度分析,又叫攤還分析 或者叫平攤分析 均攤時間複雜度,聽起來跟平均時間複雜度有點兒像。對於初學者來說,這兩個概念確實非常容易弄混。大部分情況下,我們並不需要區分最好 最壞 平均三種複雜度。平均複雜度只在某些特殊情況下才會用到,而均攤時間複雜度應用的場景比它更加特殊 更加有限。我還是借助乙...
dfs時間複雜度 時間複雜度 空間複雜度
時間複雜度的數學證明方法相對比較複雜,通常在工程實際中,會分析就好。注意 只看最高複雜度的運算 int for for for for int遞迴如何分析時間複雜度?常數係數可以忽略,在分析時不用考慮,只要說以上術語即可。主定理 master throrem 上述第四種是歸併排序,所有排序演算法,最...