【问题标题】:Find k vertices in a tree to cover the maximum number of edges在树中找到k个顶点以覆盖最大边数
【发布时间】:2016-02-25 01:01:06
【问题描述】:

我的想法很贪心。

我将 E[i] 维持为与顶点 i 相连的边数。

Repeat following k times:

    Every time I extract largest E[k] and add vertex k to the result set, and I decrease E[t] by 1 for every vertex t adjacent to k.

    Set E[k] = 0;

但是,我不知道我的想法是否正确..而且我不知道如何证明它。

如果不是,解决这个问题的正确方法是什么?

【问题讨论】:

  • 如果您在 cs.stackexchange.com 上提出此类问题,我认为您会得到更好的答案
  • 我同意 sudomakeinstall2。但是这个问题听起来 NP 很难,这意味着贪婪的方法行不通。
  • 哎呀...但实际上这个问题需要我在 O(k^2*n) 时间内解决。谢谢您的信息!我昨天在数学上发布了这个问题,也没有人回复..
  • @Tipton 我认为这种方法不正确。当提取 K 个节点后,这些节点都没有与该子图中的任何其他节点连接时会发生什么?确切地说,你找到了一个没有边的子图。

标签: algorithm dynamic-programming graph-algorithm greedy


【解决方案1】:

这种贪婪的方法不正确

假设您被要求计算最大边数 下图中4个节点可以覆盖(k = 4):

您的算法将选择 节点 1,然后从 {2,3,4,5} 中挑选 3 个节点。

通过此选择,您将覆盖 7 条边,而您可以选择节点 2、3、4 和 5 并覆盖所有 8 条边!

【讨论】:

    猜你喜欢
    • 2018-09-26
    • 2011-03-29
    • 2013-09-04
    • 2017-10-17
    • 1970-01-01
    • 2015-02-15
    • 2020-04-22
    • 2012-09-09
    • 1970-01-01
    相关资源
    最近更新 更多