prim和kruskal算法的正确性证明(贪心、最优子结构)

这篇具有很好参考价值的文章主要介绍了prim和kruskal算法的正确性证明(贪心、最优子结构)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

prim算法

贪心选择:

不失一般性,令起始节点为a,与a相连且度最小的另一节点为b,该边记作y,现证明y包括在某最优解中。令G为一颗最小生成树,

若其中包括y,算法正确性得证成立;若不包括y,则将y加入到G中,此时形成环,不考虑环以外节点,删除与a相邻另一条边c,删除后得新生成树G’,而,所以G'也一定为一颗最小生成树,算法正确性得证。

最优子结构:

不失一般性,设由prim算法得到的最小生成树为G,其中度最小的2个相邻节点为a,b,要证明最优子结构,此时需合并a,b为一个整体节点c,并删除连接a,b的边y,此时得到的新生成树记作G',若G'是最小生成树,原问题正确性得证;若G'不是最小生成树,则存在另一最小生成树G'',且,将G''的c节点重新扩展为a,b得到最小生成树G''',此时

克鲁斯卡尔最优子结构证明,算法,数据结构,动态规划

但G是最小生成树,所以该公式矛盾,依次类推得证prim算法正确性。

kruskal算法

贪心选择:

不失一般性,设Kruskal算法得到的树是G,假设令T为一颗最小生成树,若G=T原问题正确性已得证;若,G中至少有一条最小权值边在G中而不在T中,设该边为e,把e加入T中,此时形成环,再删掉环中不在G中的边f,得到新树T',若w(f) > w(e), 则T’的权值和小于T的权值和,与T是最小生成树矛盾;若w(f) < w(e), 说明Kruskal算法在考虑加入e之前先考虑了边f,之所以没加入f是因为f和之前加入的边形成环,之前加入的边权值显然不超过w(f) (因为加边是从小到大的顺序加入的),所以之前加入的边权值一定小于w(e)。而根据e的定义,G中权值小于w(e)的边都在T中,这说明T中的边会和f构成环,矛盾。所以只能w(f) = w(e),T’仍然是最小生成树,而T’和G相同的边多了一条。原问题正确性得证。

最优子结构:

不失一般性,设由Kruskal算法得到的最小生成树为G,其中权值最小的边为e,要证明最优子结构,此时需合并以e为边的两个节点a,b为一个整体节点c,并删除边e,此时得到的新生成树记作G',若G'是最小生成树,原问题正确性得证;若G'不是最小生成树,则存在另一最小生成树G'',且,将G''的c节点重新扩展为以e为边的两个节点a,b得到最小生成树G''',此时

克鲁斯卡尔最优子结构证明,算法,数据结构,动态规划

但G是最小生成树,所以该公式矛盾,依次类推得证Kruskal算法正确性。文章来源地址https://www.toymoban.com/news/detail-789096.html

到了这里,关于prim和kruskal算法的正确性证明(贪心、最优子结构)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【实际开发01】- 单元测试 ( 追求正确性 )

    目录 0. 单元测试 概念 / 解析 1. 为什么要进行单元测试 1. JUnit ~ @Test 2. IDEA 中使用 junit 单元测试 , 不能使用 Scanner 的解决方法 3. Junit 测试 Tutorial 1. daiding 4. @Test 修饰的方法必须 public 1. validatePublicVoidNoArgMethods(Test.class, false, errors); 2. public static void main(String[] args) {} ~ 程序入口

    2024年02月06日
    浏览(34)
  • 算法分析与设计-会场安排问题(贪心)(通俗易懂,附源码和图解,含贪心选择性质和最优子结构性质的证明)(c++)

    (一)题目 问题描述 假设在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排。(这个问题实际上是著名的图着色问题。若将每个活动作为图的一个顶点,不相容活动间用边相连。使相邻顶点有着不同颜色的最小着色数,相当于

    2024年02月07日
    浏览(86)
  • 7 Series FPGAs Transceivers Wizard(3.6) ip核接收数据正确性判断

    对于GTX/GTH Transceivers IP核接收端数据准确性可以通过rxstatus的状态来确定,当rxstatus的小于4时,rxdata数据为正确值,大于4时,rxdata往往是有错。详见7 Series FPGAs Transceivers Wizard(3.6)  datasheet P321.

    2024年01月23日
    浏览(41)
  • 使用Win10自带的PowerShell命令校验文件和镜像文件的Hash值(MD5、SHA1/256等)正确性

    通常为了保证我们从网上下载的文件的完整性和可靠性,我们把文件下载下来以后都会校验一下MD5值或SHA1值(例如验证下载的Win10 ISO镜像是否为原始文件),这一般都需要借助专门的MD5检验工具来完成。但其实使用Windows系统自带的Windows PowerShell运行命令即可进行文件MD5、S

    2024年02月16日
    浏览(41)
  • 最小生成树(Prim算法,Kruskal算法)

    (1)生成树: 如果在一个无向连通图不包含回路(连通图中不存在环),则为一个树 (2)最小生成树(minimal spanning tree): 在一个图所有生成树中,代价最小的生成树称为最小生成树 (3)生成树的代价: 在一个无向连通网中,生成树各边的权值之和称为该生成树的代价

    2024年02月08日
    浏览(43)
  • 实验13 prim算法和kruskal算法

    🔑一个神奇的哔哩哔哩讲解链接 🔑笔记补充——第十七章:贪婪算法(思想同,但应用上和伪代码略有差别) 使用prim算法实现最小生成树 输入 第一行两个整数n,e。n ( 1 ≤ n ≤ 200000 1 leq n leq 200000 1 ≤ n ≤ 200000 ) 代表图中点的个数,e ( 0 ≤ m ≤ 500000 0 leq m leq 500000 0 ≤

    2024年02月04日
    浏览(37)
  • 最小生成树(Prim算法与Kruskal算法)

    一个连通图的生成树是一个极小的连通子图,它含有图中全部的n个顶点,但只有足以构成一棵树的n-1条边。我们把构造连通网的最小代价生成树称为最小生成树。 例如下图中①、②、③都是左侧图的生成树,但③是构造连通网的最小代价,所以③是该图的最小生成树。 P

    2024年02月05日
    浏览(57)
  • 最小生成树—Kruskal算法和Prim算法

    连通图:在无向图中,若从顶点v1到顶点v2有路径,则称顶点v1与顶点v2是连通的。如果图中任 意一对顶点都是连通的,则称此图为连通图。 生成树:一个连通图的最小连通子图称作该图的生成树。有n个顶点的连通图的生成树有n个顶点 和n-1条边。 最小生成树:构成生成树的

    2024年02月05日
    浏览(46)
  • Prim算法和Kruskal算法到底哪个好?

    今天做了一道最小生成树的题,发现了一点猫腻! 题目在这里 : 《修路问题1》 Prim算法 和 Kruskal算法 都是从连通图中找出 最小生成树 的经典算法~ 从策略上来说, Prim算法是直接查找,多次寻找邻边的权重最小值 ,而 Kruskal是需要先对权重排序后查找的 ~ 所以说, Kru

    2024年02月05日
    浏览(32)
  • 图论13-最小生成树-Kruskal算法+Prim算法

    基本思想:按照权值从小到大的顺序选择 n-1 条边,并保证这 n-1 条边不构成回路 具体做法:首先构造一个只含 n 个顶点的森林,然后依权值从小到大从连通网中选择边加入到森林中,并使森林中 不产生 回路,直至森林变成一棵树为止。 2.2.1 如果图不联通,直接返回空,该

    2024年02月01日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包