这篇文章为个人课堂记录哦~(课后记录自己在算法课上所学到的知识点)
1.算法的概念
算法是求解问题的一系列计算步骤,用来将输入数据转换成输出结果。
如果一个算法对其每一个输入实例,都能输出正确的结果并停止,则称它是正确的。
算法设计应满足以下几条目标:
- 正确性
- 可使用性
- 可读性
- 健壮性
- 高效率与低存储量需求
算法具有以下5个重要特征:
- 有限性
- 确定性
- 可行性
- 输入性
- 输出性
算法与数据结构的联系和区别:
- 联系:数据结构是算法设计的基础。算法的操作对象是数据结构,在设计算法时,通常要构建适合这种算法的数据结构。数据结构设计主要是选择数据的存储方式,如确定求解问题中的数据采用数组存储还是采用链表存储等。算法设计就是在选定的存储结构上设计一个满足要求的好算法。
- 区别:数据结构关注的是数据的逻辑结构、存储结构以及基本操作,而算法更多的是关注如何在数据结构的基础上解决实际问题。算法是编程思想,数据结构则是这些思想的逻辑基础。
2.算法设计的基本步骤
分析解决问题→选择数据结构和算法设计策略→描述算法→证明算法正确性→算法分析
算法分析:
是分析算法占用计算机资源的情况,算法分析主要从算法的时间复杂度和空间复杂度进行分析。
分析算法时间复杂度的一般步骤:
算法→分析问题规模n,找出基本语句,求出其运行次数f(n)→表示其阶数
算法的最好、最坏和平均情况:
- 算法的平均情况是指用各种特定输入下的基本语句执行次数的带权平均值。
- 算法的最好情况是指算法在所有输入下所执行基本语句的最少次数。
- 算法的最坏情况是指算法在所有输入下所执行基本语句的最大次数。
非递归算法的时间复杂度分析:
- 关键是求出代表算法执行时间的表达式。 通常是算法中基本语句的执行次数,是一个关于问题规模n的表达式,然后用渐进符号来表示这个表达式即得到算法的时间复杂度。
递归算法的时间复杂度的分析:
- 关键是根据递归过程建立递推关系式,然后求解这个递推关系式,得到一个表示算法执行时间的表达式,最后用渐进符号来表示这个表达式即得到算法的时间复杂度。
算法的空间复杂度分析:
- 一个算法的存储量包括形参所占空间和临时变量所占空间。在对算法进行存储空间分析时,只考察临时变量所占空间。
3.算法设计工具—STL
STL主要由三部分构成:
- container(容器):用于存放数据对象(元素)
- algorithm(算法):用于操作容器中的数据对象
- iterator(迭代器)
什么是STL容器?
- 一个STL容器就是一种数据结构,如链表、栈和队列等,这些数据结构在STL中都已经实现好了,在算法设计中可以直接使用它们。
什么是STL算法?
- STL算法是用来操作容器中数据的模板函数,STL提供了大约100个实现算法的模版函数。例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象。STL算法部分主要由头文件<algorithm>、<numeric>和<functional>组成。
什么是STL迭代器?
- STL迭代器用于访问容器中的数据对象。每个容器都有自己的迭代器,只有容器自己才知道如何访问自己的元素。迭代器像C/C++中的指针,算法通过迭代器来定位和操作容器中的元素。
以上便是本人第一节课所学大致内容,也是发的第一篇文章哦,望我继续坚持~