第二章-算法
算法与数据结构的关系
算法是对数据结构的应用
算法是什么
算法是计算机指令的有序集合
或者我们可以理解为,当我们在做一道数学题时
我们的经验(算法)告诉我们应该
先………再………最后………
算法有两个必须考虑的属性
- 算法时间复杂度
- 算法空间复杂度
算法的五个特性
- 输入
- 输出
- 有穷
- 确定
- 可行
一道数学题的解决 离不开解答过程的推导(输入)和结果的获得(输出)
我们的解题方法(算法)必须是能够写下来的,不是只能在脑子里转的想法**(可行性)**
步骤必须是准确的**(确定性)**,一样的方法只能产生一样的结果,不能有歧义
答案的获得必须是及时的,步骤必须是有限的**(有穷)**
毕竟考试的时间和答题卡的范围是有限的(时间和空间)
好的算法的要求(是在某些特性上的加强)
- 准确性(确定性)
- 可读性(要方便交流与理解)
- 健壮性
- 对于错误的输入数据也能有好的处理办法
- 时间效率高,存储量低(有穷)
影响算法效率的因素
- 算法本身的质量
- 编译后代码的质量(与软件有关)
- 输入规模(执行的次数)
- 机器速度(硬件)
效率判断方法
- 事后统计
- 通过每次的运算时间来推断算法的速度
- 缺点太多了。容易受到输入数据,算法本身质量,电脑自身能力的影响,难以得到一个客观的答案
- 事前分析估算
- 针对算法的执行次数进行估计
算法时间复杂度的计算
就是将全部代码的运行次数进行求和
其中
- 常数求和为1
- 存在最大项,且最大项不为1的数,全部转化为1,也就是只保留最大项(抓大放小)
特别地:
我们可以认为分支结构都是1
循环结构都只是步数的乘法
算法的空间复杂度
也就是算法本身对空间的需求