演算法基礎課一 複雜度分析

2021-10-04 14:52:16 字數 2148 閱讀 3097

資料結構,是指一組資料的儲存結構,演算法,是指運算元據的一組方法;

資料結構,是為演算法服務的,演算法,作用在特定的資料結構之上;

資料結構和演算法,解決的是如何更省,更快地儲存和處理資料,而考量效率和資源消耗的方法,就是複雜度分析;

假設每行**執行的時間都一樣,為 unit_time,那麼下面**,執行時間 3 + 2n + 2n^2;

int

cal(

int n)

}}

因此**執行時間 t(n) = o ( f ( n ) ),其中 n 表示每行**的執行次數,f ( n ) 表示所有**執行次數的總和,o 表示兩者成正比;

時間複雜度,表示**執行時間,隨資料規模增長的變化趨勢,常量,係數,低階並不能左右趨勢,所以上面例子中的時間複雜度,就是 o ( n^2 );

所以分析演算法時間複雜度的時候,只需關注迴圈執行次數最多的那一段**,且常量執行時間,無論多大,都不能反映與資料規模相關的增長趨勢,所以可以忽略;

加法法則,總複雜度等於量級最大的那段**的複雜度,乘法法則:巢狀**的複雜度等於巢狀內外**複雜度的乘積;

常見的時間複雜度 o ( log n ),下面的例子,執行 20,21,22 … 2x,2x = n,就執行了 log2 n 次,因為無論 log 的底數是多少,都可以互相轉換,log3 n = log3 2 * log 2 n,所以只要是對數執行次數,那麼時間複雜度都是 o ( log n);

i=1;

while

(i <= n)

如果我們對 o ( log n ) 的**,執行 n 次,那麼該段**的時間複雜度,就是 o ( n log n);

空間複雜度,表示演算法的儲存空間,與資料規模之間的增長關係;

下面的例子中,只有第三行,申請儲存空間 n,其他**都佔常數儲存空間,所以空間複雜度是 o ( n );

void

print

(int n)

for(i = n-

1; i >=0;

--i)

}

常見的空間複雜度 o ( 1 ),o ( n ),o ( n^2 );

通常使用乙個複雜度,就可以滿足需求,但如果同一塊**在不同的情況下,時間複雜度有量級的差距,就需要使用這三種複雜度,均攤時間複雜度,可以看作平均時間複雜度的一種分析方法;

下面示例中,最好時間複雜度 o ( 1 ),最壞時間複雜度 o ( n ),根據概率論,查詢的 x,出現在集合內的概率是 1 /2 ,迴圈執行 1 次的概率是 1 / 2n,執行 2 次的概率是 1 / 2n,執行 n 次的概率,是 1 / 2n + 1 / 2,所以平均複雜度是 (1 / 2n)* ( 1 + 2 + … + n) + n /2 = (n + 1) / 4 + n /2 = (3n + 1) / 4 ,所以平均複雜度是 o ( n );

// n表示陣列array的長度

intfind

(int

array,

int n,

int x)

}return pos;

}

下面的示例中, 最好時間複雜度 o( 1 ),最壞時間複雜度 o( n ),經過分析,最壞時間複雜度的出現,都是伴隨著 n 次呼叫,出現一次,所以可以將最壞的一次,均攤到之前出現的 n -1 次上,所以均攤時間複雜度,就是 o( 1 );

// array表示乙個長度為 n 的陣列 

// **中的array.length就等於n

int[

] array = new int

[n];

int count =0;

void

insert

(int val)

array[0]

= sum;

count =1;

}

array[count]

= val;

++count;

}

如果演算法操作中,大部分情況下時間複雜度都很低,只有個別情況下,時間複雜度比較高,而且這些操作之間,存在前後連貫的時序關係,這個時候,就可以考慮將這一組操作,放在一塊兒分析,看是否能將較高時間複雜度的那次操作,平攤到其他那些時間複雜度比較低的操作上;

演算法複雜度分析

分析非遞迴演算法效率的通用方案 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...