在接受采访时我被问到以下问题,我无法找到有效的解决方案。
问题在于:
我们想建立一个网络,我们给了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 nodes
和3 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.
我正在为这种最小生成树问题寻找一种有效的算法。任何帮助将不胜感激,谢谢你的时间!!
答案 0 :(得分:2)
首先解决最小生成树问题,为您提供尝试击败的现任答案。
现在,创建与原始图形相同的另一个图形,向该网络添加新节点。将所有K个节点连接到边缘权重等于B [i]的新节点。此边缘表示向节点i添加无线的成本。现在找到新图的最小生成树。节点现在可以通过此节点连接为" wifi"。
(我假设他们告诉你哪些K节点支持wifi,而不是你必须选择N个节点中的K,否则如果这个新的最小生成树有超过K个连接的话,你会遇到问题新节点))。