Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 在图中寻找X最小代价树_Algorithm_Optimization_Graph_Graph Algorithm - Fatal编程技术网

Algorithm 在图中寻找X最小代价树

Algorithm 在图中寻找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是房屋,边缘是未来电缆的候选点(每个都有一些建造成本) 仅就图像而言,这可能

我有一个有N个节点和边且有代价的图。(图形可能是完整的,但也可能包含零边)

我想在图中找到K棵树(K 有什么建议最好的方法是什么

我试图将问题改为只找到一棵最小生成树,但没有成功。 谢谢你的提示

编辑

小细节,这可能是重要的。成本与跨越边界无关。成本是建立这种优势的代价。构建edge后,您可以免费前后遍历它。问题不在于“穿越所有节点”,而在于“在所有节点之间创建一个网络”。我很抱歉先前的解释

故事 以下是我听到并试图解决的故事


有一座城市,没有通电。这家电气公司能够用电连接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是房屋,边缘是未来电缆的候选点(每个都有一些建造成本)

    仅就图像而言,这可能是解决方案