一、算法
定义:算法是求解问题的一系列计算步骤,用来将输入数据转换成输出结果。
算法设计目标:
- 正确性
- 可使用性
- 可读性
- 健壮性
- 高效率与低存储量需求
算法特征:
- 有限性
- 确定性
- 可行性
- 输入性
- 输出性
算法设计步骤:
- 分析求解问题
- 选择数据结构和算法设计策略
- 描述算法
- 证明算法正确性
- 算法分析
二、算法分析
定义:算法分析是分析算法占用计算机资源的情况。主要分析两个指标:时间复杂度和空间复杂度。
2.1 时间复杂度
定义:时间复杂度是指执行算法所需要的计算工作量,用于衡量算法的效率。
计算方法:根据算法,分析问题规模n,找出基本语句,求出其运行次数f(n),最后再用渐进符号表示。
提示:一个算法是由控制结构(顺序、分支和循环3种)和原操作(指固有数据类型的操作)构成的,算法的运行时间取决于两者的综合效果。
渐进符号
上界符号:
下届符号:
同阶符号:
算法执行时间
- 平均执行时间:
- 最好执行时间:
- 最坏执行时间:
2.2 空间复杂度
定义:空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度
计算:一个算法的存储量包括形参所占空间和临时变量所占空间。在对算法进行存储空间分析时,只考察临时变量所占空间。
二、算法设计工具-STL
定义:STL主要由container(容器)、algorithm(算法)和iterator(迭代器)三大部分构成,容器用于存放数据对象(元素),算法用于操作容器中的数据对象。
-
容器
一个STL容器就是一种数据结构,如链表、栈和队列等,这些数据结构在STL中都已经实现好了,在算法设计中可以直接使用它们,如下图。
提示:以上示例容器的c++语言为前提,使用时要在代码头部加入命名空间 “using namespace std” -
算法
STL算法是用来操作容器中数据的模板函数,STL提供了大约100个实现算法的模版函数。例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象。
STL算法部分主要由头文件、和组成。 -
迭代器
STL迭代器用于访问容器中的数据对象。
每个容器都有自己的迭代器,只有容器自己才知道如何访问自己的元素。
迭代器像C/C++中的指针,算法通过迭代器来定位和操作容器中的元素。
常用的迭代器示例:
总结
算法设计与分析是计算机学科的必修课程,学算法就像修炼内功,对于后期的各个方向的研究都有着其作用。最后为最后为大家献上我老师推荐的书籍、网课与工具。
书籍:
- 编程珠玑
- 编程之美
中国mooc网课:
- 详细版:北京航空航天大学
- 南方版:厦门大学
- 升级版:北京大学屈婉玲教授版
可视化算法网站: