《数据结构》绪论
数据结构绪论
![数据结构绪论](https://img.taocdn.com/s3/m/ac7adf81f021dd36a32d7375a417866fb84ac0cd.png)
数据结构绪论数据结构是计算机科学中的重要概念,是计算机程序设计的基础。
它是研究数据的逻辑结构和数据的操作的一门学科。
在计算机科学中,数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
数据结构的研究主要包括两个方面,一是研究数据的逻辑结构,即如何把现实世界中的数据抽象为计算机可以处理的数据;二是研究数据的操作,即如何对这些抽象的数据进行增删改查等操作。
数据结构的逻辑结构可以分为线性结构和非线性结构。
线性结构是数据元素之间存在一对一的关系,如线性表、栈和队列等;非线性结构是数据元素之间存在一对多或多对多的关系,如树和图等。
线性表是最简单、最常用的数据结构之一。
它由n个数据元素组成,这些元素按照一定的顺序排列。
线性表有两种存储方式,一种是顺序存储结构,即将线性表中的元素顺序地存放在一片连续的存储空间中;另一种是链式存储结构,即将线性表中的元素存放在一系列的节点中,每个节点包括数据元素和指向下一个节点的指针。
栈是一种特殊的线性表,它只允许在表的一端进行插入和删除操作。
栈的特点是后进先出,即最后插入的元素最先删除。
栈有两个基本操作,即进栈和出栈。
进栈操作将一个元素插入到栈顶,出栈操作将栈顶元素删除。
队列也是一种特殊的线性表,它只允许在表的一端插入元素,在另一端删除元素。
队列的特点是先进先出,即最先插入的元素最先删除。
队列有两个基本操作,即入队和出队。
入队操作将一个元素插入到队尾,出队操作将队头元素删除。
树是一种非线性的数据结构,它由n个节点组成,这些节点之间存在一种层次关系。
树的基本概念包括根节点、父节点、子节点、兄弟节点等。
树的一种特殊形式是二叉树,它的每个节点最多有两个子节点。
图是一种比树更加复杂的非线性数据结构,它由顶点和边组成。
图的基本概念包括顶点、边、度、路径等。
图可以分为有向图和无向图,有向图中的边有方向,无向图中的边没有方向。
除了线性表、栈、队列、树和图等常见的数据结构,还有一些其他的数据结构,如堆、哈希表、图的遍历等。
数据结构 第一章 绪论
![数据结构 第一章 绪论](https://img.taocdn.com/s3/m/a351e6e54afe04a1b071de23.png)
理。
第一章
绪论
学习要点
了解数据结构有关概念的含义,特别是数据 的逻辑结构,数据的存储结构之间的关系;
1
2 熟悉类C语言的书写规范,特别要注意值调用 和引用调用的区别及出错处理方式; 3 了解算法时间复杂度的计算方法;
本章的主要内容:
1.1 1.2 1.3 1.4
什么是数据结构: 基本概念和术语 抽象数据类型的表示与实现 算法与算法分析 补充 类C语言简要说明
2)熟练掌握一门程序设计语言。
3) 熟知应用领域的相关知识。
其后两个条件比较容易实现,而第一个条件则需 要花相当的时间和精力才行。这也是区分一个程序设 计人员水平高低的一个重要标志。因此,我们学习数 据结构的目的,就是为了更好地进行程序设计。
1.1 什么是数据结构
数据结构课程就是要对不同的数据对象(Data object) 进行探索。对每种数据对象,首先考虑要执行的操作,然 后考虑表示这种数据对象的方法,以使这些操作有效地实 现(算法 Algorithm)。 学习数据结构,要掌握两种技术: 1)善于设计种种可供选择的数据表示形式(Data Structure)。 2)对相应的Data Structure设计出完成各种操作的 算法。 2.什么是数据结构?
数据结构是一门研究非数值计算的程序设计问题中计 算机的操作对象以及它们之间的关系和操作等等的学科。
本课程主要讨论以下三种数据结构:
1.1 什么是数据结构
1.1 什么是数据结构
Tt
a
b
c
a1
a2
b1
b2
c1
c2
d
d1
d2
d3
图 1-2
树形结构示意图
1.1 什么是数据结构
数据结构第1章 绪论
![数据结构第1章 绪论](https://img.taocdn.com/s3/m/4077c90e7cd184254b353565.png)
课程改革: 课程改革:
实验单独设课, 强调上机实践能力 数据结构课程: 理论课(68课时4学分)+实验课(24课时1.5 学分) 课程考核
1.3 基本概念和术语
1、 2、 3、 4、 5、 6、 数据 数据元素 数据对象 数据结构 数据类型 抽象数据类型
1. 数据 能输入到计算机中的符号集 数据: 合. 2. 数据元素 数据的基本单位. 数据元素: 3. 数据对象 数据对象: 具有相同性质的数据元素的集合. 4. 数据结构: DATA STRUCTURE 数据结构: 数据及其相互关 系的集合. 分为逻辑结构和存储结构(物理结 构). 数据结构-------------------------------类 数据结构----------------类 CLASS
数据的存储结构
1. 顺序存储结构 顺序存储结构:借助元素在存储器中的相对位置 来表示数据元素间的逻辑关系。 【例1.4】对于表1-1提出的学生信息登记表进行存储, 假定每个元素占用50个存储单元,数据从1000号单 元开始由低地址向高地址存放,对应的顺序存储结 构如表1-3所示。
数据的存储结构
顺序存储结构的主要特点: 可实现对各数据元素的随机访问。这是 因为只要知道存储的首地址以及每个数 据元素所占的存储单元,就可以计算出 各数据元素的存储地址。 不利于修改,在对数据元素进行插入、 删除运算时可能要移动一系列的数据元 素。
抽象数据类型的定义: 抽象数据类型的定义:
ADT: ADT:抽象数据类型名 data 数据元素之间逻辑关系定义 operation 操作1 操作1 操作2 操作2
……
操作n 操作n
抽象数据类型 的不同视图
1.4 1.4 算法和算法分析
1. 定义:算法(Algorithm)是对特定问题求 定义:算法(Algorithm) 解步骤的一种描述,它是指令的有限序列, 解步骤的一种描述,它是指令的有限序列,其 中每一条指令表示一个或多个操作。 中每一条指令表示一个或多个操作 特性: 2. 特性:
01数据结构——绪论
![01数据结构——绪论](https://img.taocdn.com/s3/m/e67f19c9ac51f01dc281e53a580216fc700a5378.png)
01数据结构——绪论⼀、数据结构绪论1.1 数据结构数据结构是⼀门研究⾮数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。
1.2 基本概念和术语数据数据是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输⼊给计算机处理的符号集合。
数据不仅仅包括整形、实型等数值类型,还包括字符及声⾳、图像、视频等⾮数值类型。
数据元素数据元素是组成数据的、有⼀定意义的基本单位,在计算机中通常作为整体处理,也被称为记录。
⽐如动物类中,⽜、马、⽺、鸡、鸭、鹅就是其数据元素。
数据项⼀个数据元素可以由若⼲数据项组成。
数据项是数据不可分割的最⼩单位。
⽐如⼈这样的数据元素,有眼、⽿、⿐、⼝、⼿、脚这些数据项,也可以有姓名、年龄、性别、出⽣地址、联系电话等数据项,具体哪些数据项,要根据你的系统决定。
数据对象数据对象是性质相同的数据元素的集合,是数据的⼦集。
所谓性质相同,是指数据元素具有相同数量和类型的数据项,⽐如⼈都有姓名,性别,⽣⽇等相同的数据项。
数据结构数据结构是相互之间存在⼀种或多种特定关系的数据元素的集合。
研究数据结构的意义:在计算机中,数据元素不是孤⽴、杂乱⽆序的,⽽是具有内在联系的数据集合。
数据元素之间存在的⼀种或多种特定关系,也就是数据的组织形式。
为编写⼀个好的程序,必须分析待处理对象的特性及各处理对象之间存在的关系。
这也就是研究数据结构的意义所在。
1.3 逻辑结构和物理结构:按照视点的不同,可以把数据结构分为逻辑结构和物理结构。
逻辑结构逻辑结构是指数据对象中数据元素之间的相互关系。
逻辑结构分为以下四种:集合结构:集合结构中的数据元素除了同属于⼀个集合外,它们之间没有其他关系。
各个数据元素是“平等”的,它们的共同属性是同属于⼀个集合。
集合结构线性结构:线性结构中的数据元素是⼀对⼀的关系。
线性结构树形结构:树形结构中的元素之间存在⼀种⼀对多的层次关系。
树形结构图形结构:图形结构的数据元素是多对多的关系。
数据结构绪论
![数据结构绪论](https://img.taocdn.com/s3/m/2074879da1116c175f0e7cd184254b35eefd1aef.png)
1.3 算法和算法分析
三、算法分析
同一问题可用不同算法解决,而一个算法的 质量优劣将影响到算法乃至程序的效率。算法分析 的目的在于选择合适算法和改进算法。一个算法的 评价主要从时间复杂度和空间复杂度来考虑。
1.3 算法和算法分析
1、时间复杂度
语句频度:某语句执行次数称为该语句的语句频度。
例1-2:用图形表示下列数据结构,并指出它们是属于线性 结构还是非线性结构。
(1) S=(D, R) D={ a, b, c, d, e, f } R={(a,e), (b,c), (c,a), (e,f), (f,d)}
解: 上述表达式可用图形表示为:
b
c
a
e
f
d
此结构为线性的。
例1-3 假设我们需要编制一个事务管理的程序,管理 学校科学研究课题小组的各项事务,则首先要为程序 的操作对象——课题小组设计一个数据结构。假设每 个小组由一位教师、一至三名研究生及一至六名本科 生组成,小组成员之间的关系是:教师指导研究生, 而由每位研究生指导一至两名本科生。
执行n次
(2) for(i=1;i<=n;++i) {++x;s+=x;}
(3)for(j=1;j<=n;++j) 执行n2次
for(k=1;k<=n;++k) {++x;s+=x;}
基本操作“x增1”语句就是所谓的原操作。
1.3 算法和算法分析
一般情况下,算法中基本操作重复执行的次 数是问题规模n的某个函数f(n),算法的 时间量度记作: T(n)=O(f(n))
数据结构第一章--绪论(严蔚敏版)
![数据结构第一章--绪论(严蔚敏版)](https://img.taocdn.com/s3/m/778e8fd4c1c708a1284a44e9.png)
解 T = (D, R ) D={A,B,a,b,c }
R是D上的关系的集合 是 上的关系的集合
A
B
a R={ P1,P2 } P1 ={<A,a>, <A,b>, <A,c>} P2 ={<B,a>, <B,b>, <B,c>}
b
c
写出一个复数的数据结构 例3 写出一个复数的数据结构 Complex= (C , R) 解 一个复数可以表示为 a+bi 一个复数可以表示为 复数 C={a,b}
也可以表示成一个有序对 <a, b>
∴这里存在一种关系 P ={<a,b>} (只有一个有序对 只有一个有序对) 只有一个有序对
而R是C上的关系的集合 R={ P } 是 上的关系的集合
写出一个复数的数据结构 例3 写出一个复数的数据结构 Complex= (C , R) 解 一个复数的数据结构为 Complex= (C , R) 其中, 其中, C={a,b} R={ P } P ={<a,b>}
a b c
解 其数据结构可描述为 d e T = (D, R ) D是数据元素的集合 D={a,b,c,d,e} 是数据元素的集合
R是D上的关系的集合 R={ P } 是 上的关系的集合
P ={<a,b>,<a,c>,<b,d>,<b,e>}
例2
一小组有a,b,c 三个学生,一个导师A 一小组有a,b,c 三个学生,一个导师A 和一个辅导员B 和一个辅导员B,此小组的数据结构如图:
48
ADT 抽象数据类型名 { 数据对象: 数据对象:〈数据对象的定义〉 数据关系: 数据关系:〈数据关系的定义〉 基本操作: 基本操作:〈基本操作的定义〉 } ADT 抽象数据类型名 其中基本操作的定义格式为: 基本操作名(参数表) 基本操作名 初始条件:〈初始条件描述〉 初始条件: 操作结果:〈操作结果描述〉 操作结果
数据结构-第一章 绪论
![数据结构-第一章 绪论](https://img.taocdn.com/s3/m/cd5dcd236137ee06eef91832.png)
free(T); T=NULL; return OK; } ……
算法
❖ 定义:是对特定问题求解步骤的一种描述,是 指令的有限序列
❖ 5个特性 有穷性 确定性 可行性 输入 输出
❖ 算法与程序的区别 程序未必满足有穷性。
算法的设计要求
❖ 正确性(correctness) ❖ 可读性(readability) ❖ 健壮性(robustness) ❖ 效率(efficiency)与存储量需求
基本概念和术语(4)
❖ 数据的存储结构(物理结构) 数据逻辑结构在计算机中的表示 两种存储结构 ❖顺序存储结构 ❖链式存储结构
注意:数据的逻辑结构和存储结构的区别
两种存储结构示例
顺序存储结构
链式存储结构
基本概念和术语(5)
❖ 数据运算 是在数据的逻辑结构上定义的操作算法. ❖算法的设计取决于选定的数据逻辑结构. ❖算法的实现依赖于采用的存储结构.
数据结构
第一章 绪论
主讲人:刘波
本章教学目标、重点、难点
❖ 教学目标:了解数据结构这门课程的主要内容,作 用,掌握数据结构的基本概念及术语
❖ 教学重点
数据、数据元素、数据结构、数据类型、抽象数据类型 等概念术语的确定含义、特别是数据结构的三个方面以 及这三方面的相互关系;
描述算法的类C语言与C语言的区别; 算法设计的基本要求及算法的时间分析和空间分析的方
数据结构课件:绪论
![数据结构课件:绪论](https://img.taocdn.com/s3/m/2e7c2f0cce84b9d528ea81c758f5f61fb73628fd.png)
按照数据元素之间的相互联系方式, 数据的逻辑结构 可分为线性结构、 树结构和图结构。 线性结构是指除第一 个和最后一个数据元素外每个数据元素只有一个前驱数据元 素和一个后继数据元素。 表1 - 1中的数据元素就是一个线性 结构的数据元素。 线性结构也可表示为图1 - 1(a)。 由于线 性结构的数据元素呈现为线性序列, 所以有些教科书把线 性结构称为线性序列, 或简称序列。 树结构是指除根结点 外每个数据元素只有一个前驱数据元素和若干个后继数据元 素, 其典型例子如图1 - 1(b)所示, 其中, 数据元素A有两 个后继数据元素, 分别为B和C。
17
图 1 - 2 基本存储结构形式
(a) 顺序存储结构; (b) 链式存储结构
18
顺序存储结构和链式存储结构是两种最基本、 最常用 的存储结构。 除此之外, 还有仿真指针(也称作静态数组) 和间接地址存储结构。 仿真指针和间接地址存储结构实际 上分别是顺序存储结构和链式存储结构的某种形式的结合。
9
例如, 像下面这样定义后就表示变量a和b所属的数据
类型为StudentType:
StudentType a, b;
表示变量a的name数据项
的语法是, 表示变量b的age数据项的语法是b.age。
没有定义具体数据类型的数据元素称作抽象数据元素。
上述学生情况数据元素的数据类型定义为StudentType,
12
图结构是指每个数据元素可有若干个前驱数据元素和若干 个后继数据元素, 其典型例子如图1 - 1(c)所示, 其中, 数 据元素E有两个前驱数据元素, 分别为B和C。
13
图 1 - 1 基本的数据逻辑结构形式 (a) 线性结构; (b) 树结构; (c) 图结构
数据结构(C语言版)——第1章绪论
![数据结构(C语言版)——第1章绪论](https://img.taocdn.com/s3/m/4a26294b69eae009581bec32.png)
正确性 可读性 健壮性 高时间效率 高空间效率
算法分析
• • 算法执行所耗费的时间,与该算法中所 有语句的执行总次数成正比 。 语句频度:算法中的所有语句的执行的 总次数 ,记为:T(n) 。 时间复杂度:把T(n)表示成同数量级函 数的形式:T(n)=O(g(n)),则O(g(n))称 为算法的时间复杂度 。描述了当n充分 大的时候算法的语句频度的数量级。
数据结构(C语言版)
第1章 绪论
本章主要知识点
• 数据结构的常用术语及基本概念
• 集合、线性结构、树型结构、图型结构 的逻辑特点 • 抽象数据类型 • 算法、算法描述及算法分析
常用术语和基本概念
• 数据:人们利用文字符号、数字符号以及其他规 定的符号对客观现实世界的事物及其活动所做的 抽象描述。 • 数据元素:表示一个事物的一组数据 ,是数据的 基本单位 。 • 数据项:数据的最小单位。 • 数据对象:性质相同的数据元素的集合。 • 数据类型:一组性质相同的值的集合以及定义在 这个集合上的一组操作的总称。
•
• 常见的时间复杂度有O(1), O(log n) , O(n),O(n2),O(n3), O(2n),分别称为常量 阶、对数阶、线性阶、平方阶、立方阶 和指数阶。 • O(1)<O(log n)<O(n)<O(n2)<O(n3)<O(2n)
• •
空间复杂度:在算法执行过程中需要
的辅助空间数量,记为:S(n) = O(f(n)) 。
常用术语和基本概念
• 数据基本结构: • 集合结构:数据元素之间无任何关系。 • 线性结构:元素之间存在一对一的线线 关系。 • 树形结构:数据元素之间存在着一对多 的关系。 • 图形结构:数据元素之间存在多对多的 关系。
数据结构 第一章 绪论
![数据结构 第一章 绪论](https://img.taocdn.com/s3/m/611ea3c7240c844769eaee95.png)
三、算法和算法分析
1、算法的特性
有穷性
算法在执行有穷步后结束,且每步可在有穷时间内完成 确定性 算法中指令无二义性,且在任何条件下执行路径唯一
可行性
算法中各操作可通过已实现的基本运算执行有限次完成
1、算法的特性
输入
零或多个 输出 一或多个
2、算法设计的要求
正确性
算法应能满足具体问题的需求 可读性 算法应易于阅读和理解
健壮性
输入数据非法时,算法也能适当作出反应或进行处理 高效性 算法执行时间短,占用存储空间少
3、算法的时间复杂度
算法执行效率主要与所用计算机软、硬件及问题规模有
关。 衡量算法效率时,通常在算法中选择一种不可再分解的 基本操作,该操作的重复执行次数应与算法的执行时间成正
比,一般为问题规模n的函数f(n),此时可记算法的时间量
S(n)=O(f(n)),其中 n 为问题的规模。 分析算法空间复杂度时,一般只考虑执行算法所需辅助 空间,但若输入数据所占空间与算法本身有关,则也应计算
在内。
若算法执行所需空间与输入数据有关,则可求最坏情况 下的空间复杂度。
课程说明
1、教学日历 2、成绩评定 平时(50%)=实验(30%)+作业(15%)+考勤(5%) 期末考试:50%
读者信息: 读者编号 姓名
所借图书登录号 002 001
9001 9002
李红 张小林
2、数据元素
数据的基本单位,程序中常作为一个整体考虑和处理。
举例——图书借阅管理系统 图书信息: 登录号 001 002 书名 理论力学 高等数学 借阅者编号 9002 9001
读者信息: 读者编号 姓名
所借图书登录号 002 001
数据结构(一)绪论
![数据结构(一)绪论](https://img.taocdn.com/s3/m/6c453e651eb91a37f1115c15.png)
1.3 算法和算法分析 1.3.1 算法:
是对特定问题求解步骤的一种描述,是指令的有限序列,其中 每一条指令表示一个或多个操作。 算法具有以下五个特性: (1)有穷性 一个算法必须总是在执行有穷步之后结束,且每 一步都在有穷时间内完成。 (2)确定性 算法中每一条指令必须有确切的含义。不存在二义 性。 (3)可行性 一个算法是可行的。即算法描述的操作都是可以通 过已经实现的基本运算执行有限次来实现的。 (4)输入 一个算法有零个或多个输入,这些输入取自于某个特 定的对象集合。 (5)输出 一个算法有一个或多个输出,这些输出是同输入有着 某些特定关系的量。
数据元素:
是数据(集合)中的一个“个体” 是数据结构中讨论的基本单位
数据结构主要指逻辑结构和物理结构 数据之间的相互关系称为逻辑结构。通常 分为四类基本结构: 一、集合 结构中的数据元素除了同属于一 种类型外,别无其它关系。 二、线性结构 结构中的数据元素之间存在一 对一的关系。 三、树型结构 结构中的数据元素之间存在一 对多的关系。 四、图状结构或网状结构 结构中的数据元素 之间存在多对多的关系。
求整数n(n>=0)阶乘的算法如下,其时间复杂度, int fact(int n) {if (n<=1) return 1; return n*fact(n-1); }
A ) O(log2 n) B) O(n)
C)
O(n (2分)
作业:
1. 计算时间复杂度 sum=1; for(i=0;sum<n;i++) sum+=i; 2.设给定若干n值,比较两函数n2和50nlog2n的增长 趋势,并确定在什么范围内,函数n2的值大于
例4 for(i=1;i<=n;++i) for(j=1;j<=n;++j) {++x;s+=x;} 语句频度为:n2 其时间复杂度为:O(n2) 即时间复杂度为平方阶。
数据结构讲义第一章绪论
![数据结构讲义第一章绪论](https://img.taocdn.com/s3/m/774f03fb31126edb6e1a1015.png)
注:一个抽象数据类型确定了一个模型,但将模型的实 现细节隐藏起来;它定义了一组运算,但将运算 的实现过程隐藏起来。
用抽象数据类型的概念来指导问题的求解过程:
数学模型 非形式算法
抽象数据模型 伪语言程序
数据结构 可执行程序
§ 1.3 抽象数据类型
ADT的定义格式 ADT <ADT名> { 数据对象:<数据对象的定义> 结构关系:<结构关系的定义> 基本操作:<基本操作的定义> }ADT <ADT名>
初始化数据结构;
Destroy( )
销毁数据结构;
Get (i )
查找第 i 个元素;
Insert (i , b ) 在第 i 个位置插入元素 b ;
Delete( i )
删除第 i 个元素;
Traverse( )
遍历整个数据结构
§ 1.3 抽象数据类型
用C语言实现抽象数据类型ADT 用标准C语言表示和实现ADT描述时,主要
§ 1.2 数据结构的基本概念
数 据:描述客观事物的数字、字符以及一切 能够输入到计算机中,并且能够被计 算机程序处理的符号的集合。
数据是一个广义的概念,可以指普通的数据 (可参加算术运算),也可以指符号(源程序、 产品名称等)或数字化了的声音、图形、图像等。
§ 1.2 数据结构的基本概念
数据元素:数据(集合)中的一个个"个体",是组 成数据的"基本单位"。
a2 d4 d1
a1 d1 d2
list
a1
a2
a4 d5 d3
a3 d3 … d4
a3
…
a30 ∧
§ 1.3 抽象数据类型
数据结构(从概念到算法)第一章 绪论
![数据结构(从概念到算法)第一章 绪论](https://img.taocdn.com/s3/m/2852ca58001ca300a6c30c22590102020740f2c0.png)
(2)可读性:算法的变量命名、格式符合行业规范,并在关键处给出注释,
以提升算法的可理解性。
(3)健壮性:算法能对不合理的输入给出相应的提示信息,并做出相应处
理。
(4)高执行效率与低存储量开销:涉及算法的时间复杂度和空间复杂度评
判。
算法设计的一般步骤
1.3.1算法定义与性质
算法设计出来后有多种表述方法,一般有如下几种描述工具:第一种是自然语
良好基础,数据结构与算法设计密不可分。算法是对特定问题求解步骤的一种描述。
换言之,算法给出了求解一个问题的思路和策略。
一个算法应该具有以下 5 个特征。
(1)有穷性,即算法的最基本特征,要求算法必须在有限步(或有限时间)
之后执行完成。
(2)确定性,即每条指令或步骤都无二义性,具有明确的含义。
(3)可行性,即算法中的操作都可以通过已经实现的基本运算执行有限次
成的集合,数据对象是数据的一个子集。实例说明如下。
由 4 个整数组成的数据对象: D1={20,- 30,88,45}
由正整数组成的数据对象: D2={1,2,3,…}
数据结构的基本概念
(5)数据结构。数据结构是相互之间存在一种或多种特定关系的数据元素
的集合。数据元素之间的关系称为结构,主要有 4 类基本结构,如下图所示。
址,数据'C'的指针指向数据'D'的结点地址,具体如图所示。
数据结构的基本概念
上图数据元素存储的地址在整体上具有前后次序,但实际对单链表数据元素
所分配的存储空间是随机的。如下图 所示,数据元素'A'在物理存储地址上可能位
于数据元素'B'和'D'存储地址之后。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用不同语言、经不同编译器实现 同一算法,可能实现并运
行于不同的体系结构、操作系统 ... ❖ 为给出客观的评判,需要一个理想的平台或模型 不依赖于人或具体的(高级)程序语言等因素 从而直接而准确地描述算法
Data Structures & Algorithms (Spring 2010), Tsinghua University
Data Structures & Algorithms (Spring 2010), Tsinghua University
3
什么是好的算法
❖ 正确: 符合语法,能够编译、链接 能够正确处理简单的输入 能 够正确处理大规模的输入 能 够正确处理一般性的输入 能 够正确处理退化的输入 能够 正确处理任意合法的输入 ❖ 健壮: 能辨别不合法的输入并做适当处理,而不致于非正常退出 ❖ 可读: 结构化 + 准确命名 + 注释 + ... ❖ 效率: 速度尽可能快;存储空间尽可能少
- 14 -
存储、组织、传递和转换数据
掌握各类数据结构功能、表示、实现和基本操作接口 理解各类(基本)算法与不同数据结构之间的内在联系 了解各类数据结构适用的应用背景 灵活地选用各类(基本)算 法及对应的数据结构,解决实际问题
Data Structures & Algorithms (Spring 2010), Tsinghua University
- 10 -
5. ......
❖ 这里的计算机是什么?
l
A
1
它能够解决什么问题?不能解决什么问题?
Data Structures & Algorithms (Spring 2010), Tsinghua University
尺规计算机及其算法
❖ 输入:平面上任一线段AB 输出:将AB三等分 ❖ 算法 从A发出一条与AB不重合的射线 在上取AC' = C'D' = D'B' 联接B'B 经D'做B'B的平行线, 交AB于D A ❖ 这里的计算机是什么? 它能够解决什么问 题?不能解决什么问题? ❖ 子程序:过直线外一点,做平行线
5
数据结构:内容纵览
❖ 各数据结构的ADT接口及其不同实现
序列(向量、列表) 堆) 树(着重于平衡二分查找树) 优先队列( 字典(散列表) 图、相关算法及应用
- 15 -
❖ 构造有效算法模块的常用技巧
顺序、二分查找 模式匹配 排序与选取 散列 遍历 几何查找
❖ 典型的算法设计策略与模式
迭代、贪心 试探
5
渐进分析
❖ 其它记号 T(n) = (f(n)): c > 0,当n ≫ 2后,T(n) > c f(n) T(n) = (f(n)): c1>c2>0,当n ≫ 2后,c1f(n) > T(n) > c2f(n) O T(n)
- 23 -
f(n)
0
Data Structures & Algorithms (Spring 2010), Tsinghua University
- 13 -
Data Structures & Algorithms (Spring 2010), Tsinghua University
4
数据结构:为何要学?学什么?学习目标?
❖ 数据结构 在计算机相关专业课程体系中,一直处于核心位置 是计算机科学的重要组成部分 是设计与实现高效 算法的基石 ❖ 讲授范围 各类数据结构设计和实现的基本原理与方法 算法设计和分析的主要技巧与工具 ❖ 学习数据结构,就是要学会 高效地利用计算机,有效地
寄存器读写(赋值)、四则运算、比较、goto、call、return ❖ 为什么采用RAM模型? 一般计算平台的简化与抽象,据运行时间可衡
量算法效率//为什么? 使我们可以独立于具体的平台,对算法的效
率进行比较与评判 算法的运行时间 算法需要执行的基本操作次数 于是 T(n) = 算法在 RAM 中为求解规模为 n 问题所需的基本操作次数
Data Structures & Algorithms (Spring 2010), Tsinghua University
4
渐进分析
❖ 回到原先的问题:随着问题规模的增长,计算成本如何增长? 注意:这里更关心足够大的问题,注重考察成本的增长趋势 ❖ 渐进分析:在问题规模足够大后,计算成本如何增长? Asymptotic analysis:当n ≫ 2后,对于规模为n输入,算 法 需执行的基本操作次数 T(n) = ? 需占用的存储单元数 ❖ 大O记号(big‐O notation) // T(n) = O(f(n)) iff c > 0,当n ≫ 2后,T(n) < c f(n) 与T(n)相比,f(n)更为简洁,但依然反映前者的增长趋势 S(n) = ?
Data Structures & Algorithms (Spring 2010), Tsinghua University
- 16 -
//注意与参考书的差别
不考虑时间复杂度 与时间复杂度密切相关
操作&语义 完整的算法 不涉及数据的存储 要考虑数据的具体存储
7
- 17 -
0. 绪论
(c) 大O记号
8
- 26 -
O(nc)
❖ 多项式(polynomial function)
➢ 100n + 200 = O(n) ➢ (100n ‐ 500)(20n2 ‐ 300n + 2010) = O(n n2) = O(n3) ➢ (2010n2 ‐ 20)/(1999n ‐ 1) = O(n2/n) = O(n) ➢ 一般地:aknk + ak‐1nk‐1 + ... + a1n + a0 = O(nk), ak > 0
Data Structures & Algorithms (Spring 2010), Tsinghua University
7
- 25 -
O(logcn)
❖ 对数 O(logn):lnn | lgn | log100n | log2010n ❖ 常底数无所谓
常数 a, b > 0,lna / lnb = logab = O(1) n > 0 都有 logan = logab logbn = O(logbn),反之亦然
规模接近,计算成本也接近 规模扩大,计算成本通常 呈上升趋势
Data Structures & Algorithms (Spring 2010), Tsinghua University
1
问题规模 vs. 计算成本
❖ 令TA(n) = 用算法 A 求解某一问题规模为 n 的实例,所需的计算成本 //讨论特定算法A(及其对应的问题)时,简记作T(n) ❖ 但是,这一定义似乎仍有问题 ... ❖ 同一问题等规模的不同实例,计算成本不尽相同,甚至有实质差别 ❖ 例如: 在 n 个平面点中,找到所成三角形面积最小的三个点 通常,要枚举所有C(n,3)种组合 但运气好的话 ... ❖ 既然如此,又该如何定义 T(n) 呢? ❖ 保险起见,还是取 T(n) = max(T(P) | |P| = n}
、剪枝、回溯
递归、分治、减治
动态规划பைடு நூலகம்
❖ 基本的复杂度分析方法
渐进分析与相关记号 递推关系、递归跟踪、分摊分析
Data Structures & Algorithms (Spring 2010), Tsinghua University
6
抽象数据类型与数据结构
❖ ADT = 数据模型 + 定义在该模型上的一组操作 只确定一组 外部逻辑特性,不涉及内部具体的表示与实现 建立起从 算法设计到具体实现的桥梁 每种操作只需实现一次,缩 短例程篇幅,提高软件复用度 信息隐蔽和数据封装,使 用与实现相分离 ❖ 数据结构:基于某种特定语言,实现ADT的一整套算法 三元组/triplet :ADT、类型实现、算法实现 ❖ 区别与联系 抽象定义 具体实现 一种定义 多种实现
-9-
0. 绪论
(b) 概述
绳索计算机及其算法
❖ 问题 输入:任给直线l及其上一点A 输出:经过A做l的一条垂线 ❖ 算法 //2000 B.C.,埃及人
1. 取12段等长的绳索,首尾联接成环 2. 从A点起,将4段绳索沿l抻直,固定 3. 沿另一方向找到第3段绳索的终点 4. 移动该点,将其它8段绳索抻直
- 22 -
//通常可不考虑,为什么?
❖ 性质: 常系数可忽略:O(f(n)) = O(c f(n)) 低次项可忽略:O(na + nb) = O(na), a > b > 0
Data Structures & Algorithms (Spring 2010), Tsinghua University
Data Structures & Algorithms (Spring 2010), Tsinghua University
- 19 -
2
算法 vs. 计算效率
❖ 同一问题,通常有多种算法
- 20 -
//如何评判其优劣?
❖ 实验统计是最直接的方法,但足以准确反映算法的真正效率? ❖ 不足够! 不同的算法,可能更适应于不同规模的输入 不同的算法, 可能更适应于不同类型的输入 同一算法,可能由不同人、
- 12 -
//尺规机、绳索机、图灵机、...
❖ 所谓算法,即特定计算模型下,旨在解决特定问题的指令序列 输入 输出 待处理的信息(问题) 经处理的信息(答案)
正确性
确定性 可行性 有穷性 ...