《数据结构》绪论
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
寄存器读写(赋值)、四则运算、比较、goto、call、return ❖ 为什么采用RAM模型? 一般计算平台的简化与抽象,据运行时间可衡
量算法效率//为什么? 使我们可以独立于具体的平台,对算法的效
率进行比较与评判 算法的运行时间 算法需要执行的基本操作次数 于是 T(n) = 算法在 RAM 中为求解规模为 n 问题所需的基本操作次数
- 14 -
存储、组织、传递和转换数据
掌握各类数据结构功能、表示、实现和基本操作接口 理解各类(基本)算法与不同数据结构之间的内在联系 了解各类数据结构适用的应用背景 灵活地选用各类(基本)算 法及对应的数据结构,解决实际问题
Data Structures & Algorithms (Spring 2010), Tsinghua University
for (i = 0; i < n; i += n/2010); for (i = n; i > 2010; i = log(i)); if (1+1 != 2) goto UNREACHABLE;
/* log*n */
➢ 一定不含分支转向?
➢ 一定不能有(递归)调用? ➢ 全是顺序执行即可? ➢ ...
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
- 12 -
//尺规机、绳索机、图灵机、...
❖ 所谓算法,即特定计算模型下,旨在解决特定问题的指令序列 输入 输出 待处理的信息(问题) 经处理的信息(答案)
正确性
确定性 可行性 有穷性 ...
的确可以解决指定的问题
任一算法都可以描述为一个由基本操作组成的序列 每一基本操作都可实现,且在常数时间内完成 对于任何输入,经有穷次基本操作,都可以得到输出 ...
Data Structures & Algorithms (Spring 2010), Tsinghua University
- 11 -
B' D' C' C D B
经C'做B'B的平行线,交AB于C
//三等分角 / 倍方 / ...
2
计算机与算法
❖ 计算 = 信息处理 ❖ 计算模型 = 计算机 = 信息处理工具
Data Structures & Algorithms (Spring 2010), Tsinghua University
- 19 -
2
算法 vs. 计算效率
❖ 同一问题,通常有多种算法
- 20 -
//如何评判其优劣?
❖ 实验统计是最直接的方法,但足以准确反映算法的真正效率? ❖ 不足够! 不同的算法,可能更适应于不同规模的输入 不同的算法, 可能更适应于不同类型的输入 同一算法,可能由不同人、
规模接近,计算成本也接近 规模扩大,计算成本通常 呈上升趋势
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}
5
数据结构:内容纵览
❖ 各数据结构的ADT接口及其不同实现
序列(向量、列表) 堆) 树(着重于平衡二分查找树) 优先队列( 字典(散列表) 图、相关算法及应用
- 15 -
❖ 构造有效算法模块的常用技巧
顺序、二分查找 模式匹配 排序与选取 散列 遍历 几何查找
❖ 典型的算法设计策略与模式
迭代、贪心 试探
算法分析
❖ 两个主要方面
- 18 -
正确性: 算法功能与问题要求一致? //数学证明?可不那么简单... 成本: 运行时间 + 所需存储空间 //如何度量?如何比较?
❖ 考察:TA(P) = 算法A求解问题实例P的计算成本 意义不大,毕竟...可能 出现的问题实例太多 //如何归纳概括?
❖ 观察:问题实例的规模,往往是决定计算成本的主要因素
n
6
- 24 -
O(1)
❖ 常数(constant function) 2 = 2010 = 2010*2010 = 20102010 = O(1) ❖ 这类算法的效率最高 ❖ 什么样的代码段对应于常数执行时间?
➢ 一定不含循环?
//以及所有RAM基本操作 //总不能奢望不劳而获吧 //应具体分析
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),反之亦然
//为何不注明底数?
❖ 常数次幂无所谓
常数 c > 0,log(nc) = c logn = O(logn)
❖ 对数多项式(ploy‐log function):123*log321n + log105(n2‐n+1) ❖ 这类算法非常有效 复 杂度无限接近于常数 //为什么?
Data Structures & Algorithms (Spring 2010), Tsinghua University
Data Structures & Algorithms (Spring 2010), Tsinghua University
- 16 -
//注意与参考书的差别
不考虑时间复杂度 与时间复杂度密切相关
操作&语义 完整的算法 不涉及数据的存储 要考虑数据的具体存储
7
- 17 -
0. 绪论
(c) 大O记号
❖ 线性(linear function):所有O(n)类函数
❖ 幂:sqrt(n2010 ‐ 24n2009 + 512n2008 + ... + 1978) = O(n1005) ❖ 这类算法的效率通常认为已可令人满意,然而... 这个标准是否太低了? //P难度!
用不同语言、经不同编译器实现 同一算法,可能实现并运
行于不同的体系结构、操作系统 ... ❖ 为给出客观的评判,需要一个理想的平台或模型 不依赖于人或具体的(高级)程序语言等因素 从而直接而准确地描述算法
Data Structures & Algorithms (Spring 2010), Tsinghua University
- 22 -
//通常可不考虑,为什么?来自百度文库
❖ 性质: 常系数可忽略:O(f(n)) = O(c f(n)) 低次项可忽略:O(na + nb) = O(na), a > b > 0
Data Structures & Algorithms (Spring 2010), Tsinghua University
- 13 -
Data Structures & Algorithms (Spring 2010), Tsinghua University
4
数据结构:为何要学?学什么?学习目标?
❖ 数据结构 在计算机相关专业课程体系中,一直处于核心位置 是计算机科学的重要组成部分 是设计与实现高效 算法的基石 ❖ 讲授范围 各类数据结构设计和实现的基本原理与方法 算法设计和分析的主要技巧与工具 ❖ 学习数据结构,就是要学会 高效地利用计算机,有效地
3
- 21 -
RAM
❖ Random Access Machine (J. Sheperdson & H. Sturgis, 1963) //源自冯∙诺依曼体系结构(1945),等价于通用图灵机 寄存器顺序编号,总数没有限制 每一基本操作仅需常数时间: //但愿如此 //循环及子程序本身非基本操作
Data Structures & Algorithms (Spring 2010), Tsinghua University
3
什么是好的算法
❖ 正确: 符合语法,能够编译、链接 能够正确处理简单的输入 能 够正确处理大规模的输入 能 够正确处理一般性的输入 能 够正确处理退化的输入 能够 正确处理任意合法的输入 ❖ 健壮: 能辨别不合法的输入并做适当处理,而不致于非正常退出 ❖ 可读: 结构化 + 准确命名 + 注释 + ... ❖ 效率: 速度尽可能快;存储空间尽可能少
- 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 ❖ 这里的计算机是什么? 它能够解决什么问 题?不能解决什么问题? ❖ 子程序:过直线外一点,做平行线
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
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) = ?
-9-
0. 绪论
(b) 概述
绳索计算机及其算法
❖ 问题 输入:任给直线l及其上一点A 输出:经过A做l的一条垂线 ❖ 算法 //2000 B.C.,埃及人
1. 取12段等长的绳索,首尾联接成环 2. 从A点起,将4段绳索沿l抻直,固定 3. 沿另一方向找到第3段绳索的终点 4. 移动该点,将其它8段绳索抻直
、剪枝、回溯
递归、分治、减治
动态规划
❖ 基本的复杂度分析方法
渐进分析与相关记号 递推关系、递归跟踪、分摊分析
Data Structures & Algorithms (Spring 2010), Tsinghua University
6
抽象数据类型与数据结构
❖ ADT = 数据模型 + 定义在该模型上的一组操作 只确定一组 外部逻辑特性,不涉及内部具体的表示与实现 建立起从 算法设计到具体实现的桥梁 每种操作只需实现一次,缩 短例程篇幅,提高软件复用度 信息隐蔽和数据封装,使 用与实现相分离 ❖ 数据结构:基于某种特定语言,实现ADT的一整套算法 三元组/triplet :ADT、类型实现、算法实现 ❖ 区别与联系 抽象定义 具体实现 一种定义 多种实现