快:時間複雜度
省:空間複雜度
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次
總共執行時間為:
t(n)=2 * unit_time+2 * n * unit_time=(2+2n) * unit_time
def print_matrix(n):
for i in range(n):
for j in range(n):
print("*",end="")
print()
假設每行**對應的cpu執行時間一樣,為乙個時間單位unit_time
可以看到該函式第2、5行執行n次,第3、4行執行n*n次
總共執行時間為:
t(n)=2 * n * unit_time+2 * n2 * unit_time=(2n+2n2) * unit_time
通過以上兩個例項可知,**的執行時間與執行次數n程正比
我們將這個規律總結成公式
t(n) = o(f(n))
t(n):**的總執行時間
n:資料規模
f(n):每行**執行的次數總和
o:表示t(n)與f(n)成正比關係
大o時間複雜度實際上並不具體表示**真正的執行時間,而是表示**執行時間隨資料規模增長的變化趨勢,所以,也叫作漸進時間複雜度,簡稱時間複雜度。
當n很大時,公式中的低階、常量、係數三部分並不左右增長趨勢,所以都可以忽略。
我們只需要記錄乙個最大量級就可以,如果用大o表示法表示上述兩例項的時間複雜度,就可以記為:
例項一:t(n) = o(n)
例項二:t(n) = o(n2)
注意:即便某一行**迴圈執行1000次、10000次,只要是乙個已知的數,跟n無關,照樣也是常量級的執行時間。當n無限大的時候,就可以忽略。
總複雜度等於量級最大的那段**的複雜度
def getsum_and_printmatrix(n):
result = 0
#求和for i in range(1,n+1):
result += i
#列印矩陣
for i in range(n):
for j in range(n):
print("*",end="")
print()
return result
求和的時間複雜度為o(n)
列印矩陣的時間複雜度為o(n2)
只關注影響最大的因子,所以這段**的時間複雜度為o(n2)
巢狀**的複雜度等於巢狀內外**複雜度的乘積
def printmatrix(n):
for i in range(n):
for j in range(n):
for k in range(n):
print("*",end="")
print()
print()
乘積法則:關注執行次數最多的那段**,因此這段**的時間複雜度為o(n3)
多項式量級:
常量階o(1)
對數階o(logn)
線性階o(n)
線性對數階o(nlogn)
平方階o(n2) 立方階o(n3) k次方階o(nk)
非多項式量級:
指數階o(2n)
階乘階o(nn)
資料規模n越大,非多項式量級演算法的執行時間會急劇增加,求解問題的執行時間會無限增長。所以,非多項式時間複雜度的演算法是非常低效的演算法。
o(1)只是常量級時間複雜度的一種表示方法,並不是指只執行了一行**。比如下面這段**,即便是有5行,它的時間複雜度也是o(1)
print(1)
print(2)
print(3)
print(4)
print(5)
對數階時間複雜度非常常見,但是難以分析
def getresult(n):
i = 1
while i每次i乘以2後就距離n更近了一分。也就是說,有多少個2相乘後大於n,則會退出迴圈。2^i=n,i=logn,所以時間複雜度為o(logn)
def getresult(n):
result = 0
for i in range(1,n+1): #o(n)
while im,n表示兩個資料規模。我們無法事先評估哪個量級大,所以時間複雜度為o(m+n)
def calc(m,n):
result = 0
for i in range(m):
temp = 0
for j in range(n):
temp += j
result += temp
return result
m,n表示兩個資料規模。我們無法事先評估哪個量級大,所以時間複雜度為o(m*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 時間複雜度
演算法的計算成本涵蓋許多方面,為確定計算成本的度量標準,我們不妨從計算速度這一重要因素入手。但是這一問題並不是容易直接上手回答,原因在於,運算時間是由許多因素綜合作用而決定的。即使是同一演算法,對於不同的輸入所需的運算時間並不相同。問題規模往往是決定計算成本的主要因素。一般的,問題規模越相近,相應的...
演算法01 時間複雜度
演算法,通俗來說,就是被設計出來用於解決某個或某類問題,具有一定通用性的計算流程和方法。解決某個問題,通常有不止一種演算法。評價乙個演算法的優劣,從3個方面進行考察 時間複雜度 額外空間複雜度 常數項時間 通常用最壞時間複雜度 大寫o 來表示乙個演算法的時間複雜度。通常估計乙個演算法的時間複雜度是這...