03 資料結構基礎 演算法的時間複雜度

2021-10-21 07:36:24 字數 1337 閱讀 8264

思考一下我們如何評估演算法時間開銷呢?

我們可以讓演算法先執行,事後統計。但是會出現以下幾個問題:

1.不同機器的效能不同

2.程式語言不同,越高階越慢

3.一些演算法不能事後統計

4.和編譯程式產生的機器指令質量有關

所以我們需要事前預估。引入時間複雜度

實際上就是時間開銷t(n)與問題規模n的關係

上述**中:

1執行了1次

2執行3001次

3執行3000次

4執行1次

所以:t(3000)= 1+3001+2*3000+1

轉換為表示式為t(n)=3n+3

思考這個問題:如果表示式中有高次我們怎麼處理?是否可以忽略表示式某一部分?

答案是肯定的

如果出現高次,我們只取最高項,並且也忽略這一項的係數

我們用大o表示同階,同等數量級。

所以我們表示式可以簡化為:t= o(n),t=o(n²)……

函式舉例階階數

12o(1)

常數階2n+3

o(n)

線性階3n2+2n+1

o(n2)

平方階5log2n+20

o(logn)

對數階2n+3nlog2n+19

o(nlogn)

nlogn階

6n3+2n2+3n+4

o(n3)

立方階2n

o(2n)

指數階消耗時間順序:常對線,冪指階

o(1) < o(log2n) < o(n) < o(nlog2n) < o(n2) < o(n3) < o(2n) < o(n!) < o(nn)

多層巢狀時,分析最深層的

加法規則:o(f(n)) + o(g(n)) = o(max(f(n),g(n)))

乘法規則:o(f(n)) * o(g(n)) = o(f(n)*g(n))

假設有乙個從1到n亂序的陣列。

乙個迴圈從陣列第乙個元素查詢元素n。會出現下面三種情況:

最壞時間複雜度:n在最後乙個位置

平均時間複雜度:n在任意位置,概率1/n,迴圈次數x= (1+2+3+…+n)1/n=(n*(1+n)/2)*1/n=(1+n)/2

最好時間複雜度:n在第乙個位置

可以看出演算法執行時間可能與輸入的資料有關

資料結構,演算法,時間複雜度

什麼是資料結構 data structure 中文維基百科 維基百科中文版 在電腦科學中 是計算機中儲存 組織資料的方式。資料結構意味著介面或封裝 乙個資料結構可被視為兩個函式之間的介面,或者是由資料型別聯合組成的儲存內容的訪問方法封裝。不同種類的資料結構適合不同種類的應用,部分資料結構甚至是為了解...

資料結構 演算法的時間複雜度

如果乙個問題的規模是n,解這一問題的某一演算法所需要的時間為t n 它是n的某一函式 t n 稱為這一演算法的 時間複雜性 當輸入量n逐漸加大時,時間複雜性的極限情形稱為演算法的 漸近時間複雜性 我們常用大o表示法表示時間複雜性,注意它是某乙個演算法的時間複雜性。大o表示只是說有上界,由定義如果f ...

資料結構 演算法 03

1.棧結構實現 棧可以用順序表實現,也可以用鍊錶實現。棧的操作 stack 建立乙個新的空棧 push item 新增乙個新的元素item到棧頂 pop 彈出棧頂元素 peek 返回棧頂元素 is empty 判斷棧是否為空 size 返回棧的元素個數 2.佇列 佇列 queue 是只允許在一端進行...