数据结构与算法的关系?
- 算法是数据结构的应用 关系紧密
算法:解决特定问题求解步骤的描述。在计算机中表现为指令的有限序列。
特性:
- 输入输出(输入绝大多有、输出一定有)
- 有穷性(没有死循环)
- 确定性(每个步骤精细、无歧义)
- 可行性(每一步都可行,执行有限次数完成)
设计要求:
- 正确性(通常对于非法输入数据能够得出满足规格说明的结果)
- 可读性(方便阅读、理解(拒绝shit山))
- 健壮性(对于非法输入处理能力)
- 高时间效率 低存储量(不解释)
算法效率度量方法
- 事后统计
- 事前分析(比较好 算法好坏与输入规模)
函数的渐进增长
- 输入规模n没有限制的情况下,只要超过一个数值N,这个函数就总是大于另一个函数,函数就是渐进增长的。
- 主要关注最高阶项的阶数,因为n很大的时候,算法量指数级增长。
算法时间复杂度(算法的时间量度)
- 语句总执行次数T(n)
- 问题规模n
- T(n)=O[f(n)] 随n增大 算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度。
- f(n)是问题规模n的某个函数(n 阶数)
- n增大,T(n)增长最慢的是最优算法
- 写作O [ ] (大O记法)
常数阶 线型阶 平方阶
推导大O阶:
- 常数1取代加法常数
- 只保留高阶项
- 去除该项相乘的常数
最坏情况与平均情况
大多数情况,运行时间即指最坏情况运行时间,时间复杂度指最坏时间复杂度
平均情况为期望值
算法空间复杂度
定义:算法所需的存储空间
S(n)=O(f(n)),f(n)为语句关于n所占存储空间的函数
不常用,复杂度默认指时间复杂度