算法分析與設計


title: 算法分析與設計 date: 2019-01-01 10:17:01 tags: 算法


第一章

  1. 最大公約數算法
  2. gcd(m, n) = gcd(n, m mod n)
  3. 結束條件是 m%n = 0

第二章

  1. 算法時間效率度量 —— 基本操作的執行次數。
  2. 漸進符號(可以按照複雜程度記憶,最簡單的爲上界,最複雜的爲下界)

v2-d7f3e2c4c20c59ec37524445f1435416_b.jpg


  1. 斐波那契數列

v2-365d5c6b74f655f5d3e2942df182a10d_b.jpg


  1. 參數 α,β 可以通過 F(1)、F(2)聯立方程組解出來

第三章

  1. 選擇排序

v2-83e30bb3cd47aadc4c85735070daa74c_b.jpg


  1. 冒泡排序

v2-53002401571b74907ed7d3f2b62bef30_b.jpg


  1. 幻方

v2-1f668ae91ef49a9a44f7ea568b0284a0_b.jpg

v2-01ff69523fe39cdc67a8fea2d671c1ac_b.jpg


第四章

  1. 分治法

v2-5d62d3dcb59b1a194eb113d92c060649_b.jpg


  1. 合併排序

v2-76c724c4d61ccd4d409e96d7b7e9b2df_b.jpg

v2-691bf8a2eaaeea138056fad17801d6a0_b.jpg

v2-848479f7b086051d940f17d227ab48b0_b.jpg

v2-e3bc9d8c3d1f98addc1c5ed6014a8cc5_b.jpg

v2-9a3e77516707fa9303c555833842a254_b.jpg


  1. 快速排序

v2-257f363a74ca43de580a30220369d213_b.jpg

v2-d210fb41a4675451a8c4bf9fdac3ae04_b.jpg

v2-de589f147b433fec1cc72dc24133a940_b.jpg

v2-cdfb0c7edaf6c1e1c72346925949a654_b.jpg

v2-ec02cfaf83dc42c25d7f35818ff3efc7_b.jpg


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; }

  1. 大整數乘法

v2-47d525f17aa1b5b45665e132c8df25ff_b.jpg

v2-34b86db9e05d224baf733a6b7cb629a6_b.jpg


  1. Strassen 矩陣乘法

v2-6a7ebdcbe29ac67391ffb3a979e37068_b.jpg

v2-ebb6264b75c05e6f89fe85c7a6ad4f04_b.jpg


第五章

  1. 減治算法

v2-055a7a2a1640278f539094e34726f36a_b.jpg

v2-ff1a98733f8d00daddf95d75ec938718_b.jpg

v2-e1394a869cd6a7bb302e9508dc4b26e5_b.jpg


第六章

  1. 平衡二叉樹
這裏的 LR 旋轉是相對的概念, 意思是先變成左子樹再向右旋轉。


v2-cbe987c69b7380ddc554176dd582f523_b.jpg


  1. 2-3 樹
2-3 樹是一種特殊的高度平衡樹,允許結點最多包含兩個關鍵字。 ❑ 2-node:包含一個關鍵字,兩個子節點 ❑ 3-node:包含兩個關鍵字,三個子節點


v2-85073de54b41e23ad07e023f0a8dbb24_b.jpg


  1. Horner 法則

v2-23ac65f95f79df76c37e588afd0ef63d_b.jpg

v2-fb674362c03aa5c9ebb546111282427b_b.jpg

v2-d2c3df42083e24c32df79596854fbd24_b.jpg

v2-33091fc854d1f77e42a3d8bfaebf3ad1_b.jpg


第七章

  1. 計數排序

v2-974f55bcb622955b7b84db371bac4bd8_b.jpg

v2-d25ac348553d165d4e68e227c61c8148_b.jpg


  1. 分佈計數排序

v2-cef70c419f10e058dc9539048bd6d513_b.jpg

v2-13995b9d7c23f59a089bb69ee25538e1_b.jpg


實現代碼:

```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;
}
      

```

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章