演算法,通俗來說,就是被設計出來用於解決某個或某類問題,具有一定通用性的計算流程和方法。
解決某個問題,通常有不止一種演算法。評價乙個演算法的優劣,從3個方面進行考察:
時間複雜度
額外空間複雜度
常數項時間
通常用最壞時間複雜度(大寫o)來表示乙個演算法的時間複雜度。
通常估計乙個演算法的時間複雜度是這樣進行的:將演算法的執行過程拆分成乙個個的常數時間操作,然後計算所有常數時間操作的總個數,最後將總個數表示為問題規模n的函式表示式,作為演算法的時間複雜度。
常見的演算法時間複雜度,從好到壞,依次是(求解問題的規模為n):
時間複雜度
典型問題
o(1) 常數時間複雜度
hashmap的put/get
o(logn) 以2為底
二分查詢
o(n)
遍歷找最大值
o(n*logn)
o(n ^ 2) o(n ^ 3) …
o(2 ^ n) o(3 ^ n) …
o(n!)
全排列問題
o(n^n)
n皇后問題
01 時間複雜度 空間複雜度
1 時間頻度 乙個演算法中的語句執行次數稱為語句頻度或時間頻度。記為t n n稱為問題的規模,當n不斷變化時,時間頻度t n 也會不斷變化。2 時間複雜度 若有某個輔助函式f n 使得當n趨近於無窮大時,t n f n 的極限值為不等於零的常數,則稱f n 是t n 的同數量級函式。記作t n f ...
1 時間複雜度
演算法的計算成本涵蓋許多方面,為確定計算成本的度量標準,我們不妨從計算速度這一重要因素入手。但是這一問題並不是容易直接上手回答,原因在於,運算時間是由許多因素綜合作用而決定的。即使是同一演算法,對於不同的輸入所需的運算時間並不相同。問題規模往往是決定計算成本的主要因素。一般的,問題規模越相近,相應的...
0 時間複雜度
快 時間複雜度 省 空間複雜度 def get sum n result 0 for i in range 1,n 1 result i return result假設每行 對應的cpu執行時間一樣,為乙個時間單位unit time 可以看到該函式第2 5行執行1次,第3 4行執行n次 總共執行時間...