第9章 贪心法

合集下载

算法与生活 教案

算法与生活  教案

算法与生活教案章节一:引言教学目标:1. 让学生了解算法在生活中的重要性。

2. 培养学生对算法的兴趣和好奇心。

教学内容:1. 介绍算法的定义和特点。

2. 举例说明算法在生活中的应用。

教学步骤:1. 引入话题:讨论日常生活中遇到的问题,如排序、查找等。

2. 介绍算法的定义:算法是解决问题的一系列步骤。

3. 讲解算法的特点:有穷性、确定性、可行性。

4. 举例说明算法在生活中的应用:地图导航、购物网站推荐等。

章节二:排序算法教学目标:1. 让学生了解排序算法的概念和作用。

2. 培养学生掌握排序算法的应用。

教学内容:1. 介绍排序算法的定义和分类。

2. 讲解冒泡排序算法的基本思想和步骤。

3. 分析冒泡排序算法的优缺点。

教学步骤:1. 引入话题:讨论日常生活中遇到的排序问题。

2. 介绍排序算法的定义:将一组数据按照特定顺序排列的算法。

3. 讲解冒泡排序算法:比较相邻元素,交换位置,重复执行直到排序完成。

4. 演示冒泡排序算法的实现。

5. 分析冒泡排序算法的优缺点:简单易懂,但效率较低。

章节三:查找算法教学目标:1. 让学生了解查找算法的概念和作用。

2. 培养学生掌握查找算法的应用。

教学内容:1. 介绍查找算法的定义和分类。

2. 讲解线性查找算法的基本思想和步骤。

3. 分析线性查找算法的优缺点。

教学步骤:1. 引入话题:讨论日常生活中遇到的查找问题。

2. 介绍查找算法的定义:在一组数据中查找特定元素的过程。

3. 讲解线性查找算法:从数据的一端开始,逐个比较直到找到或遍历完。

4. 演示线性查找算法的实现。

5. 分析线性查找算法的优缺点:简单易懂,但效率较低。

章节四:递归算法教学目标:1. 让学生了解递归算法的概念和特点。

2. 培养学生掌握递归算法的应用。

教学内容:1. 介绍递归算法的定义和特点。

2. 讲解递归算法的实现和应用。

3. 分析递归算法的优缺点。

教学步骤:1. 引入话题:讨论日常生活中遇到的可以分解为更小问题的问题。

信息学-骗分导论

信息学-骗分导论

新版骗分导论THE NEW GUIDE OF CHEATING IN INFORMATICS OLYMPIAD目录第1章绪论第2章从无解出发2.1 无解情况2.2 样例——白送的分数第3章“艰苦朴素永不忘”3.1 模拟3.2 万能钥匙——DFS第4章骗分的关键——猜想4.1 听天由命4.2 猜测答案4.3 寻找规律4.4 小数据杀手——打表第5章做贪心的人5.1 贪心的算法5.2 贪心地得分第6章C++的福利6.1 快速排序6.2 “如意金箍棒”第7章“宁为玉碎,不为瓦全”第8章实战演练第9章结语第1章绪论在Oier中,有一句话广为流传:任何蒟蒻必须经过大量的刷题练习才能成为大牛乃至于神牛。

这就是著名的lzn定理。

然而,我们这些蒟蒻们,没有经过那么多历练,却要和大牛们同场竞技,我们该怎么以弱胜强呢?答案就是:骗分那么,骗分是什么呢?骗分就是用简单的程序(比标准算法简单很多,保证蒟蒻能轻松搞定的程序),尽可能多得骗取分数。

让我们走进这本《新版骗分导论》,来学习骗分的技巧,来挑战神牛吧!第2章从无解出发2.1 无解情况在很多题目中都有这句话:“若无解,请输出-1.”看到这句话时,骗分的蒟蒻们就欣喜若狂,因为——数据中必定会有无解的情况!那么,只要打出下面这个程序:printf(“-1”);就能得到10分,甚至20分,30分!举个例子:NOIP2012第4题,文化之旅题目描述Description有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家)。

不同的国家可能有相同的文化。

不同文化的国家对其他文化的看法不同,有些文化会排斥外来文化(即如果他学习了某种文化,则他不能到达排斥这种文化的其他国家)。

现给定各个国家间的地理关系,各个国家的文化,每种文化对其他文化的看法,以及这位使者游历的起点和终点(在起点和终点也会学习当地的文化),国家间的道路距离,试求从起点到终点最少需走多少路。

第九章-数据结构与算法基础

第九章-数据结构与算法基础

解题思路多代入法二叉树度叶子结点就是没有孩子的结点,其度为0,度为二的结点是指有两个子数的结点。

注意树的度和图的度区别叶子结点二叉排序树完全二叉树若设二叉树的深度为h,除第h 层外,其它各层(1~h-1) 的结点数都达到最大个数,第h 层所有的结点都连续集中在最左边,这就是完全二叉树。

完全二叉树——只有最下面的两层结点度小于2,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树;最优二叉树(就是哈弗曼树)平衡二叉树平衡二叉树,又称AVL树。

它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度之差之差的绝对值不超过1.。

满二叉树满二叉树——除了叶结点外每一个结点都有左右子叶且叶结点都处在最底层的二叉树,。

除最后一层无任何子节点外,每一层上的所有结点都有两个子结点(最后一层上的无子结点的结点为叶子结点)。

也可以这样理解,除叶子结点外的所有结点均有两个子结点。

节点数达到最大值。

所有叶子结点必须在同一层上.本题主要考查一些特殊二叉树的性质。

若二叉树中最多只有最下面两层的结点度数可以小于2,并且最下面一层的叶子结点都依次排列在该层最左边的位置上,则这样的二叉树称为完全二叉树,因此在完全二叉树中,任意一个结点的左、右子树的高度之差的绝对值不超过1。

二叉排序树的递归定义如下:二叉排序树或者是一棵空树;或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于根结点的值;(3)左右子树也都是二叉排序树。

在n个结点的二叉树链式存储中存在n+1个空指针,造成了巨大的空间浪费,为了充分利用存储资源,可以将这些空链域存放指向结点在遍历过程中的直接前驱或直接后继的指针,这种空链域就称为线索,含有线索的二叉树就是线索二叉树。

最优二叉树即哈夫曼树。

排序各种排序的大致思路?各种排序适用于什么情况?各种排序的时间,空间复杂度?快速排序1.快速排序(Quicksort)是对冒泡排序法的一种改进,它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列;在对一个基本有序的数组进行排序时适合采用快速排序法。

算法分析与设计概论

算法分析与设计概论

9
How to Study Algorithm?
“Sometimes we have experiences, and sometimes not. Therefore, the better way is to learn more."
10
1.1 算法与程序
算法:是满足下述性质的指令序列。
输 入:有零个或多个外部量作为算法的输入。 输 出:算法产生至少一个量作为输出。 确定性:组成算法的每条指令清晰、无歧义。 有限性:算法中每条指令的执行次数有限,执行 每条指令的时间也有限。
1) 第一种解法:
输入:所购买的三种鸡的总数目n 输出:满足问题的解的数目k,公鸡,母鸡,小鸡的只数g[ ],m[ ],s[ ] 1. void chicken_question(int n,int &k,int g[ ],int m[ ],int s[ ]) 2. { int a,b,c; 4. k = 0; 5. for (a=0;a<=n;a++) 6. for (b=0;b<=n;b++) 7. for (c=0;c<=n;c++) { 8. if ((a+b+c==n)&&(5*a+3*b+c/3==n)&&(c%3==0)) { 9. g[k] = a; 10. m[k] = b; 11. s[k] = c; 12. k++; 13. }}}
矩阵。
数组 T:表示售货员的路线,依次存放旅行路线中的城 市编号。
售货员的每一条路线,对应于城市编号的一个排列。
n 个城市共有 n! 个排列,采用穷举法逐一计算每一条路线的费 用,从中找出费用最小的路线,便可求出问题的解。

陈嫒算法与数据结构第三版课后答案

陈嫒算法与数据结构第三版课后答案

陈嫒算法与数据结构第三版课后答案算法与数据结构-C语言描述(第三版)第1章绪论1、解释以下概念:逻辑结构,存储结构,操作,数据结构,数据结构的表示,数据结构的实现,抽象数据类型,算法,算法的时间代价,算法的空间代价,大O表示法,贪心法,回溯法,分治法。

答:(1)逻辑结构(数学模型):指数据元素之间地逻辑关系。

具体解释:指数学模型(集合,表,树,和图)之间的关系。

描述方式:B=<K,R>,K是节点的有穷集合,R是K上的一个关系。

(2)存储结构(物理结构):数据的逻辑结构在计算机存储器中的映射(或表示)。

(3)操作(行为):指抽象数据类型关心的的各种行为在不同的存储结构上的具体算法(或程序)。

(4)数据结构:传统观念:数据结构是计算机中表示(存储)的、具有一定逻辑关系和行为特征的一组数据。

②根据面向对象的观点:数据结构是抽象数据类型的物理实现。

(5)数据结构的表示:(6)数据结构的实现:(7)抽象数据类型:(8)算法:是由有穷规则构成(为解决其中一类问题)的运算序列。

-算法可以有若干输入(初始值或条件)。

-算法通常又有若干个输出(计算结果)。

-算法应该具有有穷性。

一个算法必须在执行了有穷步之后结束。

-算法应该具有确定性。

算法的每一步,必须有确切的定义。

-算法应该有可行性。

算法中国的每个动作,原则上都是能够有机器或人准确完成的。

(9)算法的时间代价:(10)算法的空间代价:(11)大O表示法:-更关注算法复杂性的量级。

-若存在正常数c和n0,当问题的规模n>=cf(n), 则说改算法的时间(或空间)代价为O(f(n))(12)贪心法:当追求的目标是一个问题的最优解是,设法把整个问题的求解工作分成若干步来完成。

在其中的每一个阶段都选择都选择从局部来看是最优的方案,以期望通过各个阶段的局部最有选择达到整体的最优。

例如:着色问题:先用一种颜色尽可能多的节点上色,然后用另一种颜色在为着色节点中尽可能多的节点上色,如此反复直到所有节点都着色为止;(13)回溯法有一些问题,需要通过彻底搜索所有的情况寻找一个满足一些预定条件的最优解。

蚁群优化算法

蚁群优化算法
规则虽然简单,但在地点数目增多后求解却极为复杂。以42个地点 为例,如果要列举所有路径后再确定最佳行程,那么总路径数量之 大,几乎难以计算出来。 多年来全球数学家绞尽 脑汁,试图找到一个高 效的算法。 TSP问题在物流中的描 述是对应一个物流配送 公司,欲将n个客户的 订货沿最短路线全部送 到。如何确定最短路线。
第9章 智能优化方法
Contents
1 2
遗传算法
蚁群优化算法 粒子群优化算法
3
蚁群优化算法
先看1个最优化例子
“旅行商问题”(Travel Salesman Problem, TSP 问题)常被称为“旅行推销员问题”,是指一名推销员要 拜访多个地点时,如何找到在拜访每个地点一次后再回到 起点的最短路径。
k 1 m
5.2 算法流程
路径构建 信息素更新
5.2 算法流程
例5.1 给出用蚁群算法求解一个四城市的TSP问题的执 行步骤,四个城市A、B、C、D之间的距离矩阵如下
3 1 2 3 5 4 W dij 1 5 2 2 4 2
假设蚂蚁种群的规模m=3,参数=1,=2,r=0.5。
5.2 算法流程
信息素更新
(1)在算法初始化时,问题空间中所有的边上的信息素都被初始 化为0。 (2)算法迭代每一轮,问题空间中的所有路径上的信息素都会发 生蒸发,我们为所有边上的信息素乘上一个小于1的常数。信息素 蒸发是自然界本身固有的特征,在算法中能够帮助避免信息素的 无限积累,使得算法可以快速丢弃之前构建过的较差的路径。 (3)蚂蚁根据自己构建的路径长度在它们本轮经过的边上释放信 息素。蚂蚁构建的路径越短、释放的信息素就越多。一条边被蚂 蚁爬过的次数越多、它所获得的信息素也越多。 (4)迭代(2),直至算法终止。

数据结构大纲

数据结构大纲

1. 关于算法:(1)算法语言无所谓,只要能看懂。

考试用C++出题,但答题随意(可以用C/C++、Java、Pascal、自然语言等等,看得懂就可以)。

(2)如果要求自己独立地写算法(而不是填空),请注意写算法思想,并加上足够的注释(3)对于算法中直接使用的类和函数(例如栈、队列的函数),应该先写ADT,并说明函数功能、入口参数、出口参数2. 考试范围和重点不考11.3存储管理,不考12.3空间树结构,不考12.4.1决策树、12.4.2博弈树。

各章节以下面的内容为复习重点,尤其是___________、黑体字或★标出部分为重中之重。

其中黑体字为根据新教材本届考试增加的内容。

考试时如果涉及到本大纲没有列出的内容,那么试卷中会给出足够的定义和性质。

第1章概论(教材中本章作者为许卓群)一. 重要概念1. 数据类型2. 抽象数据结构3. 数据结构4. 存储结构5. 算法6. 算法度量(时间代价、空间代价)7. 数据结构的选择和评价二. 方法1. 根据二元组画出图示逻辑结构(注意边的方向)2. 根据要求设计数据结构3. 算法度量的大O表示法的简化法则(不要求掌握大Ω、大Θ表示法)第2章线性表(教材中本章作者为许卓群)一. 概念1. 线性表2. 单链表3. 双链表4. 循环表5. 栈6. 队列7. 循环队列二. 方法1. 线性表的运算(指针操作的正确性)2. 循环队列队列的实现★3. 表达式求值(中缀表达式转后缀表达式的算法、后缀表达式求值算法)4. 栈的性质,用栈来生成序列第3章字符串(教材中本章作者为许卓群)一. 概念1. 串2. 模式匹配二. 方法1. 串的基本操作2. 串的存储★ 3. 串的KMP快速模式匹配算法(next数组),求特征next数组(N数组)和利用next数组完成匹配的方法第4章二叉树(教材中本章作者为杨冬青)一. 概念1. 二叉树2.二叉树的前序、中序、后序周游3. 二叉排序树4. 穿线树(中序、前序、后序)5. Huffman树、Huffman编码6. 堆、堆排序二. 方法1.二叉树的链式存储(1)二叉链表(2)带父指针的三重链表2. 二叉树的顺序存储完全二叉树的顺序存储★3. 使用栈(前、中、后序)周游二叉树(注意,不要使用带GOTO语句的机械消除递归的方法)、使用队列层次地周游二叉树,在周游过程中寻找某个结点或进行某种操作 (结合应用,例如穿线树,或把快速排序转换成非递归形式)4. 二叉检索树的插入与删除5. 构造Huffman树,利用Huffman树进行编码、解码6. 堆排序的建堆过程第5章树(教材中本章作者为杨冬青)一. 概念1. 树、森林2. 树、森林的先根周游、后根周游、层次周游二. 方法1. 树林与二叉树相互转换2.森林的链式存储(1) 转换为相应的二叉树,用二叉链表表示(2) 父指针表示法(3) 子结点表表示法3. 森林的顺序存储不必死记各种顺序存储方法,要了解原理。

2020知到(智慧树)《人工智能基础导学》章节测试答案最新改版

2020知到(智慧树)《人工智能基础导学》章节测试答案最新改版

2020知到(智慧树)《人工智能基础导学》章节单元测试答案绪论单元测试•第1部分•总题数: 101.【单选题】 (10分)1956年达特茅斯会议上,学者们首次提出“artificial intelligence(人工智能)”这个概念时,所确定的人工智能研究方向不包括:A.研究如何用计算机来模拟人类智能B.研究智能学习的机制C.研究人类大脑结构和智能起源D.研究如何用计算机表示人类知识2.【单选题】 (10分)在现阶段,下列哪项尚未成为人工智能研究的主要方向和目标:A.研究如何用计算机模拟人类智能的若干功能,如会听、会看、会说B.研究如何用计算机延伸和扩展人类智能C.研究机器智能与人类智能的本质差别D.研究如何用计算机模拟人类大脑的网络结构和部分功能3.【单选题】 (10分)下面哪个不是人工智能的主要研究流派?A.模拟主义B.经验主义C.连接主义D.符号主义4.【单选题】 (10分)从人工智能研究流派来看,西蒙和纽厄尔提出的“逻辑理论家”方法用,应当属于:A.连接主义,经验主义B.经验主义,行为主义C.符号主义,连接主义D.理性主义,符号主义5.【单选题】 (10分)从人工智能研究流派来看,明斯基等人所推荐的“人工神经网络”方法用计算机模拟神经元及其连接,实现自主识别、判断,应当属于:A.符号主义,连接主义B.连接主义,经验主义C.理性主义,符号主义D.经验主义,行为主义6【判断题】 (10分)“鸟飞派”指的是人类研究人工智能必须要完全符合智能现象的本质A.错B.对7【判断题】 (10分)人工智能受到越来越多的关注,许多国家出台了支持人工智能发展的战略计划A.错B.对8【判断题】 (10分)人工智能将脱离人类控制,并最终毁灭人类A.错B.对9【判断题】 (10分)人工智能目前仅适用于特定的、专用的问题A.错B.对10【判断题】 (10分)通用人工智能的发展正处于起步阶段A.错B.对第一章单元测试•第1部分•总题数: 101.【单选题】 (10分)以下组合最能全面包括所有知识表示形式的是A.符号主义、经验主义、连接主义B.符号主义、特征表示、语义向量C.产生式系统、特征表示、连接主义D.谓词逻辑、经验主义、网络权重2.【单选题】 (10分)以下用谓词表示的命题错误的是A.大亮的老师擅长打羽毛球和网球:good_at(teacher(大亮),羽毛球)⋀ good_at(teacher(大亮),网球)B.我爸爸喜欢吃鸡蛋并且我妈妈喜欢吃西红柿:like_eat(father(我),鸡蛋) ∨like_eat(moth er(我),西红柿)C.小博不在实验室:¬in(小博,实验室)D.老王的生日在4月:birthday(老王,4月)3.【单选题】 (10分)哪种知识表示的样本数据的特征表示,就对应了某种知识。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
对右图中的有向图, 如何考虑用贪心法获 得从源顶点1到其他顶 点间最短路径
设置顶点集合S并不断地作贪心选择来扩充这个集合。 一个顶点属于集合S当且仅当从源到该顶点的最短路径长 度已知。 初始时,S中仅含有源。 设u是G的某一个顶点,把从源到u且中间只经过S中顶点的 路称为从源到u的特殊路径,并用数组dist记录当前每 个顶点所对应的最短特殊路径长度。 Dijkstra算法每次从V-S中取出具有最短特殊路长度的顶 点u,将u添加到S中,同时对数组dist作必要的修改。 一旦S包含了所有V中顶点,dist就记录了从源到所有其 他顶点之间的最短路径长度。
证明: 只要证明只包含E’但不包含e的生成树不是最 小生成树。 设不包含e的为T(它是在{Ti}的基 础上生成的), 包含e的为T*。 要证明代价 w(T) > w(T*). T的形状如右图, e不在其上 若增加上e以后必有回路,而在回路上又必有大于 e的边,从而去掉大于e的边又产生一个树(它 含有e)叫T*。
9.2 Kruskal 最小生成树算法
算法思想
以图上的边为出发点逐次选择最小
生成树的边,贪心策略的原则为,
所选的当前最小边与已有的边不构
成回路。
边 初始状态 (v2, v3)
权值
VS状态 {v1} {v2} {v3} {v4} {v5} {v6}
图示
执行过程
1
{v1} {v2, v3} {v4} {v5} {v6}
间O(|E|log|E|)
贪心法的特点
• 逐步给出解的各部分, • 在每一步“贪婪地” 选择最好的部分解 • 最优子结构性质
当一个问题的最优解包含其子问题的最优解时, 称此问题具有最优子结构性质。问题的最优子结 构性质是该问题可用动态规划算法或贪心算法求 解的关键特征。
贪心算法与动态规划算法的差异
9.1 Prim算法
算法思想
以图上的顶点为出发点,逐次选择 最小生成树的顶点,策略为每次总 是选择 距离最小生成树顶点集最 近的顶点。
算法描述
Prim基本思想
设G=(V,E)是连通带权图,V={1,2,…,n}。
首先置S={1}
然后,只要S是V的真子集,就作如下的贪心选择:
选取满足条件iS,jV-S,且c[i][j]最小的边
1 快速查找
• 两个数据结构: • 使用一个数组,用数组的下标表示S中的元素,数组中 的值指出包含这些元素的子集代表。 • 每一个子集用链表表示,表头包含指向表头和表尾元素 的指针和大小以及表中的元素个数 • 对于初始集合S={1,2,3,4,5,6}
下标 1 值
2
3
4
5
6
• • • • •
初始集合S={1,2,3,4,5,6} 通过6次makeset(i)产生6个单元素子集 {1}, {2},{3}, {4}, {5}, {6} 对于上述数据结构的操作 把数组中的值设为相应子集的代表元素 下标 1 1 值 2 2 3 3 4 4 5 5 6 6
• • • •
换一个解释(从森林的角度): 初始时,有|V|个树构成的森林 最终的森林由单独的树构成 每次迭代中新边的加入等价于从图中找到一条边, 当顶点分别属于不同的树时,选取该边,使两棵 树变为一棵更大的树。
• 通过union-find(并查)算法实现,对两个顶点是 否属于同棵树(集合)的考察
• 贪心算法以自顶向下的方式进行,以迭代的方式 作出相继的贪心选择,每作一次贪心选择就将所 求问题简化为规模更小的子问题。 • 如:0-1背包问题 max(i,j)表示在i个物品中挑 选物品放入容量为j的背包的最大物品价值。假 设有n个物品 • max(n,j)->maxValue(n)+ max(n-1,k)->
9.3 单源最短路径
给定带权有向图G =(V,E),其中每条边的权 是非负实数。 给定V中的一个顶点,称为源。 计算从源到所有其他各顶点的最短路径长度。 这里路径的长度是指路径上各边权之和。 这个问题通常称为单源最短路径问题。 1.算法基本思想
Dijkstra算法是解单源最短路径问题的贪心算法。
9.3 单源最短路径
• 注意:分析是从顶向下分析,但写程序时是从底 向上进行。
课堂练习
给图的所有结点着色,限制为 ①一条边的两个端点不能用同样 的颜色, ②要求所使用的不同颜色的数目 最小。
3
1
5
2
4
• 有5个结点的图。将结点任意编号为1至5.然 后按编号给结点着色, • 从贪婪法观点考虑,每次给尽可能多的结点着 色。 • 首先用颜色1,可给节点1和2着色。 • 现在必须更换颜色,颜色2可给结点3和4着色。 • 这时又不得不换颜色,颜色3给结点5着色。 • 但很显然,更好的办法只要两种颜色,一种给 结点1、3、4着色,另一种给结点2、5着色。
第九章 贪心法
贪心法基本思想
• 逐步给出解的各部分, • 在每一步“贪婪地” 选择最好的部分解,但不顾 及这样选择对整体的影响, • 因此一般得到的不是最优解。 • 但对许多问题它能产生整体最优解。 如单源最短路经问题,最小生成树问题等。 在一些情况下,即使贪心算法不能得到整体最优解, 其最终结果却是最优解的很好近似。
在选择装入背包的物品时,对每种物品i只有2种 选择,即装入背包或不装入背包。不能将物品i装入 背包多次,也不能只装入部分的物品i。
背包问题:
与0-1背包问题类似,所不同的是在选择物品 i装入背包时,可以选择物品i的一部分,而不一 定要全部装入背包,1≤i≤n。
这2类问题都具有最优子结构性质,极为相似,但 背包问题可以用贪心算法求解,而0-1背包问题 却不能用贪心算法求解。
(v4, v5)
(v2, v4)
2
3
{v1} {v2, v3} {v4, v5} {v6}
{v1} {v2, v3, v4, v5} {v6}
(v4, v6)
(v1, v2)
4
5
{v1} {v2, v3, v4, v5, v6}
{v1, v2, v3, v4, v5, v6}
算法正确性
定理: Ti =< Vi , Ei >为一组生成森林,e=(u, v),其中u∈ Vi, v ∈ Vj, i ≠j, 且(u, v)为当前一条最小权的边,则G有 一个包含 e ∪E’的最小生成树,其中 E ’= ∪Ei
贪心法要素总结(参考)
• • • • • • • • • • • (1)明确目标函数和约束条件 (2)制定部分解结构。 确定如何将待解问题分解成若干步骤 Prim算法:最小生成树的子树 背包问题:一部分一部分装入 (3)确定贪心策略 扩大部分解的方法,一般涉及极值选择 (4)确定候选集 明确贪心的选择范围 (5)调整候选集 (6)正确性证明
9.5 哈夫曼编码
• • • • • 编码:文本中的字符赋予一串比特位所有的比特串都不是另一个字符比特串 的前缀 • 考虑将字符和二叉树的叶子联系起来形成前缀码
• 贪心法要求每次在构造部分解的时候都挑一个 最好的部分解。 • 背包问题中什么是最好的部分解
– 单位价值最大的物品即为最好的部分解 – 因此在背包问题中每次都挑当前单位价值最大的 物品,并尽可能多的放入包中。
• n=3 w={10,20,30} v={60,100,120} c=50
– 单位价值V/w={6,5,4} – 因此第一次挑一号物品,全部装入r=40,pv=60 – 第二次挑2号,全部装入r=20,pv=160 – 第三次挑3号,部分装入r=20,pv=160+80=240
• N次union的时间效率? • 一系列按大小求并的操作,可证明最差效率是 • O(nlogn)
2 快速求并
• 用树表示每个子集 根元素作为子集代表 • 树中的边从子女指向他们的父母 维护一个从集合元素到树中节点的映射 • 如对于S1={1,4,5,2} S2={3,6} union(5,6)
算法实现的数据结构 ------不相交子集和并查算法
• 许多应用要求把一个n个元素集合S动态划分为 一系列不相交的子集。 • 对不相交子集求并集和查找的混合操作 • 用makeset(x):生成一个单元素集合{x}。设该操 作对集合S的每个元素只能应用一次。 • Find(x):返回一个包含x的子集 • Union(x,y):构造分别包含x和y的不相交子集的 并集并把它添加到子集的集合中,取代原来的两 个子集。
1 1
3
4 5 6 2 4 5
3
6
2
• Makeset(x)的时间效率Θ(1)
• Union(x,y)的时间效率是Θ(1)
• Find(x)从包含x的节点开始找到根,考虑最
差情况,退化为一个n节点的链表O(n)
• 运行时间: 若采用高效的并查算法 则kruskal算法的
运行时间取决于对图中边的权重排序的时
Dijkstra算法的迭代过程: 迭代 初始 1 2 3 4 S {1} {1,2} {1,2,4} {1,2,4,3} {1,2,4,3,5} u 2 4 3 5 dist[2] dist[3] dist[4] dist[5] 10 10 10 10 10 maxint 60 50 50 50 30 30 30 30 30 100 100 90 60 60
• 链表为6个单节点链表 • List1 1
1
null
• Makeset(i)的时间效率是多少?
• 假设执行union(1,4) 下标 1 1 值
1
2 2
1
3 3
null 1
4 4
5 5
6 6
4 null
下标 1

2
2
2
1
3
3
4
1
4
5
5
null
6
6 一次union 操作的时间 效率
相关文档
最新文档