分析演算法的複雜度

2021-10-03 01:46:57 字數 1393 閱讀 4537

語句總的執行次數t(n)是關於問題規模的n的函式

t(n) = o(f(n))

表示隨著問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸近時間複雜度,簡稱為時間複雜度。其中f(n)是問題規模n的某個函式。

隨著輸入規模n的增大,t(n)增長越慢的演算法,演算法越優

判斷乙個演算法的效率時,僅關注函式的最高項的階數即可

用常數1代替所有與問題規模n無關的執行語句

在修改後的執行次數函式中,只保留最高端項

若最高端項存在且係數不為1,去掉該最高端項的常係數

常數階o(1)

**中的所有語句與問題規模n無關

int n =1;

system.out.

print

("* ");

system.out.

print

("* ");

system.out.

print

("* "

);

線性階o(n)

一層迴圈

int sum =0;

for(

int i =

0;i < n;i++

)

平方階o(n2)

雙層迴圈

執行次數:n+(n-1)+(n-2)+…+1=(1/2)n2+(1/2)n

o(n2)

for

(int i =

0;i < n;i++

) system.out.

println()

;}

對數階o(logn)

x個2最後得到n

2x=n

x=log2n

int i =

1,n =

100;

while

(i

nlogn階o(nlogn)

立方階o(n3)

指數階o(2n)

迴圈的時間複雜度等於迴圈體的複雜度乘以該迴圈執行的次數

一般來說,時間複雜度從小排列到大的順序

o(1) < o(logn) < o(n)2)

3)n)n)

判斷乙個演算法的效率時,僅關注函式的最高項的階數即可

o(1) < o(logn) < o(n)2)

空間換時間

演算法複雜度分析

分析非遞迴演算法效率的通用方案 1.決定用哪個 哪些 引數作為輸入規模的度量 2.找出演算法的基本操作 作為一規律,它總是位於演算法的最內層迴圈中 3.檢查基本操作的執行次數是否只依賴輸入規模。如果它還依賴一些其他的特性,則最差效率 平均效率以及最優效率 如果必要 需要分別研究。4.建立乙個演算法基...

演算法複雜度分析

演算法分析的四個漸進表示法 一般,o裡的,取最小的 一般,裡的,取最大的 一般分析時間複雜度,且常考慮最壞複雜度,常用o分析 三法則 法則一 如果t1 n o f n t2 n0 o g n t1 n t2 n max o f n o g n t1 n t2 n o f n o g n 法則二 如果...

演算法複雜度分析

類別name 名字交換類排序 quicksort 快速排序 交換類排序 bubble sort 氣泡排序 選擇類排序 selection sort 選擇排序 選擇類排序 heapsort 堆排序插入類排序 insertion sort 插入排序 插入類排序 shell sort 希爾排序 bucke...