【发布时间】:2014-07-06 13:56:37
【问题描述】:
想象一个图,其中每个顶点都有一个值(例如,石头的数量)并通过边连接,这表示在石头中遍历该边的成本。我想找到尽可能多的石头,使得每个顶点 Vn >= 这个值。顶点可以与其他顶点交换石头,但交换的价值会减去距离或连接它们的边的权重
我需要以贪心算法和 O(n) 复杂度来解决这个问题,其中 n 是顶点的数量,但我在识别子问题/贪心选择时遇到了问题。我希望有人可以提供垫脚石或一些关于如何完成此任务的提示,非常感谢
【问题讨论】:
-
一些初步想法:顶点值的平均值是您可以达到的理论最大值。具有最小值的顶点决定了整体质量。也许这个顶点应该从最富有的邻居那里拿走石头?这可能不是那么微不足道(也不是
O(n))。每次运输石头,最大质量都会降低edge_weight/n。在我的思考中,我一次又一次地偶然发现了寻路。也许 Dijkstra 的变体可能会有所帮助(Dijkstra 使用贪婪策略)。 -
是的,但在我看之前,我需要确定子问题,我还没有能够