- 1、本文档共59页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3算法设计与分析(第三章).ppt
计算计算法设计与分析 第三章贪心算法 最小生成树 设G = (V, E)是无向连通带权图,即一个网络。E的每条边(v, w)的权为c[v][w]。 树的基本性质 连通无回路的图G称为树。 树是点比边多一且连通, q=p–1且连通 。 树是点比边多一且无回路: q=p–1且无回路。 树若添条边就有回路:G无回路,若u, v?G且uv ? E(G),则G+uv中恰有一条回路。 树若减条边就不连通:G连通,对?e∈E(G), G–e不连通。 n个顶点的连通图的生成树含有n – 1条边。 求最小生成树的思路 一个很直观的简单想法:依次选出依据图G的权重较轻的n – 1条边。这样得到的n – 1条边的权重之和肯定是最小的。但是这样是否就得到了G的一棵最小生成树呢? 求最小生成树的两种策略 策略一:在保证连通的前提下依次选出权重较小的n – 1条边(在实现中体现为n个顶点的选择)。 策略二: 在保证无回路的前提下依次选择权重较小的n – 1条边。 Prim算法 基本思想:设G=(V, E)为无向连通带权图,令V={1, …, n}。在保证连通的前提下依次选出权重较小的n – 1条边。 设置一个集合S ,初始化S = {1},T = ?。 如果V–S中的顶点j与S中的某点i连接且(i, j)是E-T中的权重最小的边,于是就选择j(将j加入S),并将(i, j) 加入T中 。 重复执行贪心策略,直至V–S为空。 Prim算法中的数据结构 图用连接矩阵C[i][j]给出,即C[i][j]为结点i到结点j的权重。 为了有效地找出V–S中满足与S中的某个点i连接且(i, j) 权重最小的顶点j,对其中每个顶点j设立两个数组closest[j]和lowcost[j]: closest[j]是s中与j最近的顶点,(closest[j], j)即为选中的边,而lowcost[j]是相应这条边的权重。 Prim算法的实现 Prim(int n, Type **c) { Prim算法的实现 Prim(int n, Type **c) { Prim算法的实现 Prim(int n, Type **c) { Prim算法的实现 Prim(int n, Type **c) { Prim算法的实现 Prim(int n, Type **c) { Prim算法的示例 给定一个连通带权图如下: Prim算法的示例 给定一个连通带权图如下: Prim算法的示例 给定一个连通带权图如下: Prim算法的示例 给定一个连通带权图如下: Prim算法的示例 给定一个连通带权图如下: Kruskal算法 基本思想:在保证无回路的前提下依次选出权重较小的n – 1条边。 具体做法:若(i, j)是E中尚未被选的边中权重最小的,且(i, j)不会与已经选择的边构成回路,于是就选择 (i, j)。 Kruskal算法 基本思想:在保证无回路的前提下依次选出权重较小的n – 1条边。 具体做法:若(i, j)是E中尚未被选的边中权重最小的,且(i, j)不会与已经选择的边构成回路,于是就选择 (i, j)。 Kruskal算法的数据结构 数组e[][]表示图的边,e[i][u]、e[i][v]和e[i][w]分别表示边i的两个端点及其权重。 函数Sort(e, w)对数组e按权重w排序。 一个连通分支中的顶点表示为一个集合。 函数Initialize(n)将每个顶点作为一个集合。 函数Find(u)给出顶点u所在的集合。 函数Union(a, b)给出集合a和集合b的并集。 重载算符!=判断集合的不相等。 Kruskal算法的实现 Kruskal(int n, **e) { Sort(e, w); initialize(n); k = 1; j = 1; while (k n) {a = Find(e[j][u]); b = Find(e[j][v]); if (a != b) {t[k++] = j; Union(a, b)} j++ }} Kruskal算法的例子 Kruskal算法的例子 Kruskal算法的例子 Kruskal算法的例子 Kruskal算法的例子 Kruskal算法的例子 Kruskal算法的例子 Kruskal算法的例子 Prim与Kruskal两算法的复杂性 Prim算法为两重循环,外层循环为n次,内层循环为O(n),其复杂性为O(n2)。 Kruskal算法中,设边数为e,则边排序的时间为O(eloge),确定边的时间为O(e),所以整个时间复杂性为O(eloge)。 边数e和顶点数n最多为:e=n(n – 1)/2。 若边多点少,Prim算法较好; 若边少点多,Kruskal算法较好。 贪心
您可能关注的文档
- (1-)1.1-1.2绪论.ppt
- (人教新课标)一年级数学上册课件 8、9的认识和加减法.ppt
- (数值积分与微分的MATLAB命令).ppt
- (新)华师版九年级数学上21.1.1二次根式(第1课时)课件.ppt
- 000数字逻辑与数字系统绪论.ppt
- 003数学实验工具介绍.ppt
- 01 绪论-命题逻辑.ppt
- 01-命题逻辑-1.1~1.3.ppt
- 01=Math-Phys Methods.ppt
- 01数学分析课程简介.ppt
- 初中生亲子阅读与阅读策略训练研究论文.docx
- 高中数学课堂如何提升学生空间想象力的教学策略研究论文.docx
- 初中英语课堂互动模式下的教学策略与教学评价改革与实践研究论文.docx
- 小学美术教育中创新思维培养路径研究论文.docx
- 绿色化学实验在初中化学教学中的应用与优化策略论文.docx
- 小学生早餐饮食习惯对视力保护作用的研究与饮食习惯教育论文.docx
- 初中生艺术社团活动对学生社会责任感培养的实证研究论文.docx
- 小学数学课堂学生数学学习心理辅导策略创新研究论文.docx
- 劳动教育在学生劳动教育理论研究中的地位论文.docx
- 小学英语单元整体教学目标与多元智能理论的结合实践论文.docx
文档评论(0)