第一讲,数据结构研究的内容
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例:两矩阵相乘
#define n 100 void MatrixMultiply(int A[n][n],int B[n][n],int C[n][n]) { int i,j,k for (i=1;i<=n;++i) n+1 for (j=1;j<=n;++j) n*(n+1) { C[i][j]=0; n2 for (k=1;k<=n,k++) n2(n+1) C[i][j]=C[i][j]+a[i][k]*b[k][j]; n3 }
数据在计算机中表示方式:
顺序映像(顺序存储结构):以相
对的存储位置表示后继 关系。如前述的职 工档案管理程序,所有职工的纪录组成一 张表,这张表就使一个顺序存储结构。计 算机在为这张表分配存储空间时分配一个 连续的存储空间。
非顺序映像(链式存储结构):
链式存储结构里相邻节点间的具体存储 位置不是一个顺序关系,查询节点需要借助于 指针。
4、数据结构:是相互存在着某种逻辑关
系的数据元素的集合。
带结构的数据元素的集合
指的是数据元素之间存在的关系
线性结构
树结构
图结构
集合
数据结构的定义
数据结构可以用一个二元组来定义: Data_srtuct=(D,S) D是数据元素的有限集,S是D上的关系。
例:复数的表示 :
Complex=(C,R) C是两个实数的集合{c1,c2},R是两个实数的关 系<c1,c2>。C2是虚部。
随着规模的增大,算法执行所需要的
时间的增长率和f(n)的增长率是相同的。用
时间复杂度来表示算法的时间效率,
T (n) = O(f(n))
称T (n) 为算法的(渐近)时间复杂度
如何估算时间复杂度?
算法 = 控制结构 + 原操作 (固有数据类型的操作) 算法的执行时间 = ∑原操作的执行次数×原操作的执行时间
数据类型 是一个值的集合和定义在此集合上的一
组操作的总称。
尽管同一个数据类型在不同的CPU上处
理的方法不同,对程序原来说他们是相同的,
程序员可以不考虑具体机器的实现方法。也 就是说这些数据类型仅仅取决于它的逻辑特 性,与在计算机内的实现无关。在数学抽象 的角度上看可以称之为抽象数据类型。
抽象数据类型:
数据项作为关键字进行查询。
记录在数据库中按顺序排列,对象之间是简单的 线性关系这类数学模型称之为:线性的数据结构
算法:查找 模型:线性结构
2、人机对弈问题
将每一种可能的棋盘格局存储在计 算机里,对弈过程就是根据当前棋局 搜索最优的棋局对策。棋盘格局之间 的关系是一颗倒立的树结构
算法:搜索最优棋盘格局 模型:树
}
最后的时间复杂度为O(n3)。
算法的空间效率:
是指除输入和程序之外的辅助变量 所占额外空间。
thanks!
6、抽象数据类型的表示与实现
课后自己阅读。
四、算法和算法分析
算法是为了解决某类问题而规定的一 个有限长的操作序列,
算法的特征:
1.有穷性 2.确定性
4.有输入 5.有输出
3.可行性
有穷性:在执行有穷步骤之后一定能结束。
确定性:对于每种情况下所应执行的操作,
在算法中都有确切的规定 。
可行性:算法中的所有操作都可以通过已经
2、问题的规模
3、采用的语言
4、机器的运算速度
5、编译程序产生的机器代码的质量
一个特定算法的“运行工作量”的大小,只依
赖于问题的规模(通常用整数量n表示),或者说,
它是问题规模的函数。
如:
int s;
for(int i=0;i<n;i++) s+=i; 问题的规模是n,程序的运算工作量和n成线性 的增长关系 ,或者说它可以看作是n的函数f(n)。
如整数、实数、字符、图像、声音等。
2、数据元素:是数据结构中讨论的数据的基
是数据结构中讨论的基本单位。数据元素有时包 含若干数据项。 如描述一个职工的纪录: 数据元素 编号 姓名 性别 年龄 职务 职称 数据项
本单位,在计算机里通常作为一个整体进行考虑。
3、数据对象:是性质相同的数据元素的
集合,是数据的一个子集。
例:课题小组的管理程序:每个课题小组由一 位老师、1至3名研究生和1至6名本科生组 成。小组成员的关系是:教师指导研究生, 研究生指导1-2名本科生。 Group=(P,R) 其中:P={T,G1,G2…Gn,S11,S12…Snm} 1≤n≤3 1≤m≤2 R={R1,R2}
R1={<T, Gi>} 1≤i≤n 1≤n≤3
问题的数学模型——〉编程求解 数据结构+算法=程序设计 算法:处理问题的策略 数据结构:问题的数学模型
结构静力问题
——线性方程组模型 人口增长问题
——微分方程模型
更多的非数值计算问题无法用严格的
数学方程来表示
1、图书馆的书目检索问题:
每本书有一条记录,记录包括:书号、书名、作
者、出版社、出版年月。书目的检索按记录中的任意
第一讲:
数据结构及其研究的内容
Data Structure Curriculum & It’s Research Field
山东师范大学传播学院
Communication school of SDNU
李大锦
Li Da-Jin
一、数据结构课程的产生与发展
计算机处理的数据
•最初是为了纯粹的数值计算
• 随着计算机的发展,人们逐步探求用计算机来 处理和加工非数值问题:字符、图像、声音、表 格等。 处理非数值数据为程序设计提出了新的课 题: 数据的表示?+数据的组织存储?+数据对象的有 效运算?——〉《数据结构》
算法的实行时间和原操作的执行次数是
成正比的。从算法中选取一种对于所研究的
问题来说是基本操作的原操作,以该基本操
作在算法中重复执行的次数作为算法运行时 间的衡量准则。
如+x;s+=x;} (b)for (i=1;i<=n;++i) {++x;s+=x;} (c)for (j=1;j<=n;++j) for (k=1;k<=n;k++){++x;s+=x;} 基本操作: {++x;s+=x;} a的执行次数:1 时间复杂度O(1) b的实行次数:n 时间复杂度O(n) c的执行次数:n2 时间复杂度O(n2)
如:定义复数的抽象数据类型
ADT Complex { 数据对象: D={e1,e2|e1,e2∈RealSet } 数据关系: R1={<e1,e2> | e1是复数的实数部分, e2 是复 数的虚数部分 } 基本操作: AssignComplex( &Z, v1, v2 ) 操作结果:构造复数 Z,其实部和虚部,分别被 以参数 v1 和 v2 的值。 DestroyComplex( &Z)操作结果:复数Z被销毁 GetReal( Z, &realPart ) 操作结果:用 realpart返回复数Z的实部值。 GetImag( Z, &ImagPart ) 操作结果:用 imgpart返回复数Z的虚部值。 Add( z1,z2, &sum ) 用sum返回两个复数z1, z2 的和值。 }ADT Complex
(Abstract Data Type :ADT)
抽象数据类型是指一个数学模型以及
定义在该模型上的一组操作。
抽象数据类型可以用一个三元组来表示:
(D,S,P)
D是数据对象,S是D上的关系集,P是D
的基本的操作集 。
ADT 抽象数据类型名 { 数据对象:〈数据对象的定义〉 数据关系:〈数据关系的定义〉 基本操作:〈基本操作的定义〉 } ADT 抽象数据类型名
在不同的编程环境中, 存储结构可有不同的描 述方法。当用高级程序 设计语言进行编程时, 通常可用高级编程语言 中提供的数据类型描述 之。
5、数据类型:
在程序设计时,我们必须先对变量进行 声明,不同的数据类型他的取值范围不同, 施加其上的操作也不同: 如:整型 (int) 取值范围:-32768 ~ 32767 可行的操作:+,-,*,/,% 对于浮点型来说,不可以进行% 操作。
1、“数据结构”作为一门独立的课程在国外是从
1968年才开始设立的。
2、1968年美国唐· 欧· 克努特教授开创了数据结构
的最初体系。
3、 “数据结构”在计算机科学中是一门综合性的 专业基础课。 4、数据结构是介于数学、计算机硬件和计算机软件 三者之间的一门核心课程。
二、数据结构课程的研究内容
•计算机处理问题:
实现的基本操作运算有限次实现之 。 有输入输出:每个算法都要有算法需要加工 的数据,经加工后获得一定的结果。
1、算法设计的要求:
正确性、可读性、健壮性、效率与低存储量要
求。
2、算法分析: 算法的效率:指算法的时间效率。
衡量算法效率的方法:
1、事后统计法:
2、事前分析法:
一个算法所需要的时间取决于多个方面: 1、算法采用的策略
3、煤气管道敷设问题
这是一个称之为图的结构
算法:如何规划总投资最少? 模型:图(网)
概括的说:
数据结构是一门讨论“描述现实世界实
体的数学模型(非数值计算)及其上的操作在
计算机中如何表示和实现”的学科
三、相关的概念
1、数据:数据是客观事物的符号的表示,
在计算机中指能够输入到计算机并被计算 机程序处理的符号的总合。是计算机加工 的“原料”。
R2={<Gi, Sij>} 1≤i≤n 1≤j≤m 1≤n≤3 1≤m≤2
数据结构包括“逻辑结构” 和“物理结构” 两个层面。
逻辑结构:是对数据元素之间的逻辑关系
的描述。
物理结构 :是逻辑结构在计算机中的表
示和实现(映像),故又称“存储结构”,
存储结构中的每一个数据元素叫做节点,
节点中的数据项称为数据域。
如前面所述的职工档案管理程序,可如下定 义数据元素: typedef struct { int NO; char name[10]; int age; bool sex; char position[20]; char pos_rank[20]; char department[20]; }RecordType ;