带加权边缘的最大分布

Posted

技术标签:

【中文标题】带加权边缘的最大分布【英文标题】:maximum distribution with weighed edges 【发布时间】:2014-07-06 13:56:37 【问题描述】:

想象一个图,其中每个顶点都有一个值(例如,石头的数量)并通过边连接,这表示在石头中遍历该边的成本。我想找到尽可能多的石头,使得每个顶点 Vn >= 这个值。顶点可以与其他顶点交换石头,但交换的价值会减去距离或连接它们的边的权重

我需要以贪心算法和 O(n) 复杂度来解决这个问题,其中 n 是顶点的数量,但我在识别子问题/贪心选择时遇到了问题。我希望有人可以提供垫脚石或一些关于如何完成此任务的提示,非常感谢

【问题讨论】:

一些初步想法:顶点值的平均值是您可以达到的理论最大值。具有最小值的顶点决定了整体质量。也许这个顶点应该从最富有的邻居那里拿走石头?这可能不是那么微不足道(也不是O(n))。每次运输石头,最大质量都会降低edge_weight/n。在我的思考中,我一次又一次地偶然发现了寻路。也许 Dijkstra 的变体可能会有所帮助(Dijkstra 使用贪婪策略)。 是的,但在我看之前,我需要确定子问题,我还没有能够 【参考方案1】:

问题总结

我不确定我是否正确理解了这个问题,所以我先总结一下我的理解。

    我们有一个带有顶点 v1、v2、..、vn 和加权边的图。设 vi 和 vj 之间的权重为 W[i,j]

    每个顶点都以一些石头开始,让我们称顶点vi上的石头数量等于A[i]

    您希望执行多次传输以最大化 min(A[i] for i = 1..n) 的值

    如果 x>W[i,j],x 石头可以在 vi 和 vj 之间转移,这个操作将值转换为:

 A[i] -= x
 A[j] += x-W[i,j]  # Note fewer stones arrive than leave

这对吗?

响应

我相信这个问题是 NP 难的,因为它可以用来解决 3-SAT,一个已知的 NP 完全问题。

对于带有 M 子句的 3-sat 示例,例如:

(A+B+!C).(B+C+D)

构造一个有向图,每个子句有一个节点(没有石头),每个变量有一个节点,有3M+1个石头,每个变量有两个辅助节点,有1个石头(一个代表具有正值的变量, 1 表示具有负值的变量。

然后连接节点如下图:

当且仅当 3-sat 是可溶的,该图将有一个所有顶点的值 >= 1 的解。

关键是每个红色节点(例如对于变量 A)只能将石头发送到 A=1 或 A=0,但不能同时发送。如果我们向绿色节点 A=1 提供石头,那么该节点可以向所有积极使用该变量的蓝色子句提供石头。

(您最初的问题不涉及有向图,但我怀疑这种额外的更改会对问题的复杂性产生重大影响。)

总结

恐怕这个问题很难得到 O(n) 的解决方案。

【讨论】:

以上是关于带加权边缘的最大分布的主要内容,如果未能解决你的问题,请参考以下文章

秒懂边缘云 | 3场直播带你了解下个技术风口

秒懂边缘云 | 3场直播带你了解下个技术风口

秒懂边缘云 | 3场直播带你了解下个技术风口

StarlingX分布式云部署(抢鲜)

带加权的贝叶斯自举法 Weighted Bayesian Bootstrap

Min Cost Max Flow 算法,尽可能地关注所有边缘上的流量均等分布