title: 算法分析與設計 date: 2019-01-01 10:17:01 tags: 算法
第一章
- 最大公約數算法:
- gcd(m, n) = gcd(n, m mod n)
- 結束條件是 m%n = 0
第二章
- 算法時間效率度量 —— 基本操作的執行次數。
- 漸進符號(可以按照複雜程度記憶,最簡單的爲上界,最複雜的爲下界)
- 斐波那契數列
- 參數 α,β 可以通過 F(1)、F(2)聯立方程組解出來
第三章
- 選擇排序
- 冒泡排序
- 幻方
第四章
- 分治法
- 合併排序
- 快速排序
c++ #include<iostream> using namespace std; int a[5], n; void quickSort(int left, int right){ if (left >= right) return; int i, j, t, temp; i = left; j = right; temp = a[left]; while (true){ while (a[j] >= temp && i < j){ j--; } while (a[i] <= temp && i < j){ i++; } if (i < j){ t = a[i]; a[i] = a[j]; a[j] = t; } else break; } a[left] = a[j]; a[j] = temp; quickSort(left, i - 1); quickSort(i + 1, right); } int main() { for (int i = 1; i <= 5; i++){ cin >> a[i]; } quickSort(1, n); for (int i = 1; i <= 5; i++){ cout << a[i] << " "; } cout << endl; return 0; }
- 大整數乘法
- Strassen 矩陣乘法
第五章
- 減治算法
第六章
- 平衡二叉樹
這裏的 LR 旋轉是相對的概念, 意思是先變成左子樹再向右旋轉。
- 2-3 樹
2-3 樹是一種特殊的高度平衡樹,允許結點最多包含兩個關鍵字。 ❑ 2-node:包含一個關鍵字,兩個子節點 ❑ 3-node:包含兩個關鍵字,三個子節點
- Horner 法則
第七章
- 計數排序
- 分佈計數排序
實現代碼:
```c++ #include using namespace std; int a[10], l, u, D[10], S[10];
void DistributeSort(){
for (int i = 0; i <= u - l; i++){
D[i] = 0;
}
for (int i = 0; i < 10; i++){
D[a[i] - l]++;
}
for (int i = 1; i <= u - l; i++){
D[i] += D[i - 1];
}
for (int i = 9; i >= 0; i--){
int j = a[i] - l;
S[D[j] - 1] = a[i];
D[j] -= 1;
}
for (int i = 0; i < 10; i++){
cout << S[i] << " ";
}
}
int main()
{
l = 1, u = 3;
for (int i = 0; i < 10; i++){
cin >> a[i]; // 1 2 3 1 2 3 1 2 3 1
}
DistributeSort();
return 0;
}
```