[图] 最小生成树-Prime算法和Kruskal算法

 我来答
大沈他次苹0B
2022-06-20 · TA获得超过7258个赞
知道大有可为答主
回答量:3059
采纳率:100%
帮助的人:169万
展开全部

普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(英语:Vojtěch Jarník)发现;并在1957年由美国计算机科学家罗伯特·普里姆(英语:Robert C. Prim)独立发现;1959年,艾兹格·迪科斯彻再次发现了该算法。因此,在某些场合,普里姆算法又被称为DJP算法、亚尔尼克算法或普里姆-亚尔尼克算法。

4 .输出:使用集合 V new 和 E new 来描述所得到的最小生成树。

下面对算法的图例描述

反证法:假设prim生成的不是最小生成树

这里记顶点数v,边数e

邻接矩阵:O(v 2 )
邻接表:O(e * log 2 v)

Kruskal算法是一种用来寻找最小生成树的算法,由Joseph Kruskal在1956年发表。用来解决同样问题的还有 Prime 算法和 Boruvka 算法等。三种算法都是贪婪算法的应用。和 Boruvka 算法不同的地方是,Kruskal 算法在图中存在相同权值的边时也有效。

图例描述:

对图的顶点数 n 做归纳,证明 Kruskal 算法对任意 n 阶图适用。

归纳基础:

n = 1,显然能够找到最小生成树。

归纳过程:

假设 Kruskal 算法对 n ≤ k 阶图适用,那么,在 k + 1 阶图 G 中,我们把最短边的两个端点 a 和 b 做一个合并操作,即把 u 与 v 合为一个点 v',把原来接在 u 和 v 的边都接到 v' 上去,这样就能够得到一个 k阶图 G'(u ,v 的合并是 k + 1 少一条边),G' 最小生成树 T' 可以用Kruskal 算法得到。

我们证明 T' + {<u,v>} 是 G 的最小生成树。

用反证法,如果 T' + {<u,v>} 不是最小生成树,最小生成树是 T,即W(T) < W(T' + {<u,v>})。显然 T 应该包含 <u,v>,否则,可以用<u,v> 加入到 T 中,形成一个环,删除环上原有的任意一条边,形成一棵更小权值的生成树。而T - {<u,v>},是 G' 的生成树。所以 W(T-{<u,v>}) <= W(T'),也就是 W(T) <= W(T') + W(<u,v>) = W(T'+{<u,v>}),产生了矛盾。于是假设不成立,T' + {<u,v>}是 G 的最小生成树,Kruskal 算法对 k+1 阶图也适用。

由数学归纳法,Kruskal 算法得证。

e * log 2 e (e为图中的边数)

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式