算法概括
计算=信息处理
计算模型=计算机=信息处理工具//尺规机,绳索机,图灵机…
所谓算法,即特定计算模型下,旨在解决特定问题的指令序列
输入 输出 正确性 确定性 可行性 有穷性
数据结构 讲授各类数据结构设计和实现的基本原理与方法,算法设计和分析的主要技巧与工具
- 学习数据结构,就是要学会高效的利用计算机,有效地存储,组织,传递和转换数据。
- 掌握各类数据结构功能,表示,实现和基本操作接口,
- 理解各类基本算法与不同数据结构之间的内在联系,
- 了解各类数据结构适用的应用环境,灵活地选用各类基本算法对应的数据结构,解决实际问题。
各数据结构的ADT接口及其不同实现: 序列(向量,列表),树(着重于平衡二分查找树),优先队列(堆),字典(散列表),图,相关算法及应用
构造有效算法模块的常用技巧:顺序和二分查找,排序与选取,遍历,模式匹配,散列,几何查找
典型的算法设计策略与模式:迭代,贪心,递归,分治,减治,试探,剪枝,回溯,动态规划
基本的复杂度分析方法:渐进分析与相关记号递推关系,递归跟踪,分摊分析
问题实例的规模,往往是决定计算成本的主要因素,相同规模相同算法运气不同时,时间也不同,同一算法可能实现于不同的体系结构,操作系统
所需时间可以转化为基本操作的执行次数T(n)
big-O实际上给出了时间复杂度的一个上界,注意到在规模较小的情况下,T(n)不一定在big-O的下方
对应的,big-Ω,则是时间复杂度的下界,。
常见时间复杂度:
-
常数复杂度O(1): 常数和常数的一些基本操作。 如果一段代码不含转向(循环,调用,递归等),必顺序执行,那么时间复杂度为O(1)。 反之则不一定
-
对数复杂度O(logn)
-
多项式复杂度O(n^c)
- 指数复杂度O(2^n)
复杂度曲线