大話資料結構閱讀筆記 一 時間複雜度和空間

2021-08-17 01:55:24 字數 1840 閱讀 8799

先來明確2個名詞的概念:

時間複雜度:

書上對於時間複雜度的定義是這樣的:在進行演算法分析時,語句總的執行次數t(n)是關於問題規模n的函式,進而分析t(n)隨n的變化情況進而確定t(n)的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作t(n)=o(f(n))。它表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸進時間複雜度,簡稱時間複雜度。其中f(n)是時間規模n的某個函式。

如果看的頭疼,暫時理解為是衡量乙個演算法執行需要的計算工作量。

空間複雜度:

書上定義的是通過計算演算法所需的儲存空間實現,演算法空間複雜度的計算公式s(n) = o(f(n)),其中,n為問題規模,f(n)為語句關於n所佔儲存空間的函式。

暫理解為是指執行這個演算法所需要的記憶體空間。

定義理解完了,書上的理解不了,就理解成簡單的。後面深入了解的時候,也許就理解作者的定義了,時間複雜度用的比較多,也較為豐富,我們先來看看時間複雜度。再看時間複雜度之前,我們需要看3個準則。看不懂沒關係,知道有他們就好了,後續的內容慢慢就懂了。

如何推導大o階:

(1)用常數1取代執行時間中的所有加法常數,如o(1)。

(2)在修改後的執行次數函式中,只保留最高端數,如n²+n 為 o(n²)。

(3)如果最高端數存在且不是1,則去除與這個項相乘的常數,如3n³ 為 o(n³)。

看乙個演算法。稱為常數階

intsum = 

0, n = 

200; 

// 執行一次

sum = (1

+ n) * n / 2; 

// 執行一次

system.out.println(sum); // 執行一次

那麼他的f(n)=1+1+1=3   時間複雜度o(fn)

=1.為什麼是1不是3呢?  看第乙個準則。不管f(n)等於多大的常數,他的時間複雜度o(fn)都是1.。簡單粗暴。

看第二個演算法。稱為線性階

for(

inti = 

0; i < n; i++)  

執行次數f(n)=

n   那麼時間複雜度o(fn)=n;

看第三個演算法。稱為對數階

intcount = 

1;  

while

(count < n)  

有x個2相乘後大於n就會退出迴圈,利用高中數學知識由2的x次方等於n --> x = logn 那麼o(fn)=o(logn)

看第四個演算法。稱為平方階

for(

inti = 

0; i < n; i++)  

}  時間複雜度o(n*n)=o(

n²),這個不難,那麼看看下面這個演算法

for(

inti = 

0; i < n; i++)  

} 那麼需要執行的次數就是n+(n-1)+(n-2)+....+1=

n²/2+

n/2那麼按照上面的規則其實時間複雜還是

o(n²

)。所以考驗的其實還是高中的數學知識。

常用時間複雜度所耗費時間從小到大依次為:o(1) < o(logn) < o(n) < o(nlogn) < o(n²) < o(n³) < o(2n) < o(n!) < o(n²)

至於空間複雜度,就是一般拿空間換時間了,演算法的空間複雜度一般也以數量級的形式給出。如當乙個演算法的空間複雜度為乙個常量,即不隨被處理資料量n的大小而改變時,可表示為o(1);當乙個演算法的空間複雜度與以2為底的n的對數成正比時,可表示為o(log2n);當乙個演算法的空間複雜度與n成線性比例關係時,可表示為o(n)。用的好像並不多,通常沒有說明的時候,一般都是問時間複雜度,時間複雜度是乙個非常重要的概念,直接影響到我們的**執行效率。

大話資料結構學習之(一) 時間空間複雜度

推導大o階 1 用常數1取代執行時間中所有的加法常數 2 在修改後的執行次數函式中,只保留最高端 3 如果最高項存在且不是1,則去掉與這個項相乘的常數 得到的結果就是大o階。常數階 線性階如單層for迴圈 對數階如 while count如雙層for迴圈 下面的巢狀迴圈,時間複雜度是多少呢?int ...

一 時間複雜度

一 時間複雜度計算規則 1.基本操作,即只有常數項,其時間複雜度為o 1 比如if,print 與規模n無關 2.順序結構 按加法計算 3.迴圈結構,按乘法計算 4。分支結構,時間複雜度取最大值。二 常見時間複雜度與大小關係 常數項 o 1 12線性項 o n 2n 3平方項 o n 2 4n 3 ...

演算法(一)時間複雜度

演算法很重要,但是一般情況下做移動開發並不經常用到,所以很多同學早就將演算法打了個大禮包送還給了老師了,況且很多同學並沒有學習過演算法。這個系列就讓對演算法頭疼的同學能快速的掌握基本的演算法。過年放假階段玩了會遊戲nba2k17的生涯模式,沒有比賽的日子也都是訓練,而且這些訓練都是自發的,沒有人逼你...