算法分析

2018-01-24  本文已影响19人  Azur_wxj
  1. 算法定义:
    是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程。(解决问题的方法和步骤)

  2. 算法三要素:
    操作、控制结构、数据结构

  3. 常见控制结构:
    顺序、循环、选择

  4. 算法基本特征:
    有穷性、确定性、可行性、0个或多个输入、一个或多个输出

  5. 算法的基本性质:
    目的性、分步性、有序性、有限性、操作性

  6. 算法质量指标:
    正确性、可读性、稳健性、高效率和低存储量

  7. 算法评价标准:
    时间耗费、空间耗费、可读性

  8. 常见时间复杂度排序:
    O(1) < O(lgn) < O(n) < O(nlgn) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn)

  9. 时间复杂度
    算法的时间复杂度是一个函数,它 定性 描述了该算法的运行时间。

  10. 辗转相除法

    gcd(x, y):
        if (y == 0)  
            return x
        else  
            return gcd(y, x % y)
    

    时间复杂度:O(lgn)

  11. 汉诺塔问题:
    时间的递推公式:T(n)=2T(n-1)+1,时间复杂度为 O(2n)

    • 每个迭代算法原则上总可以转换为与之等价的递归算法
    • 并不是每个递归算法都可以转化为与之等价的循环结构算法
    • 递归是一种比循环更强、更好用的实现“重复操作”的机制。
  12. 递归设计要点:

    • 分析问题,找递归关系
    • 设置边界、控制
  13. 迭代算法的步骤:

    • 确定迭代模型
    • 根据迭代模型,建立迭代关系式
    • 对迭代过程进行控制,确定什么时候结束迭代
  14. 枚举法(穷举法)步骤:
    根据问题中的条件将可能的情况一一列举,逐一尝试找出满足问题的解。从两个方面进行:1、找出枚举范围。2、找出约束条件

  15. 分治算法的步骤:
    是将整个问题分解为若干个小问题后分而治之。分治法在每一层递归上都有3个步骤:

    • 分解:分解为若干个相互独立、与原问题形式相同的子问题
    • 解决:直到分解为容易解决的小问题,就解决之
    • 合并:将已求解的各个子问题的解合并为原问题的解。
  16. 贪婪算法:(某状态以后的过程不影响以前状态,无后效性)

    • 从问题的某一个初始解触发逐步逼近给定目标,每一步都作一个不可回溯的决策,尽可能求得最好的解
    • 达到某一步不需要再继续前进时,算法停止

    它可用于求问题最优解,但前提是“局部最优策略能产生全局最优解”。适用范围比较小,如果应用不当,则不能保证求得全局最优解

  17. 动态规划:(多阶段最优化决策问题的过程)

    • 找出最优解性质,并刻画结构特征
    • 递归的定义最优值
    • 自底向上的方式计算出最优值
    • 根据计算最优值的信息,构造最优解
  18. 子集树,遍历耗时 O(2n)

  19. 排列树,遍历耗时 O(n !)

  20. 迭代算法:

    • 递推法(正推)
    • 倒推法(倒推)
  21. 全面逐一尝试比较的算法有:

    • 枚举法
    • 蛮力法
    • 递归回溯法
  22. 隐式图搜索策略:

    • 分支界限法(背包问题)
    • 回溯法(8皇后)
  23. 图的搜索算法:

    • 显式图:
      • 穷举搜索:广度优先、深度优先
    • 隐式图:
      • 穷举搜索:回溯算法、分支算法
    • 图的启发式算法:分支界限法
  24. 递归比循环:代码量小、占用空间大、适用范围广、执行时间要长

上一篇下一篇

猜你喜欢

热点阅读