#ZSCSP8. [笔记][CSP][程序设计基本知识]2.算法

[笔记][CSP][程序设计基本知识]2.算法

  • 算法:为解决某个特定问题所采取的方法和步骤,它包含时间复杂度空间复杂度两大属性

  • 算法所应具备的五大特征

    • 1.有穷性:操作步骤是有限次的(不会是无限循环)
    • 2.确定性:不存在摸棱两可的步骤(例如在同一个分支上不会出现两种选项,程序上也无法实现)
    • 3.可行性:每一个步骤都应该能够有效执行(每一个步骤都可以用代码表示)
    • 4.输入00个或多个
    • 5.输出:至少11

  • 时间复杂度OO

    • 定义:描述的是算法的运行时间,是一个函数表达式不包括这个函数的低阶项首项系数,即考察当输入值大小趋近无穷大时的情况

    • 示例:

      • int n;
        cin >> n;
        for (int i = 0; i < n; i++) {//运行时间:n
        	//指令x
        }
        for (int j = 0; j < n; j++) {//运行时间:n
        	//指令x
        }
        for (int i = 0; i < n; i++) {//运行时间:n * n * 2
        	for (int j = 0; j < n; j++) {
        		//指令x1
        		//指令x2
        	}
        }
        
      • 总运行时间:2n+2(nn)2 * n + 2 * (n * n)
      • 去掉低阶项 2 * n 和首项系数 2 * (n * n),得时间复杂度为:O(n2)O(n^2)

  • 空间复杂度TT

    • 定义:描述的是算法在运行过程中所临时占用额外存储空间大小;同样不包括这个函数的低阶项首项系数,即考察当输入值大小趋近无穷大时的情况

    • 示例:交换两个长度相同的数组a、b的数值

      • //算法A:借助数组c
        int c[n];
        for (int i = 0; i < n; i++) {
            c[i] = a[i];
            a[i] = b[i];
            b[i] = c[i];
        }
        
        • 临时占用的额外存储空间大小:4n4 * n(指数组c,int型占44个字节)
        • 去掉首项系数4 n,得时间复杂度为:T(n)T(n)
      • //算法B:借助变量t
        int t;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                t = a[i];
                a[i] = b[i];
                b[i] = t;
            }
        }
        
        • 临时占用的额外存储空间大小:44(指变量t,int型占4个字节)
        • 得时间复杂度为:T(1)T(1)(仅有常数项的话均为11

  • 基础算法

    • 高精度计算
    • 枚举
    • 排序
    • 递推
    • 递归
    • 搜索与回溯
    • 贪心
    • 分治
    • 动态规划