算法分析与设计

第一章

  1. 最大公约数算法
    • gcd(m, n) = gcd(n, m mod n)
    • 结束条件是 m%n = 0

第二章

  1. 算法时间效率度量 —— 基本操作的执行次数。
  2. 渐进符号(可以按照复杂程度记忆,最简单的为上界,最复杂的为下界)
    1
  3. 斐波那契数列
    2
    • 参数 α,β 可以通过 F(1)、F(2)联立方程组解出来

第三章

  1. 选择排序
    3

  2. 冒泡排序
    4

  3. 幻方
    5
    6

第四章

  1. 分治法
    7

  2. 合并排序
    8
    9
    10
    11
    12

  3. 快速排序
    13
    14
    15
    16
    17

    #include
    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="" t="a[i];" a[i]="a[j];" a[j]="t;" else="" break;="" a[left]="a[j];" quicksort(left,="" -="" 1);="" quicksort(i="" +="" 1,="" right);="" int="" main()="" {="" for="" (int="" i++){="" cin="">> a[i];
        }
        quickSort(1, n);
        for (int i = 1; i <= 5;="" i++){="" cout="" <<="" a[i]="" "="" ";="" }="" endl;="" return="" 0;="" 
  4. 大整数乘法
    18
    19

  5. Strassen 矩阵乘法
    20
    21

第五章

  1. 减治算法
    22
    23
    24

第六章

  1. 平衡二叉树

    这里的 LR 旋转是相对的概念, 意思是先变成左子树再向右旋转。

    25

  2. 2-3 树

    2-3 树是一种特殊的高度平衡树,允许结点最多包含两个关键字。
    ❑ 2-node:包含一个关键字,两个子节点
    ❑ 3-node:包含两个关键字,三个子节点

    26

  3. Horner 法则
    27
    28
    29
    30

第七章

  1. 计数排序
    31
    32

  2. 分布计数排序
    33
    34

    实现代码:

     #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;" <="" 10;="" d[a[i]="" l]++;="" +="D[i" 1];="">= 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;
     }
    

上一篇
工程数学笔记 工程数学笔记
数值计算笔记
2019-01-18 杜敏
下一篇
软件过程重点知识梳理 软件过程重点知识梳理
高级软件开发过程重点知识1. 绪论 软件过程定义:从软件需求定义开始到软件废弃为止,跨越整个生命周期内的系统开发、运行、维护等全部活动及其相关项的总和。 软件发展三阶段:程序设计、软件工程、软件过程 软件过程能力评估标准和改进方案:CMM,
2018-12-28 杜敏