链接:https://blog.csdn.net/Algernon98/article/details/136436086
数据结构是指相互之间存在一种或多种特定关系的数据元素集合。
数据
数据
数据(Data)是能够被计算机程序识别、存储、加工和处理的描述客观事物的数字等符号集合的总称。
数据项
数据项(Data Item)是具有独立含义的、数据不可分割的最小标识单位,是数据元素的组成部分,也可称为字段和域。
数据元素
数据元素(Data Element)是数据的基本单位,又可称为元素、结点、顶点和记录,是一个数据整体中可以标识和访问的数据单元。
数据对象
数据对象(Data Object)是性质相同的数据元素的集合,也叫数据元素类,是数据的一个子集,数据元素是数据对象的一个实例。
数据结构
数据结构(Data Structure)是相互之间存在着一种或者多种关系的数据元素的集合,数据结构概念包含3个方面的内容,即数据的逻辑结构、数据的存储结构和数据的操作,只有3个方面的内容相同才能称为完全相同的数据结构。
数据抽象
数据抽象是指"定义和实现相分离",即将一个类型的数据及其上的操作的逻辑含义和具体实现相分离,只考虑执行什么操作(做什么),而不考虑怎样实现这些操作(怎样做)。
数据抽象是一种信息隐蔽技术,可利用数据抽象研究复杂对象,忽略次要和实现细节,抽象出本质特征,抽象层次越高,复用程度越高。
数据抽象是通过抽象数据类型来实现的。
抽象数据类型(Abstract Data Type,ADT)是从问题的数学模型中抽象出来的逻辑结构及定义在逻辑结构上的一组操作,仅描述了数据的特性和数据操作的语法规则,隐藏了数据的存储结构和操作的实现细节。
抽象数据类型是实现软件模块化设计思想的重要手段,一个抽象数据类型是描述一种特定功能的基本模块,由各种基本模块可组织和构造起来一个大型的软件系统。
在一般的面向对象语言中,抽象数据类型通常可以采用抽象类或接口的方式进行描述。
算法
算法的定义
算法是有穷规则的集合,其规则确定一个解决某一特定类型问题的指令序列,其中每一条指令表示计算机的一个或者多个操作。
算法必须满足以下5个特性。
- 有穷性: 对于任意的合法输入值,算法必须在执行有穷步骤后结束,并且每一步都在有穷的时间内完成。
- 确定性:算法对各种情况下执行的每个操作都有确切的规定,算法的执行者和阅读者都能明确其含义和如何执行,并且在任何条件下算法都只有一条执行路径。
- 可行性: 算法中的操作必须都可以通过已经实现的基本操作运算有限次实现,并且每一条指令都符合语法规则,满足语义要求,都能被确切执行。
- 有输入: 输入数据是算法的处理对象,一个算法具有零个或多个输入数据,既可以由算法指定,也可以在算法执行过程中通过输入得到。
- 有输出:输出数据是算法对输入数据进行信息加工后得到的结果,输出数据和输入数据具有确定的对应关系,即算法的功能。一个算法有一个或多个输出数据。
算法设计的4个基本目标
- 正确性: 算法应满足应用问题的需求,这是算法设计最重要、最基本的目标。
- 健壮性:算法应具有良好的容错性,可以检查错误是否出现并且对错误进行适当的处理,即使输入的数据不合适,也能避免出现不可控的结果。
- 高效率:算法的执行时间越短,时间效率越高;算法执行时所占的存储空间越小,空间效率越高。时间效率和空间效率往往不可兼得,用户在解决实际问题时要根据实际情况权衡得失,进行高效率算法的设计。
- 可读性: 算法的表达思路应清晰,层次分明,易于理解,可读性强,以便于后续对算法的使用和修改。
算法性能
时间复杂度
语句频度
语句频度是指该语句在一个算法中重复执行的次数。一个算法的时间耗费就是该算法中所有语句频度之和。
时间复杂度:
它表示随问题规模n的增大,算法的执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称时间复杂度。
算法的时间复杂度(Time Complexity)是指算法的执行时间随问题规模的变化而变化的趋势,反映算法执行时间的长短。
当问题的规模为n时,T(n)表示此时算法的执行时间,称为算法的时间复杂度,当n增大时,T(n)也随之增大。
假设一个算法是由n条指令序列构成的集合,算法的执行时间如下:
- 常数阶
- 线性阶
- 平方阶
例题:
常用算法时间复杂度
空间复杂度
一个算法的占用空间是指算法实际占用的辅助空间总和。
算法的空间复杂度(Space Complexity)是指算法执行时所占用的额外存储空间量随问题规模的变化而变化的趋势。
执行一个算法所需要的存储空间主要包含以下两个部分。
(1) 固定空间部分:
主要包括算法的程序指令、常量、变量所占的空间,与所处理问题的规模无关。
(2) 可变空间部分:
主要包括输入的数据元素占用的空间和程序运行过程中额外的存储空间,与处理问题的规模有关。
面向对象
面向对象=对象+类+继承+通信