本章是对数据结构和算法的一个认识,是数据结构入门必须了解的东西,在本章中我们会学习并了解到以下这些知识点。本章可能文字过多,请小心食用。
1. 为什么我们要学习数据结构
2. 什么是数据
3. 什么是数据元素
4. 什么是数据对象
5. 什么是数据项
6. 数据是逻辑结构
7. 数据是储存结构
8. 什么叫做算法
9. 算法的特点
10.算法设计的基本要求
11.什么是算法的时间复杂度
12.什么是算法的空间复杂度
13.如何计算空间复杂度和时间复杂度
14.总结
1.为什么我们要学习数据结构
long long ago。在计算机开始发展的开始阶段,我们要求计算机做的事情只是简单的进行复杂的人类要花费长时间才能得到的数学计算。
而到了现在这个时代,计算机已不再是简单的能够进行计算,儿其针对的对象变成了数据,而我们这里学的数据结构,就是在教我们如何辅助计算机来帮我们完成数据的处理,得到我们需要的东西。这便是我们为什么要学习数据算法这门课。
2.什么是数据
了解到了我们为什么要学习数据结构,那我们接下来就从什么是数据开始说起。
大家都曾有过这样的比喻:“计算机就像人类的大脑一样。”,没错,计算机就可以类比为人类的大脑。那接下来我以我们的大脑为例,来解释什么叫做数据。
简单一句话说,对我们的大脑而言,我们人类所能看到,感知到的所有东西的集合都可以叫做数据。所以对计算机而言,它能感知(识别)的所有集合就是数据。
3. 什么是数据元素
对于我们大脑来说,就是我们看到,感知到的具体的每一个东西,对于计算机也是这样,可能这样说还是不明白,就以一个教室为例,教室里的每一个物品包括学生的集合就是数据,而数据元素呢,则是一个一个的物品或者学生。
4. 什么是数据对象
数据对象就类似于将相同性质的东西进行归类,放在一起。比如上面说到的教室,就可以把所有的学生看出是一个数据对象。
5. 什么是数据项
数据项呢,针对的是数据元素而言的,它是数据元素上所具有的属性。比如:学生的身高,年龄,体重,性别等都叫做数据项。
这张图是我对数据、数据对象、数据元素、数据项的理解:
6. 数据的逻辑结构
逻辑,逻辑,实质意义就是大脑里构想出来的东西,它和计算机中数据的储存是没有关系的。是单独存在的。可以理解为一种思维。
逻辑结构可以大体可以分为两类:线性结构和非线性结构
线性结构
数据元素之间是一对一的关系,表示为下图:
非线性结构
- 集合
数据元素之间是属于同一类型,没有其他任何关系
- 树形结构
数据元素之间是一对多的结构 - 图状结构
数据元素之间是多对多的结构
7. 数据储存(物理)结构
数据的存储结构分为四种储存:
1. 顺序储存
2. 链式储存
3. 索引储存
4. 散列储存
8.什么叫做算法
算法可以理解为是帮助计算机处理数据的一种表现方法。
9.算法的特点
- 用穷性:算法必须在有穷步骤后停止。
- 确定性:不能有二义性,只存在一个入口和出口。
- 可行性:
- 输入性:一个算法必须有零个或多个输入。
- 输出性:一个算法必须有一个或多个输出。
10.算法设计的基本要求
- 正确性:能够解决具体问题。
- 可读性:编写的算法应该是让每个人都能理解的
- 健壮性:算法应该具备容错性。
- 通用性:一套算法可以解决这一类的问题。
- 效率与储存要求:效率指算法运行的时间,储存要求指的是执行过程中所需的最大储存空间。
11.算法的时间复杂度
就是算法的运行时间随输入规模的增大而增大的量级。
12.算法的空间复杂度
算法的空间复杂度是算法在运行是占用储存空间大小的度量。
13.如何计算时间复杂度和空间复杂度
时间复杂度:
首先我们要弄清楚计算时间复杂度的目的是为了找到最好,最高效的解决问题的算法。
及对同一问题(这里就是同一输入规模)我们要选择怎样的算法来解决,为了算出时间复杂度,我们要选择最基本的原操作,也就是最基本的那个算法执行线路,以该基本操作的重复执行的次数作为算法的时间量度,记为T(n)。
这里的n只得是输入问题的规模。
关于输入问题规模n,有辅助函数f(n),来统计算法基本操作的频度。因此,算法的时间复杂度往往记为T(n)=O(f(n))。
空间复杂度:
空间复杂度记为:S(n)这里的n也表示的是输入问题的规模,有辅助函数g(n)来表示。
记作:S(n) = O(g(n))
14总结
第一章相对来说很是枯燥,基本都是对概念的理解。主要的点还是应该弄清楚什么是数据,什么是数据元素,什么是数据对象,什么是数据项,如何计算时间复杂度。当然空间复杂的很多时候是不考虑的,很多时候可以牺牲空间复杂度来提高时间效率。这是我个人对本章的总结,我还有很多没有弄清楚的地方,比如时间和空间复杂度上。后面有了更深的了解在对其修改 ——2019.10.25