資料結構分為四類:集合(元素間無內在關係),線性(一對一關係),樹型(一對多關係),圖型(多對多關係)
儲存方式:順序儲存(連續,類似於排隊),鏈式儲存(可以不連續,通過儲存其他元素位址可得到,類似於醫院叫號)
演算法要素:輸入,輸出,有窮性,確定性(不會有二意),可行性
演算法要求:正確性(1.無語法錯誤 2.根據正確輸入給出正確輸出 3.非輸入給出說明 4.刁鑽邊緣情況給出提示)
可讀性健壯性
時間效率高儲存量低
e.g
sum=0
n=100
for i in range(1,n+1):
sum+=i
時間複雜度為n+2
n=100
(1+n)*n/2
時間複雜度為2
如何分析乙個演算法的時間複雜度:
用常數1取代執行時間中的所有加法常數
在修改後的執行次數函式中,只保留最高端項
如果最高端項存在且不是1,則去除與這個項相乘的常數
得到最後的結果就是大o階
int sum = 0, n = 100;
printf("aaaaaaaaaaaan");
printf("aaaaaaaaaaaan");
printf("aaaaaaaaaaaan");
printf("aaaaaaaaaaaan");
printf("aaaaaaaaaaaan");
printf("aaaaaaaaaaaan");
sum = (1+n)*n/2
//這段**的時間複雜度為o(1),因為這段**執行了8次,沒有與n相關,常數都簡化為1
1.線性階:一般含有非巢狀迴圈設計線性階,線性階就是隨著問題規模n的擴大,對應計算次數呈直線增長。
int i, n = 100, sum = 0;
for(i = 0; i
上面這段**的迴圈複雜度為o(n),因為迴圈體中的**需要執行n次
2.平方階
int i,j,n = 100;
for(i = 0; i < n; i++)
}上面這段**的時間複雜度為o(n²)。
3.int i,j,n = 100;
for(i = 0; i < n; i++)
} 分析,由於當i=0時,內迴圈執行了n次,當i=1時,內迴圈則執行n-1次。。。。。。當i=n-1時,內迴圈執行1次,所以總的執行次數應該是n+(n-1)+(n-2)+...+1=n(n+1)/2用上面的簡化方法來簡化½n²+½n,這個式子中沒有常數項不用考慮第一條,根據第二條只保留最高項,去掉½n這一項,根據第三條去掉與最高項相乘的常數½,最終得到o(n²)
對數階int i = 1, n = 100;
while(i < n)
由於每次i*2之後就距離n更近一步,假設有x個2相乘後大於或等於n,則會退出迴圈。於是由2x=n得到x=log2n,所以這個迴圈的時間複雜度為o(logn)。
4.int i,j;
for(i = 0; i < b; i++)
for(i = 0;i < n; i++) }
void function(int count) 上面幾次操作是並列的,整體的執行次數應該是各個操作執行次數之和3n²+1,簡化後得到時間複雜度為o(n²)
常見的時間複雜度
5201314 o(1)
常數階3n+4 o(n)
線性階3n²+4n+5 o(n²)
平方階3log2n+4 o(logn)
對數階2n+3nlog2n+14 o(nlogn)
nlogn階
n^3+2n^2+4n+6 o(n3)
立方階2^n o(2n)
指數階1.常見的時間複雜度所耗費的時間從小到大依次是
o(1) < o(logn) < o(n) < o(nlogn) < o(n2) < o(n3) < o(2n) < o(n!) < (nn)
2.平均執行時間是期望的執行時間
3.最壞執行時間是一種保證。在應用中,這是一種最重要的需求,通常除非特別指定,我們提到的執行時間都是最壞情況的執行時間。
演算法的空間複雜度通過計算演算法所需的儲存空間實現,演算法的空間複雜度的計算公式記做s(n) = o(f(n)),其中,n為問題的規模,f(n)為語句關於n所佔儲存空間的函式。
5.通常,我們都是用「時間複雜度」來指執行時間的需求,用「空間複雜度」指空間需求。
6.當直接讓我們求「複雜度」時,通常指的是時間複雜度。
資料結構筆記(一)
資料結構的起源 1.數值計算與非數值計算 2.資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及他們之間的關係和操作等相關問題的學科。3.程式設計 資料結構 演算法 什麼是資料 資料是描述客觀事物的符號,是計算機中可以操作的物件,是能被計算機識別,並輸入給計算機處理的符合集合。而這些符號必...
資料結構 筆記(一)
資料結構分為四類 集合 元素間無內在關係 線性 一對一關係 樹型 一對多關係 圖型 多對多關係 儲存方式 順序儲存 連續,類似於排隊 鏈式儲存 可以不連續,通過儲存其他元素位址可得到,類似於醫院叫號 演算法要素 輸入,輸出,有窮性,確定性 不會有二意 可行性 演算法要求 正確性 1.無語法錯誤 2....
資料結構筆記(一)
程式的本質 1 程式是為了實際問題而存在,從本質上而言,程式是解決問題的步驟描述 2 程式鑑評 1 用盡量少的記憶體空間解決問題 2 用盡量少的步驟去解決問題 資料的藝術 1 資料結構的起源 資料結構主要研究非數值計算程式問題中的操作物件以及它們之間的關係 2 資料 程式的操作物件,用於客觀描述事物...