Algorithm 在图中寻找X最小代价树
我有一个有N个节点和边且有代价的图。(图形可能是完整的,但也可能包含零边) 我想在图中找到K棵树(KAlgorithm 在图中寻找X最小代价树,algorithm,optimization,graph,graph-algorithm,Algorithm,Optimization,Graph,Graph Algorithm,我有一个有N个节点和边且有代价的图。(图形可能是完整的,但也可能包含零边) 我想在图中找到K棵树(K2,它真的与X=2相同,但我必须测试每个(X-1)元组连接到PP并计算MST 对于MST的x^2,我的复杂性约为(N除以x-1)*x^2。。。相当复杂,但我认为它会给我最佳的解决方案 你觉得怎么样 编辑随机节点我指的是随机但固定的节点 尝试可视化x=2(每个描述都属于其上方的图像) 让这座城市成为我们的城市,节点A-F是房屋,边缘是未来电缆的候选点(每个都有一些建造成本) 仅就图像而言,这可能
有一座城市,没有通电。这家电气公司能够用电连接K座房屋。其他房屋可以通过从已经连接的房屋中放下电缆来连接。但是丢掉这条电缆要付出一些代价。目标是选择将直接连接到发电厂的K个房屋,以及将使用单独的电缆连接的房屋,以确保最低的电缆成本和所有房屋的覆盖率:)假设您可以使用prim算法在
O(V^2)
中找到最小生成树
对于每个顶点,找到以该顶点为根的最小生成树
当您运行算法V次时,这将是O(V^3)
按图形的总质量(顶点的权重之和)对其排序。这是O(V^2 lg V)
,它被O(V^3)
消耗,因此在顺序复杂性方面基本上是免费的
以X最小质量图为例——这些图的根是直接连接到网格的“锚”,因为它们最有可能具有最短路径。要确定它所采用的路径,只需在每个树中的每个节点中沿着根路径,并连接最短的路径即可。(这可以通过对到根目录的所有路径进行排序并首先使用最短的路径来进一步优化。这将允许在下一次迭代中进行优化。查找到根目录的路径是O(V)
。在所有vx次中查找路径是O(V^2*X)
。因为您将对每个V执行此操作,所以您正在查找O(V^3*X)
。这比您最大的复杂度还高,但我认为,即使最坏的情况很大,这些问题的平均情况也会很小)
我无法证明这是最佳解决方案。事实上,我肯定不是。但是当你考虑一个100000个家庭的电网时,你不能考虑(任何实际的应用)一个NP难的解决方案。这给了你一个非常好的O(V^3*X)解,我想这会给你一个非常接近最优的解。听起来像著名的旅行商问题。这个问题是众所周知的NP难问题。以维基百科为出发点:您描述的是一种类似基数约束的东西。它属于旅行商/车辆路径问题族,是NP难问题。要创建算法,您应该询问
正如其他人所提到的,这是NP难的。然而,如果你愿意接受一个好的解决方案,你可以使用模拟退火。例如,旅行商问题是NP难问题,但可以使用模拟退火找到近似最优解,例如。看看你的故事,我认为你所说的路径可以是一棵树,这意味着我们不必担心哈密顿电路
查找Primm算法的正确性证明,考虑采用最小生成树和移除最昂贵的X-1链路。我认为那里的证据表明,结果与你的问题的最佳答案具有相同的成本:唯一的区别是,当你比较边时,你可能会发现新边连接了两个分离的组件,但在这种情况下,您可以通过移除一条边来保持分离组件的数量,其成本最高为新边的成本
所以我认为解决你的问题的一个办法是取一个最小生成树并删除X-1最昂贵的链接。对于X=1,情况确实如此 以下是解决此问题的尝试 对于X=1,我可以使用Prim算法从每个节点(该节点是唯一连接到网格的节点)计算最小生成树(MST),并选择总体成本最低的节点 对于X=2,我在图形旁边创建额外的节点(发电厂节点)。我将其与随机节点(如N0)按边连接,成本为0。我现在确定我有一个发电站插头(随机节点肯定会在树的其中一个,所以整个树都会连接起来)。现在是迭代部分。我取另一个节点(如N1),再次连接到PP,成本优势为0。现在我计算MST。然后重复这个过程,用N2,N3替换N1。。。 所以我将测试每一对[N0,NX]。成本最低的MST获胜 对于X>2,它真的与X=2相同,但我必须测试每个(X-1)元组连接到PP并计算MST 对于MST的x^2,我的复杂性约为(N除以x-1)*x^2。。。相当复杂,但我认为它会给我最佳的解决方案 你觉得怎么样 编辑随机节点我指的是随机但固定的节点 尝试可视化x=2(每个描述都属于其上方的图像) 让这座城市成为我们的城市,节点A-F是房屋,边缘是未来电缆的候选点(每个都有一些建造成本) 仅就图像而言,这可能是解决方案 让