教学课件 数据结构与算法(第2版) 陈卫卫

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
,对算法给定的初始量 输出:算法有一个或多个输出,即与输入有某个特
定关系的量,简单地说就是算法的最终结果
15
1.1.3 算法的概念
2.算法、数据结构与程序的关系
对算法不满意
对数据结构不满意
给定问题
设计求解问题的算法
抽象出数据,建立数据结构
将算法分解成对数据结构的运算 编程实现,并上机调试
对算法的性能进行评价
算法的空间复杂性(space complexity) 算法对空间的需求(存储空间)
34
1.2.2 算法的评价标准和评价方 法
3.时间复杂性 算法的时间复杂性是输入数据量n的函数,
记为T(n),描述算法执行过程中所需的时间 用量与问题规模n之间的函数关系 评价算法的时间复杂性,就是设法找出T(n) 和n的函数关系,即计算出T(n) T(n)要计算得“精确”(客观)较困难
有穷性、确定性、可行性、输入、输出
14
1.1.3 算法的概念
有穷性:一个算法在执行有限步之后必须结束
确定性:算法的每一步骤必须确切定义。执行者可 根据该算法的每一步要求进行操作,并最终得出正 确的结果(即无歧义)
可行性:算法中所有的运算都可以精确地实现 输入:算法有零个或多个输入,即在算法开始之前
T(n)的上界 某算法执行时间T(n),如果存在正的常数c和n0, 使对于一切n > n0,T(n)≤cf(n)都成立 那么,就记作 T(n)=O(f(n))
大“O”记号(big-Oh notation)
37
1.2.2 算法的评价标准和评价方 法
3.时间复杂性 T(n)=O(f(n))
f(n):运行时间 增长率的上界
结束
28
示例1-2 二分查找(binary search)
(3)伪代码
left=0,right=n-1; while (left<=right)
{ if(x>a[mid]) 没找到x,返回-1; mid=(left +right)/2; if(x==a[mid]) 找到x,返回x的下标mid; if(x<a[mid])right=mid-1; else left=mid+1; }
1.评价标准
算法评价(评估,评测)称为算法分析
(Algorithm analysis)
1)算法的正确性
2)算法的有效性
附加标准(评价软件)
3)操作界面
4)键壮性
5)易读性和易维护性
31
1.2.2 算法的评价标准和评价方 法
2.正确性 能满足具体问题的需求,且对所有的合法 的输入数据都正确 算法的正确性是最起码的,也是最重要的 一个正确的算法应当对所有合法的输入数据 都能“计算”出正确的结果 比如,只有对任意n个数据都能完成排序工作 的算法才是一个正确的排序算法
25
示例1-2 二分查找(binary search)
条件:有序数组a[n],要查找的元素x 返回:x在数组a中的下标i,若x不出现,则i=-1
(1)文字叙述
使用三个指针(变量)left,right和mid 分别记忆数组段左、右边界、“中值”点下标
left
mid
right
26
示例1-2 二分查找(binary search)
数据元素的集合 元素之间的关系 对数据集合进行哪些运算 实现运算的算法 算法效率
9
示例
• 设D为某专业开设的计算机课程,R是定义在D上
的关系
数据元素、结点
D={C1、C2、C3、C4、C5}
R={(x,y)|x课程是y课程的先修课,x,y∈ D}
• 若R1={(C1,C2), (C2,C3), (C3,C4), (C4,C5)},则 DS=(D,R1)就是一种数据结构(线性表)
29
3. 种描述形式对照
• 自然语言方式:简单易懂,适合于对算法 的设计思想进行讲解;有二义性
• 流程图:直观、结构性好,常用于对大型 软件的结构分析和说明;有二义性
• 伪代码形式:突出算法主体,保持了算法 的良好结构,便于对算法时间、空间作定 量的分析; 无二义性
30
1.2.2 算法的评价标准和评价方 法
正确?
正确
有错
不满意 满意? 满意
交付使用
16
本节结束
第1章 概述 1节
17

数据结构与算法
第1章 概述 2节
18
1.2 算法的描述和评价
1.2.1 算法的描述 1.描述形式 自然语言 流程图(flowchart) 类语言——伪代码(pseudocode)
描述形式、 程序形式(算法的实现形式)
n2 +4n≤2 n2 注意: f(n)越小,越接近T(n)
39
1.2.2 算法的评价标准和评价方 法
3.时间复杂性
又例:算法A的时间耗用函数
T1(n)=20n2+100n
算法B的时间耗用函数
T2(n)=0.5n2-3n+18
于是 T1(n)=O(n2)
T2(n)=O(n2)
都是n的平方阶的
40
常用阶(由低到高)
从a[i]到a[n-1]中选出最小元素a[k]; 使a[k]与a[i]交换; }
24
示例1-1 自然选择排序算法
for(i=0;i<n-1;i++) { k=i;
for(j=i+1;j<n;j++)if(a[j]<a[k])k=j; w=a[i]; a[i]=a[k]; a[k]=w; }
真程序段
1.1.1 数据结构的概念
数据的种类 数值型数据(整数、实数等) 文字型数据(字符、字符串、程序代码) 矩阵、记录 声音、图像
数据总是以某种编码形式出现的
5
1.1 基本概念
1.1.1 数据结构的概念
数据元素(data element) 数据结点,简称结点(node) 描述一个独立事物的名称、数量、特征、性质的 一组相关信息组成一个数据结点 通常,一个结点含有多个数据项(data item) 结点的类型:结构型 关键字(key) 单值类型的结点:只含一个数据项
数据结构与算法
第1章 概述 1节
1
内容提要
主要内容: 数据结构和算法的基本概念 算法的表现形式和评价方法 基本概念和算法表现形式了解即可 算法评价标准、正确性、时间复杂性 最坏情况和平均情况,很重要
2 2
内容提要
难点: 抽象数据类型 算法时间复杂性的计算 抽象数据类型 结合对表树图的类化示例加以理解
O(1)
常数阶——最快
O(logn)
为从第n个二元项素…中…选择最小元a[j],换到a[0]处; 重复再上从述剩,下直的至n-选1个择元最素后中一选项择最小元,换到
a[1]处; 不依…赖…数…据…结…构…,…不…考虑如何存储数据
21
示例1-1 自然选择排序算法
(1)文字叙述 从n循个环数形据式中:选出一个最小元素作为第一项 再步骤从1剩)下置i的=0n;-1个数据中选出一个最小元素作 步为骤2第)二从项a[i…]~…a[n-1]选出最小元素a[k]; 重步步骤骤复34上) )述i交=换i,+a1直[;i至]与选a[择k]最;后一项
程序中含有算法
2. 示例
19
示例1-1 自然选择排序算法
(1)文字叙述 从n个数据中选出一个最小元素作为第一项 再从剩下的n-1个数据中选出一个最小元素 作为第二项…… 重复上述,直至选择最后一项
不依赖数据结构,不考虑如何存储数据
20
示例1-1 自然选择排序算法
(1)文字叙述 从n进个一数步据叙中述选出一个最小元素作为第一项 再从剩下将的数n据-1存个储数在据数中组选a出[n一]中个最小元素作
存储数据结点和结点之间的关系 顺序存储、非顺序存储
存储结点
用于存储一个数据结点的存储单元 一个数据结点对应一个存储结点 数据结点和存储结点统称结点
空白结点(空结点、自由结点)
预留的存储结点(即尚未存储数据的存储结点)
8
1.1.1 数据结构的概念
2.数据结构的定义
《数据结构与算法》研究的对象
27
示例1-2 二分查找(binary search)
(2)流程图
开始
left=0; right=n-1; i=-1
left>right 是

mid=(left+right)/2
比较
x 与a[mid]
x=a[mid]
x<a[mid]
x>a[mid]
i=mid; left=right+1
right=mid-1 left=mid+1
步骤5)如果i等于n-1,则算法结束; 否则,转步骤2。
22
示例1-1 自然选择排序算法
开始
(2)流图
i=0
从 a[i]至 a[n-1]选出最小元 a[k]
交换 a[i]与 ak]
i=i+1

i==n-1?
是 结束
23
示例1-1 自然选择排序算法
(3)伪代码 for(i=0;i<n-1;i++) {
32
1.2.2 算法的评价标准和评价方 法
2.正确性 评价方法:
调试 精心挑选具有“代表性”的数据 只能证明算法有错,不能证明算法无错 人工证明
归纳法
33
1.2.2 算法的评价标准和评价方 法
3.时间复杂性 算法的时间复杂性(time complexity)
算法对时间的需求 同一问题,算法执行时间越短,效率越高
T(n)是f(n)的 只求T(n)的最高阶
大O函数
忽略其低阶项和常系数
简化T(n)的计算;较客观地反映当n很大时, 算法的时间性能
38
1.2.2 算法的评价标准和评价方 法
3.时间复杂性 示例 设T(n)=n2+4n,有f(n)=n2,则:
n2 + 4n = O(n2) 证明:
因为存在c=2,n0=4,使对于一切n>n0, 恒有
35
1.2.2 算法的评价标准和评价方 法
3.时间复杂性 时间单位
每执行一条基本语句耗用一个时间单位 (比较粗些)
T(n)=执行基本语句的总条(次)数
大体上能够说明算法的时间性能
36
1.2.2 算法的评价标准和评价方 法
3.时间复杂性
渐近时间复杂性—只求出T(n)随输入数据量n而增 长的趋势(极限情况),只求出T(n)的“阶”
left
mid
right
步骤1)[初始化]置left=0,right=n-1 步骤2)如果left>right,则查找不成功,使i=-1,算法终止 步骤3)计算中值点下标,mid=(left+right)/2 步骤4)比较x与a[mid]的值: ①如果x=a[mid],则找到x,置i=mid,算法终止 ②如果x<a[mid],则使right=mid-1,转到步骤2,继续查找 ③如果x>a[mid],则使left=mid+1,转到步骤2,继续查找
6
1.1.1 数据结构的概念
2.数据结构的定义
数据结构(data structure) B = ( D,R)
数据结构
有穷的结点集合
D中结点间的 有穷关系集合
数据的逻辑结构(logical form ) 存储形式:物理结构(physical form )
7
1.1.1 数据结构的概念
物理结构——存储结构 数据结构的存储形式(存储表示)
一对多的关系,比如某部门的组织机构 图:描述结点之间的“多对多”关系
比如城市交通网 散结构:结点之间松散的 “无关关系”
比如散列表
11
1.1.1 数据结构的概念
3.数据结构的种类
图示:圆圈表示结点,连线表示结点之间关系
表结构
树结构
图结构
树、散是图的特例,表是树的特例
散结构 xfsq
12
1.1.2 抽象数据类型
• 若 R2={(C1,C2), (C2,C3), (C2,C4), (C2,C5), (C3,C5),},则DS=(D,R2)也是一种数据结构
逻辑结构
10 10
1.1.1 数据结构的概念
3.数据结构的种类
表结构、树结构、图结构、散结构 表:描述结点之间简单的先后次序关系
一对一的关系,比如学生成绩单 树:描述结点之间的层次关系、嵌套关系
1.抽象的意义
抽取事物的共性,忽略个性 体现外部特征,掩盖具体细节
2.抽象数据类型的含义
ADT(Abstract Data Types)将数据连同 对其的处理操作封装在一起
3.抽象数据类型的实现方法
封装法、半封装法、分散法
13
1.1.3 算法的概念
1.算法的定义
计算机科学家D.E.Knuth(克努特)在其经典巨著 《计算机程序设计艺术》(The Art of Computer Programming)第一卷中对算法的定义 算法,就是有穷规则的集合,其中的规则规定了 解决某特定类型问题的运算序列
算法时间复杂性的计算方法 通过后续各章对众多算法的分析、评价、 时间空间复杂性计算,逐步加以理解
3 3
1.1 基本概念
1.1.1 数据结构的概念
1.数据和数据结点 数据是对客观事物的描述形式和编码形式
的统称 是计算机算法和程序的处理对象(输入数
据)和计算结果(输出数据)
4 4
1.1 基本概念
相关文档
最新文档