数据结构+算法=程序
数据结构研究的内容:研究非数值就是计算机的程序设计问题中计算机的操作对象以及它们之间的关系和操作。
是组成数据的基本单位,是数据集合的个体,也称为结点(node)或记录(record)。
一个数据元素可以由一个或多个数据项(Data Item)组成,数据项是有独立含义的最小单位,也称为域(Field)。
是性质相同的数据元素的集合,是数据集合的一个子集。
三者关系: 数据对象>数据元素>数据项
是相互之间存在一种或多种特定关系的数据元素集合,是带有结构的数据元素的集合,它指的是数据元素之间的相互关系,即数据的组织形式。
是一组性质相同的值集合以及定义在这个值集合上的一组操作的总称。
数据的抽象:抽象就是抽取出实际问题的本质。
抽象数据类型(Abstract Data Type,简称ADT):指基于一类逻辑关系的数据类型以及定义在这个类型之上的一组操作。
概念:数据结构是指相互之间存在一种或多种特定关系的数据元素集合,是带有结构的数据元素的集合,它指的是数据元素之间的相互关系,即数据的组织形式。
指数据元素之间逻辑关系的描述。形式化描述是一个二元组Data Structure=(D,S),其中,D是数据元素的有限集,S是D上关系的有限集。逻辑结构有两种划分。
四种基本的结构:集合结构、线性结构(一对一)、树形结构(一对多)、图状结构(多对多)。
线性结构:结构的数据元素之间存在着一对一的线性关系,如:线性表、栈、队列。
树形结构:结构中数据元素存在着一对多的层次关系,如:树。
图形结构:结构中的数据元素之间存在着多对多的任意关系。
线性结构:有且仅有一个开始和一个终端结点,并且所有的结点都最多只有一个直接前驱和一个后继。例如:线性表、栈、队列、字符串、数组、广义表。
非线性结构:一个结点可能有多个直接前驱和直接后继。例如:树、图。
是逻辑结构在计算机中的存储对象,是逻辑结构在计算机中的实现,它包括数据元素的表示和关系的表示。
逻辑结构是数据结构的抽象;存储结构是数据结构的实现。
顺序存储结构:借助元素在存储器中的相对位置来表示数据元素间的逻辑关系。
链式存储结构:借助指示元素存储地址的指针表示数据元素间的逻辑关系。
即在存储结构之上的数据元素的相关运算操作,
常见的运算:插入、删除、修改、查找、排序
算法是规则的有限集合,是解决特定问题而规定的一系列操作。
有限性:有限步骤之内正常结束,不能形成无穷循环。
确定性:算法中的每一个步骤必须有确定的含义,无二义性
输入:有多个或0个输入
输出:至少有一个或多个输出
可行性:原则上能精确进行,操作可通过已实现的基本运算执行有限次而完成
正确性 可读性 健壮性(鲁棒性) 高效率和低存储量
常用工具:自然语言、 框图 、 类语言(伪语言)
设计实现算法过程步骤:
(1)找出与求解有关的数据元素之间的关系;
(2)确定在某一数据对象上所施加运算;
(3)考虑数据元素的存储表示;
(4)选择描述算法的语言;
(5)设计实现求解的算法,并用程序语言加以描述。
对问题规模与该算法在运行时所占的空间S与所耗费的时间T给出一个数量关系的评价。
算法性能与问题规模有关
问题规模N:是问题大小的本质表现,对不同的问题其含义不同
对矩阵是阶数;
对多项式运算是多项式项数;
对图是顶点个数;
对集合运算是集合中元素个数.
用依据该算法编写的程序在计算机上执行所消耗的时间来度量
**1.事后统计:**利用计算机内的计时功能,不同算法的程序可以用一组或多组相同的统计数据区分
缺点
必须先运行依据算法编制的程序;所得时间统计量依赖于硬件、软件等环境因素,掩盖算法本身的优劣
⒉.事前分析估计:
一个高级语言程序在计算机上运行所消耗的时间取决于:
依据的算法选用何种策略
问题的规模
程序语言
编译程序产生机器代码质量
机器执行指令速度
算法的耗费时间:
一个算法的执行时间是指算法中所有语句执行时间的总和,每条语句的执行时间是指该条语句的执行次数和执行—次所需时间的乘积。 注意:不是具体时间,而是所有语句执行次数的总和。
分析:不是针对实际执行的时间精确地算出算法执行具体时间,而是针对算法中基本操作语句(原操作)的执行次数做出估计,从中得到算法执行时间的信息。
**语句频度:**指该语句在一个算法中重复执行的次数。
一个算法的时间耗费就是该算法中所有语句频度之和。
渐进时间复杂度
算法中基本语句重复执行的次数是问题规模n的某个函数f(n),用“O”表示数量级,算法的时间复杂度T(n)是该算法的时间度
量记作:T(n)=O(f(n))。
它表示随着n的增大,算法的执行时间的增长率和f(n)的增长率相同,称为渐近时间复杂度,简称时间复杂度。
推导大O阶方法:
1、用常数1取代运行时间中的所有加法常数。
2、在修改后的运行次数函数中,只保留最高阶项。
3、如果最高阶项存在且不是1,则去除与这个项相乘的常数
4、得到的最后结果就是大O阶。
注:常数阶T(n)=O(1).
一般情况下,随n的增大,T(n)的增长较慢的算法为最优算法。
是指所有可能输入实例均以等概率出现的情况下,算法的期望运行时间。
空间复杂度:
算法所需存储空间的度量,记作:S(n)=O(f(n))
其中n为问题的规模(或大小)
注意:若算法执行时所需要的辅助空间相对于输入数据量是一个常数,则称这个算法为原地工作,辅助空间为O(1)
况下,随n的增大,T(n)的增长较慢的算法为最优算法。
是指所有可能输入实例均以等概率出现的情况下,算法的期望运行时间。
空间复杂度:
算法所需存储空间的度量,记作:S(n)=O(f(n))
其中n为问题的规模(或大小)
注意:若算法执行时所需要的辅助空间相对于输入数据量是一个常数,则称这个算法为原地工作,辅助空间为O(1)