一、資料結構
資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及它們之間的關係和操作等相關問題的學科。
邏輯結構:是指資料物件中資料元素之間的相互關係,也是我們今後最需要關注和討論的問題。
物理結構:是指資料的邏輯結構在計算機中的儲存形式。
鏈式儲存結構:是把資料元素存放在任意的儲存單元裡,這組儲存單元可以是連續的,也可以是不連續的。
二、演算法
演算法:乙個計算過程,解決問題的方法
演算法的特性:輸入、輸出、有窮性、確定性、可行性
演算法設計要求:正確性、可讀性、健壯性、時間效率高和儲存量低
程式=資料結構+演算法
演算法時間複雜度的定義:在進行演算法分析時,語句總的執行次數t(n)是關於問題規模n的函式,進而分析t(n)隨n的變化情況並確定t(n)的數量級。演算法的時間複雜度,也就是演算法的時間量度級,記作:t(n)=o(f(n))。它表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸進時間複雜度,簡稱為時間複雜度。其中f(n)是問題規模n的某個函式。
例子
int i, n =
100, sum =0;
for(i =
0; i < n; i++
)
上面這段**,它迴圈的時間複雜度為o(n)。因為迴圈體中的**需要執行n次。
下面我們將**巢狀一層迴圈
for
(i =
0; i < n; i++
)
注意這時第二層迴圈的j = i; 我們可以算出迴圈的公式為
n+(n-1)+(n-2)+···+1 = n(n+1)/2 = n2/2+n/2
由上面的公式 只保留最高項,去除最高項相乘的常數,最終得出o(n2)
如何推導大o階呢?
1、用常數1取代執行時間中的所有加法常數
2、在修改後的執行次數函式中,只保留最高端項
3、如果最高項存在且不是1,則去除與這個項相乘的常數
4、得到的最後結果就是大o階
常見的時間複雜度所耗費的時間從大到小依次是
o(1) < o(logn) < o(n) < o(nlogn) < o(n2) < o(n3) < o(2n) < o(n!) < o(nn)
演算法的空間複雜度通過計算演算法所需的儲存空間實現,演算法的空間複雜度的計算公式記作:s(n) = o(f(n)),其中,n為問題的規模,f(n)為語句關於n所佔儲存空間的函式。
通常我們都是用「時間複雜度」來指執行時間的需求,是用「空間複雜度」指空間需求。
當直接要讓我們求「複雜度」時,通常指的是時間複雜度
演算法複雜度 時間複雜度和空間複雜度
1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...
演算法複雜度 時間複雜度和空間複雜度
演算法複雜度 時間複雜度和空間複雜度 關鍵字 演算法複雜度 時間複雜度 空間複雜度 1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時 間多,哪個演算法花費的時間少就可以...
演算法複雜度 時間複雜度和空間複雜度
演算法的時間複雜度是指執行演算法所需要的計算工作量。n稱為問題的規模,當n不斷變化時,時間頻度t n 也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t n 表示,若有某個輔助函式f n 存在乙個正...