算法和算法分析
1、算法的性质。
有穷性、能行性、确定性、终止性、输入/输出。
2、算法的描述
自然语言(容易歧义)
自然语言+数学公式(简单方便,还是歧义)
严格形式描述(比如图灵机模型,非常麻烦,难以阅读)
类似编程语言描述
伪代码的形式
3、6种算法设计模式
枚举法(枚举全部、找出最优解)、
贪心法(根据已有信息,先部分求解,再基于部分得到完整的解)、
分治法(将一个复杂问题化解为很多简单的子问题,对这些子问题分别求解,并组合起来得到复杂问题的解)、
动态规划法(对于一些复杂的问题,不能一下求解出来。在求解步骤中,不断积累已知信息,然后动态选择已知的最好求解路径)、
回溯法(通过探索方式求解,当选择一个方向探索时发现无解,就回溯到前面探索的那个路口往其他方向继续探索,直到得出解)、
分支界限法(回溯法的改良版本,它是在探索的过程中,根据已知的信息如果发现这个选择是错误的,就及早将其删除,用来缩小求解空间,加速问题求解的过程)。
4、算法分析
算法是在有限的时间里一步步执行某些任务和过程,算法分析的主要任务:分析算法占用的空间资源跟时间资源。
5、大O分析法,
1、原子操作数量t与算法真实运行时间成正比。
2、把算法和函数 f(n) 像联系,把原子操作的数量 t 描述为输入大小n的函数 f(n) ,大O分析法。
3、对于输入相等大小但是不相同的输入,算法的运算速度可能不一样。平均情况分析需要针对于这种情况定义一组输入的概率分布。这个过程需要涉及复杂的概率理论。一般按 照的是算法运行的最坏情况下时间表示输入大小为n的函数。
4、对数函数涉及微积分的运用
5、原子值和原子操作,原子操作数量t与算法真实运行时间成正比,而执行操作消耗的时间O(1)常数时间(最低的时间复杂度耗时/耗空间与输入数据大小无关)