带加权边缘的最大分布
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) 的解决方案。
【讨论】:
以上是关于带加权边缘的最大分布的主要内容,如果未能解决你的问题,请参考以下文章