第一章绪论
1.2基础概念及术语
1.数据
数据(Data)是信息的载体,是指所有能输入到计算机中并能被计算机程序识别和处理的符号集合。
2.数据元素
数据元素(Data Element)是组成数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
3.数据对象
数据对象(Data Object)是具有相同性质的数据元素的集合、是数据的子集。
4.数据结构
数据结构(Data Structure)是指数据元素及其相互关系的集合。这种相互关系即数据的组织形式。可分为数据的逻辑结构和数据的存储结构。
数据结构的逻辑结构(Logical Structure)是指数据元素之间的逻辑关系,即数据元素之间的关联方式或邻接关系。数据的逻辑结构分为以下4类:
(1)集合。数据元素之间的关系是属于同一个集合,除此之外,没有任何关系。
(2)线性结构。数据元素之间存在着一对一的线性关系。
(3)树结构。数据元素之间存在着一对多的层次关系。
(4)图结构。数据元素之间存在着多对多的任意关系。
树结构和图结构也称为非线性结构。
顺序存储结构的基本思想是用一组连续的存储单元存储数据元素,数据元素之间的逻辑关系是由元素的存储位置来表示的。
链接存储结构的基本思想是用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系是用指针来表示的。
5.数据类型
数据类型 (Data Type)是一组值的集合以及定义于这个值集上的一组操作的总称。每种程序设计语言都定义了自己的数据类型,如整型、实型、字符型、指针、数组、结构体、类等。
1.3算法与算法分析
1.3.1算法
1、什么是算法
算法(Algorithm)是计算机求解特定问题的方法和步骤,是指令的有限序列。通常一个问题可以有多种算法,一个给定算法解决一个特定的问题。
算法具有下列5个重要特性:
(1)输入。一个算法有零个或多个输入(即算法可以无输入),这些输入通常取自于某个特定的对象集合。
(2)输出。一个算法有一个或多个输出(即算法必须有输出),通常输出与输入之间有着某种特定的关系。
(3)有穷性。对任何合法的输入,一个算法必须在执行有穷步之后结束,且每一步都在有穷时间内完成。
(4)确定性。算法中的每一条指令都必须有确切的含义,即不存在二义性。而且,在任何条件下,给定的算法对于相同的输入只能得到相同的输出。
(5)可行性。算法描述的操作可以通过已经实现的基本操作执行有限次来实现。
2、算法的评价
(1)正确性。算法能满足具体问题的需求,即对于任何合法的输入,算法都会得出正确的结果。
(2)健壮性(鲁棒性)。算法对非法输入的抵抗能力,即对于错误的输入,算法应能识别并做出处理,而不是产生错误动作或陷入瘫痪。
(3)可读性。好的算法应该便于人们理解和相互交流。可读性好的算法有助于人们对算法的理解;反之,难懂的算法易于隐藏错误且难于调试和修改。
(4)高效率。算法的效率通常是指算法的执行时间。对于同一问题,如果有多个算法可以使用,那么执行时间短的算法效率高。
(5)低存储空间需求。算法需要的存储空间是指算法在执行过程中所需要的最大存储空间,它与问题规模有关。一个“好”算法应该占用较少的辅助空间。
1.3.2算法分析
1、算法的时间复杂度
对于算法分析,关心的是算法中语句总的执行次数f(n)是问题规模n的函数,进而分析f(n)随n的变化情况并确定T(n)的数量级;这里用“O”来表示数量级,算法的时间复杂度T(n)=O(f(n));
在算法分析时,往往对算法的时间复杂度和渐进时间复杂度不与区分;
最坏情况下的时间按复杂度称最坏时间复杂度。
平均时间复杂度是指所有可能的输入实例均以等概率出现的情况下,算法的期望运行时间;
详细参考文档:https://blog.csdn.net/printf_accept/article/details/106238809
2、算法的空间复杂度
一个算法的占用空间是指算法实际占用的辅助空间的总和。算法的空间复杂度S(n)定义为该算法所耗费的储存空间的数量级,他是问题规模n的函数,
S(n)=O(f(n))
如果算法执行时所需要的辅助空间相对于输入数据量而言是一个常数,则称这个算法为原地工作,辅助空间为O(1);
详细参考文档:https://blog.csdn.net/weixin_47160672/article/details/108674504