首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >最小方差生成树的多项式时间算法

最小方差生成树的多项式时间算法
EN

Stack Overflow用户
提问于 2015-03-28 14:14:40
回答 1查看 773关注 0票数 3

让我们将图的方差定义为其边权值的方差。我想要解决的任务是设计一个算法,给出一个图G将构造一个最小方差的生成树T。

我很难在这件事上把事情搞清楚。到目前为止,我已经注意到,如果这样的生成树中的平均边权已知,那么这个问题可以通过将每条边的权重替换为其偏差的平方、平均权重并将图输入到任何MST查找算法中来解决。

显然,我对我试图构造的树中的平均边缘权重一无所知,但是我想到,平均值必须落在G的两个边之间,也许可以利用这些信息。

我试图把这个问题减少到用修正的边权值求G的MST。我考虑了对G的每个边运行一个算法,每次假设初始边是T中最接近平均值的,给定的权重为0,而其他边的权重等于它们与初始边的权重的平方。这种方法没有结果,因为如果平均值不等于其中一条边的权重,那么根据它在两个最近边的权重之间的位置,根据它们的权重排序将是不同的,当输入MST查找算法时,会产生不同的生成树。这是我不知道如何处理的事情(或者它是否可以被处理)。

这是家庭作业,所以我更愿意给我一个小提示,让我朝着正确的方向前进,而不是一个解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-28 15:14:00

想法1:当你构建最小权重生成树时,你只需要两两比较边。

想法2:

重量的边x和重量边y的两两比较,当你把重量和猜测g之间的差平方时,只会在g=(x+y)/2上发生变化。

想法3:

如果有x-E的边,则对平均权重,最多有(x-E-选择2)+1 --本质上不同的猜测g。计算其中每一个的最小权重生成树。比较这些树的差异。

应该有更快的方法,但这是一个多项式时间算法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29323243

复制
相关文章
Prim算法生成最小生成树
由一个带权值的联通图到一个最小生成树的过程,其实就是从图的所有边中挑出一部分边用来组成树的过程,所以关键在于如何挑选边。
叶茂林
2023/07/30
1930
Prim算法生成最小生成树
最小生成树的个数_最小生成树的两种算法
设最小生成树的边权之和为 sum,严格次小生成树就是指边权之和大于 sum 的生成树中最小的一个。
全栈程序员站长
2022/09/22
9800
最小生成树的Kruskal算法
定义: 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。[1] 最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出。 Kruskal算法简述: 假设 WN=(V,{E}) 是一个含有 n 个顶点的连通网,则按照克鲁斯卡尔算法构造最小生成树的过程为:先构造一个只含 n 个顶点,而边集为空的子图,若将该子图中各个顶点看成是各棵树上的根结点,则它是一个含有 n 棵树的一个森林。之后,从网的边集 E 中选取一条权值最小的
用户3577892
2020/06/12
2K0
图的最小生成树算法
在上一篇文章中,我们看了一下图的遍历算法,主要是对图的深度优先遍历和图的广度优先遍历算法思想的介绍。接下来让我们来看一下图的最小声成树算法。
指点
2019/01/18
2.6K0
图的最小生成树算法
Prim算法-最小生成树
基本思想: 1 置S={1} 2 只要S是V的真子集就做如下的贪心选择:   选取满足条件的i ,i属于S,j输入V-S,且c[i][j]最小的边,并将定点j加入S中   这个过程直到S==V为止。 3 这个过程所选的边,恰好就是最小生成树 算法描述: void Prim(int n,Type * * c) { T = 空集; S = {1}; while(S != V) { (i,j)=i 属于 S 且 j属于V-S的最小权边; T = T∪
用户1154259
2018/01/17
2.6K0
Kruskal算法-最小生成树
算法思想: 1 将G的n个顶点看成n个孤立的连通分支,所有的边按权从小到大排序 2 当查看到第k条边时,   如果断点v和w分别是当前的两个不同的连通分支t1和t2中的顶点时,就用边(v,m)j将t1,t2连接成一个连通分支,然后继续查看第k+1条边;   如果端点v和w当前的同一个连通分支中,就直接查看第k+1条边 实现代码: template <class Type> class EdgeNode{ friend ostream& operator<<(ostream&,EdgeNode<Typ
用户1154259
2018/01/17
2.1K0
Kruscal(最小生成树)算法模版
1 const int maxn=400;//最大点数 2 const int maxm=10000;//最大边数 3 int n,m;//n表示点数,m表示边数 4 struct edge{int u,v,w;} e[maxm];//u,v,w分别表示该边的两个顶点和权值 5 bool cmp(edge a,edge b) 6 { 7 return a.w<b.w; 8 } 9 int fa[maxn];//因为需要用到并查集来判断两个顶点是否属于同一个连通块 10 int fi
Angel_Kitty
2018/04/09
1.4K0
图算法|Prim算法求最小生成树
01 — 一个实际问题 要在n个城市之间铺设光缆,要求有2个: 这 n 个城市的任意两个之间都可以通信; 铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同,因此要使铺设光缆的总费用最低。 如下所示
double
2018/04/02
4K0
图算法|Prim算法求最小生成树
最小生成树(Kruskal算法和Prim算法)
上一篇文章,我们讲了图的创建和遍历,其中遍历的算法主要有BFS(广度优先算法)和DFS(深度优先算法)两种,并且DFS算法对很多问题都有很好的启示!而今天我们要说一个非常实用的算法——最小生成树的建立!这是图论中一个经典问题,可以使用Kruskal和Prim两种算法来进行实现!
算法工程师之路
2019/08/05
5.4K0
最小生成树-Prim算法和Kruskal算法
Prim算法 1.概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(英语:Vojtěch Jarník)发现;并在1957年由美国计算机科学家罗伯特·普里姆(英语:Robert C. Prim)独立发现;1959年,艾兹格·迪科斯彻再次发现了该算法。因此,在某些场合,普里姆算
用户1215536
2018/02/05
3.8K0
最小生成树-Prim算法和Kruskal算法
最小生成树算法:Kruskal 与 Prim算法
连通图中的每一棵生成树,都是原图的一个极大无环子图,即:从其中删去任何一条边,生成树就不再连通;反之,在其中引入任何一条新边,都会形成一条回路。
利刃大大
2023/04/12
2K0
最小生成树算法:Kruskal 与 Prim算法
最小生成树的个数_最小生成树的实际应用
设最小生成树的边权之和为 sum,严格次小生成树就是指边权之和大于 sum 的生成树中最小的一个。
全栈程序员站长
2022/09/22
5640
贪心算法(四)——最小代价生成树
问题描述 n个村庄间架设通信线路,每个村庄间的距离不同,如何架设最节省开销? 这个问题中,村庄可以抽象成节点,村庄之间的距离抽象成带权值的边,要求最节约的架设方案其实就是求如何使用最少的边、最小的权值和将图中所有的节点连接起来。 这就是一个最小代价生成树的问题,可以用Prim算法或kruskal算法解决。 PS1:无向连通图的生成树是一个极小连通子图。 PS2:生成树是图的一个子图,包括所有的顶点和最少的边(n-1条边)。 PS3:最小代价生成树就是所有生成树中权值之和最小的那个。 算法思路 算
大闲人柴毛毛
2018/03/09
3K0
贪心算法(四)——最小代价生成树
最小生成树(MTS)之Kruskal算法
常见的数据结构中树的应用较多一些,在树的节点关系中称之为父子关系,而在一些特定场景下图能更清晰表达。
疯狂的KK
2022/05/31
1.6K0
最小生成树(MTS)之Kruskal算法
深度优先算法与最小生成树
深度优先搜索(DFS),可以被形象的描述为“打破沙锅问到底”,具体一点就是访问一个顶点之后,我继而访问它的下一个邻接的顶点,如此往复,直到当前顶点一被访问或者它不存在邻接的顶点。 以下为深度优先算法的规则 规则1、:访问一个邻接的未访问的节点,标记它,并把它放入栈中 规则2、当不能执行规则1是,从栈弹出一个顶点 规则3、如果不能完成规则1 规则2则完成搜索 对于最小生成树,和深度优先算法相似,具体区别是多一个记录,如下mst方法 /** * */ package com.xzg.heap; /*
用户1418372
2018/10/10
9960
图论-最小生成树prim算法(Java)
最小生成树需要一个加权连通图,连通图就是所有顶点都是连在一起的,从任意一个顶点,都能到达除本身外任意一个顶点 prim算法:将顶点分成两个集合 U和 V,U用来存放每次遍历得到的与U中顶点最小路径的邻接顶点,V用来存放U中没有的顶点。U初始化存放任意一个顶点,每次从V中遍历得到与U集合中的顶点最小路径的顶点后,放入U,将V中的对应顶点删除,当U存放到所有顶点后,最小生成树就得到了。 利用之前的类实现prim算法:
aruba
2021/12/06
1.2K0
图论-最小生成树prim算法(Java)
图论-最小生成树kruskal算法(Java)
和prim算法以顶点为出发点不同,kruskal算法以边为中心,将所有边以小到大排序,遍历边,如果当前边的两个顶点有一个没有访问过,则记录该边,直到记录的边到达顶点数-1时,即所有顶点都可以相连,为最小生成树 实现代码:
aruba
2021/12/06
8070
图论-最小生成树kruskal算法(Java)
最小生成树之Prim算法和Kruskal算法
一个连通图可能有多棵生成树,而最小生成树是一副连通加权无向图中一颗权值最小的生成树,它可以根据Prim算法和Kruskal算法得出,这两个算法分别从点和边的角度来解决。
业余草
2019/01/21
1.8K0
最小生成树之Prim算法和Kruskal算法
最小生成树(Prim算法和Kruskal算法算法详解)
通俗易懂的讲就是最小生成树包含原图的所有节点而只用最少的边和最小的权值距离。因为n个节点最少需要n-1个边联通,而距离就需要采取某种策略选择恰当的边。
bigsai
2019/10/21
3.9K0
最小生成树(Prim算法和Kruskal算法算法详解)
最小生成树----prim算法----普利姆算法
生成树的概念 最小生成树的定义 生成树的代价和最小生成树 MST性质 普利姆(prim)算法 图解: 使用哪一种结构进行存储? 数据结构设计 伪代码 实例 #include<iostream>
大忽悠爱学习
2021/03/23
2.2K0
最小生成树----prim算法----普利姆算法

相似问题

最小生成树算法

14

最小直径生成树算法

13

最小生成树算法变异

24

最快最小生成树算法

22

并行最小生成树算法

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文