算法分析与设计


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

```

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