最小生成树变化算法

时间:2016-12-11 23:01:51

标签: algorithm minimum-spanning-tree

在接受采访时我被问到以下问题,我无法找到有效的解决方案。

问题在于:

  

我们想建立一个网络,我们给了n个节点和m个边。边缘   是双向的,我们知道边缘的成本。所有费用   边缘保持在数组C中,所以C [i,j]表示成本   边缘i-j。如果节点i,j没有连接,那么C [i,j]是无限的。

     

现在我们也知道确切的K个节点能够进行通信   无线到其他具有此属性的节点(用于无线)   传输)。要将无线技术设置到节点i,需要花费B [i]。所以   节点i为了使用无线传输到节点j的能力   这将花费B [i]将无线技术设置到节点i和   B [j]代表j。

     

所以问题是要找到构建它所需的最低成本   任何两个节点i,j可以通信的网络(将会有一个   连接它们的路径。)

     

作为路径,我们的意思是要么存在从节点i到j的边缘   或者我们也可以在支持的节点之间使用无线传输   它

很明显它被要求最小生成树但是难度是例如如果我们对节点i,j和k使用无线技术那么我们添加可能的边缘ij,ik,jk但是如果我们仅在i中使用,那么我们只有额外的边缘ij,因此边缘取决于我们选择用于无线传输的节点。

一个简单的例子:

假设我们有4 nodes3 edges C[1,2]=9 , C[1,3]=3 , C[3,4]=5(其他C[i,j] are infinite)。

节点2和3支持无线技术,设置成本B [2] = 2且B [3] = 1.

在此示例中,最低费用为:16 = 8 (for edge 1-3) + 5 (for edge 3-4) + 2 (for set up cost 2) + 1 (for set up cost in node 3).

如果我们没有在边缘2-3中使用无线技术然后建立网络,我们应该包含edge 1-2,费用为9,因此总费用为9+8+5 = 22.

我正在为这种最小生成树问题寻找一种有效的算法。任何帮助将不胜感激,谢谢你的时间!!

1 个答案:

答案 0 :(得分:2)

首先解决最小生成树问题,为您提供尝试击败的现任答案。

现在,创建与原始图形相同的另一个图形,向该网络添加新节点。将所有K个节点连接到边缘权重等于B [i]的新节点。此边缘表示向节点i添加无线的成本。现在找到新图的最小生成树。节点现在可以通过此节点连接为" wifi"。

(我假设他们告诉你哪些K节点支持wifi,而不是你必须选择N个节点中的K,否则如果这个新的最小生成树有超过K个连接的话,你会遇到问题新节点))。