我最近被问到是否可以找到一种算法来计算给定图的最小成本生成树,其中生成树的总成本由边成本的乘积而不是它们的总和给出。
有几个算法可以计算常规的minium生成树,但我不确定如何针对上述情况调整它们。有什么想法吗?
谢谢。
答案 0 :(得分:17)
由于log(边缘成本的乘积)= sum(log(边缘成本)),只需对边权重进行对数变换,并找到这些权重的最小成本生成树。
答案 1 :(得分:4)
由于对数是单调变换,因此当您获取所有权重的对数并且按照它们的方式保留所有权重时,最小生成树将完全相同。 所以:根据所有权重的总和并根据所有权重的乘积找到MST没有区别。
对于证明事实的文章 那 图的最小生成树 对于格子中权重的单调变换是不变的, 类型 最小生成树的传奇 在谷歌。 第一个链接将是您需要的链接。 第167页,单调同构。
答案 2 :(得分:0)
我的最佳想法 - 通过蛮力找到跨越树木的所有最小(意味着不必要的边缘),选择具有最小产品的树。
大多数(或所有)更有效的解决方案不再适用 - 主要是最佳解决方案不再需要包含最佳子问题。 (有什么限制?非常重要 - 成本小于1的边缘实际上是负成本,长度1的边缘是免费的。它们更好是积极的!)
我不确定这个问题是否真的有意义。首先,您必须给出自我循环成本(或假设为1),因为我们不能将产品归零。分割路径的工作方式不同,两次相同的路径行驶成本c ^ 2?此外,我觉得这应该是一个与'cost'不同名称的路径的不同质量