-
算法简介
学习内容:
- 该如何定义算法?
- 那接下来,算法的特性有哪4大方面?
- 我们可以开始设计算法了,但是算法设计有什么要求呢?
- 算法设计完成之后怎么有什么方法来度量效率呢?
- 算法的时间复杂度和空间复杂度
- 算法的定义
解决特定问题求解步骤的描述(类似于数学的解答题,每一个问题对应一种或者多种方法,存在一定的最优性),在计算机中表现为指令的有限序列(数学解答过程肯定是有限的过程),并且每条指令表示一个或多个操作。
2.算法的特性
2.1输入输出
2.2有穷性
2.3确定性
2.4可行性
3.算法的设计要求(如同作答数学题的步骤)
3.1正确性
至少应该具有输入、输出和加工处理无歧义性、能正确反映问题的需求,能够得到问题的正确答案。
大体分为如下四个层次:
- 算法程序没有语法错误
- 算法程序对于合法的输入数据能够产生满足要求的输出结果
- 算法程序对于非法的输入数据能够得出满足规则的说明结果
- 算法程序对于精心选择的,甚至刁难的测试都是满足要求的输出结果。
对于这4层的含义,层次1要求最低——满足语法正确如同温饱,离幸福生活差远了。层次4要求最困难。
算法的正确性在大部分情况下都不可能用程序来证明,而是用数学方法证明的。证明一个复杂算法在所有层次都是正确的需要太大的代价,因此通常以层次3为标准。
3.2可读性
便于阅读、理解和交流。
3.3健壮性
输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名其妙的结果。
3.4时间效率高和存储量低
时间效率:算法的执行时间
存储量:算法程序运行时所占的内存或外部硬盘存储空间
4.算法效率的度量方法
4.1事后统计方法
4.2事前分析估算法
主要因素:
- *算法采用的策略、方法
- 编译产生的代码质量——软件支持
- *问题的输入规模
- 机器执行指令的速度——硬件支持
算法运行时间:重要的是把基本操作的数量与输入规模关联起来,及基本操作(加减乘除)的数量必须表示输入规模的函数。
5.函数的渐近增长(说白了就是增长速率的问题)
6.*算法时间复杂度(重要)和空间复杂度
6.1 算法时间复杂度定义
6.2 推到大O阶方法
6.3常数阶
6.4线性阶
6.5对数阶
6.6平方阶
6.7常见的时间复杂度——排序
6.8最坏情况与平均情况来
6.9算法空间复杂程度