計算複雜度

2021-09-25 19:21:10 字數 2304 閱讀 1133

求極限

n->無窮大:

表示式n:–>無窮大

表示式1/n:—>0

(2n2+2n3+n)/n^3

2/n+2+1/n^2

n–》無窮大的時候:

2/n–》0

1/n^2-》0

2–》常數—》此演算法的時間複雜度是n^3

時間複雜度的概念:

執行的次數和同數量級(n最高次方數)取商是常數

,那麼同數量級就是這個演算法的時間複雜度

時間複雜度的計算過程:

1 算出每一行語句執行的次數

2 求和,推導出乙個n的表示式t(n)

3 找出同數量級的表示式(n的最高次方)

4 t(n)/同數量級–>常數,那麼同數量級就是此演算法的時間複雜度

舉例1:

for i in range(n): #n

for j in range(5) : #5n

print(i,j) #5n

print(100) #1

t(n)=n+5n+5n+1=11n+1

第三步:同數量級:n

第四步:(11n+1)/n=11

時間複雜度:t(n)=o(n)

舉例2:

常數階temp=i;

i=j;

j=temp;

以上三條單個語句的頻度均為1,該程式段的執行時間是乙個與問題規模n無關

的常數。演算法的時間複雜度為常數階,時間複雜度記作t(n)=o(1)。

如果演算法的執行時間不隨著問題規模n的增加而增長,即使演算法中有上千條語句,其執

行時間也不過是乙個較大的常數。此類演算法的時間複雜度是o(1)。

舉例3:

n階:for i in range(n): #n

print(1) #n

2n–>n

時間複雜度:o(n)

舉例4:

n2階:

for i in range(n): #n

for j in range(n): #n^2

print(1) #n^2

t(n)=2n^2+n

時間複雜度:o(n)=n^2

舉例5:

n^3階:

for i in range(n): #n

for j in range(n): #n^2

for m in range(n): #n^3

print(1) #n^3

t(n)=2n3+n2+n

時間複雜度:o(n)=n^3

舉例5:

對數階i=1; ①

while (i<=n) #x表示它的執行次數

i=i2; ② 每執行一次,都會2,所以執行次數為2的f(n)次方

解:語句1的頻度是1,

設語句2的頻度是f(n), 則:2^f(n)<=n;f(n)<=log2n

取最大值f(n)= log2n,

時間複雜度:t(n)=o(log2n )

技巧:迴圈n的時候,迴圈體裡面有了一些條件,讓n的執行次數變小,那麼就可以認

為是log2n的時間負責度

舉例6:

n的對數階:nlog2n

for i in range(n):

i=1; ①執行1次

while (i<=n) #x表示它的執行次數

i=i*2;

時間複雜度:t(n)=o(nlog2n )

時間複雜度常用的記憶法:

1)訪問陣列中的元素是常數時間操作,或說o(1)操作。

2)乙個演算法如 果能在每個步驟去掉一半資料元素,如二分檢索,通常它就取o(logn)

時間。3)用strcmp比較兩個具有n個字元的串需要o(n)時間。

4)常規的矩陣乘演算法是o(n^3),因為算出每個元素都需要將n對 元素相乘並加到一起

,所有元素的個數是n^2。

5)指數時間演算法通常**於需要求出所有可能結果。例如,n個元 素的

6)集合共有2n個子集,所以要求出所有子集的演算法將是o(2n)的。指數算

7)法一般說來是太複雜了,除非n的值非常小,因為,在 這個問題中增

8)加乙個元素就導致執行時間加倍。

在計算時間複雜度時,我們一般使用的大o表示法,其時間複雜度,從小到大的排序是

:(1) < (logn)< (n)< (nlogn)< (n^2)<…< (2^n)< (n!)

時間複雜度越大,時間越多,算的越慢

穩定排序

a=[1,2,-1,-2,3,5,3]

排序:用乙個演算法排序,排序之後,2個3(任意的多個相等值)的前後相對位置沒有

發生變化。換句話說,在排序中,2個3沒有進行過交換,那麼就叫穩定排序。

複雜度計算

在1 n 中,能被 2整除的有 n 2個,能被 3整除的有 n 3個,則該演算法的複雜度可這樣計算 o n n 2 1 n 3 2 n 5 3 n 7 4 即o n n n 考慮到6這個數,它既是2的倍數,也是3倍數,因此還要用到容斥原理。設能被第 i個素數整除的正整數的集合為ai。對於特定的乙個整...

計算時間複雜度與空間複雜度

如何衡量乙個演算法的好壞?複雜度 空間複雜度 時間複雜度 事後統計法 就是在演算法的程式執行結束後,根據實際執行結果衡量演算法好壞 事前估計法 就是在程式執行之前,先按照程式 來預估演算法的好壞 時間複雜度 用基本指令的執行次數而不是執行時間代表時間複雜度,同乙個程式在不同配置的機器下的執行時間不一...

時間複雜度和空間複雜度計算

時間複雜度 首先要說的是,時間複雜度的計算並不是計算程式具體執行的時間,而是演算法執行語句的次數。當我們面前有多個演算法時,我們可以通過計算時間複雜度,判斷出哪乙個演算法在具體執行時花費時間最多和最少。常見的時間複雜度有 常數階o 1 對數階o log2 n 線性階o n 線性對數階o n log2...