0 時間複雜度

2021-10-02 22:55:49 字數 2658 閱讀 4489

快:時間複雜度

省:空間複雜度

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 來表示乙個演算法的時間複雜度。通常估計乙個演算法的時間複雜度是這...