文章目录
我的目标是星辰大海
为什么开启这系列的博客呢,em因为我想要考研了,考哪里就不说了,不管如何,先说一下本人的目前状况,在一家公司实习,但是觉得学历好像挺重要的,虽然之前一直以为学历这个东西不如本科+3来的实在,但是不想未来学历成为自己路上的阻碍,想试试考研,本人双非,电子类专业,想考211学校,还是半只脚跨考计算机…不管结果如何,成败与否,我的目标依旧是星辰大海哈哈哈哈哈。与大家共勉哈。开始整题。
一、数据元素、数据结构、抽象数据类型等概念
1.数据元素
它是数据的基本单位,数据元素也叫做结点或记录。数据元素是用一组属性描述定义、标识、表示和允许值的一个数据单元。
数据元素可以是一个链表中的节点也可以是代表某一个数据的标识
2.数据结构
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
举例:二叉树中的每一个节点都是数据元素,所有数据元素按照二叉树的数据结构排列连接到一起。排列的方式就是数据结构。
常见的八大数据结构有:数组,栈,链表,队列,树,图,堆,散列表
3. 抽象数据类型
有用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。具体包括三部分:数据对象、数据对象上关系的集合、对数据对象的基本操作的集合。
特征:数据抽象、数据封装、继承性、多态性
C++的特性不也是封装、继承、多态
C++的类也可以堪称一个抽象数据类型
二、算法设计的基本要求
1.五个重要特性
有穷性、确定性、可行性、输入项、输出项。
有穷性:算法的有穷性是指算法程序的运行时间是有限的。
确定性:算法的每一步骤必须有确切的定义。
可行性:算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有限时间内完成(也称之为有效性)。
输入项:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件。
输出项:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
## 2.考虑因素 正确性,可读性,健壮性,时间复杂度,空间复杂度。 正确性:算法的正确性,算法要是对的才能用呀对吧。
可读性:可读性就是代码能不能让他人读懂,理解代码的思路。
健壮性:算法能对意外情况做出适当反映或进行相应处理。
时间复杂度:算法执行的次数。
空间复杂度:算法执行占用的最大内存。
三、语句的频度和估算时间复杂度
1.时间复杂度
度量一个程序的执行时间的两种办法
1.1.事后统计法:采用运行前和运行后的时间戳(和硬件、软件等环境有关,一般不采用)
1.2.事前分析估算:消耗的时间一般取决于5个因素
(1)、依据的算法选用何种策略
(2)、问题的规模、例如求100以内还是1000以内的素数
(3)书写程序的语言,实现的语言越高级,执行效率越低(汇编yyds)
(4)编译程序所产生的机器代码的质量
(5)机器执行指令的速度
算法由控制结构(顺序,分支和循环3种)和原操作构成,算法时间取决与两者的综合效果。
从算法中选取一种对于研究的问题的基本操作的原操作,以该操作的重复执行的次数作为算法的时间度量(从算法中找一个解问题的操作,看它重复次数,代表算法的时间度量)(最内层的频度)
语句的频度,代表该语句的重复次数
看下图
f(n)依次为1,n,n^2
f(n):称为时间复杂度
如果n是一个变化的量的话,计算平均值,平均值为时间复杂度
常对幂指阶描述时间复杂度从小到大
2.空间复杂度
空间复杂度:是对一个算法在运行过程中临时占用存储空间大小的一个量度
S(n)= O(f(n))
其实我对空间复杂度没有太大的理解: 如果没有循环语句的话空间复杂度的话就是1 如果有循环语句且需要开空间将产生的数据存放的话就是和本身的时间复杂度一样了。还请大家指教空间复杂的问题