【问题标题】:Heuristic for Maximum Coverage variant最大覆盖变体的启发式
【发布时间】:2015-07-25 01:22:53
【问题描述】:

我有以下问题: 有N组。每个组都是集合的集合。 目标是从 N 个组中的每个组中准确选择一个集合,以使作为所有选择的并集的集合的大小最大化。 每组中的集合数不一定相同,但有界是由某个数 M 限制的。

例如,

1. {6, 7, 8}, {10} 
2. {6,7}, {8,9} 
3. {10}, {1,2}, {99}

实际答案为6,因为您可以从1 中选择{6,7,8},从2 中选择{8,9},从3 中选择{1,2},从而使联合{1,2,6,7,8,9} 的大小为6

在我的特定领域中,问题结构始终遵循以下规则: N 从 1 到 2000 不等。集合中的数字从 1 到 50。单个集合的最大大小为 5,并且给定集合中任何两个数字之间的绝对差不能超过 2(集合可以包含jj+1j-1j+2j-2)。

我认为我不能足够快地完美解决这些问题。所以我想出了以下启发式方法:

  1. 大小的上限是每个组中每个集合的并集大小(上例中为 8)
  2. 大小的上限是每个组中最大集合的大小之和。 (上面的例子会给出 7)
  3. 大小上限为 min(heuristic1, heuristic2)

我认为没有一种有效的算法可以准确计算尺寸(尽管我很想被证明是错误的)。但是,如果有人能看到一个可以给出更严格界限(并且计算效率高)的启发式算法,那就太棒了。

编辑:对于我的特定用例,我只对上限感兴趣。我需要能够肯定地说大小不超过一个特定的数字,否则启发式对我来说毫无用处。

【问题讨论】:

    标签: algorithm set heuristics


    【解决方案1】:

    可以利用的组和集合之间是否存在任何关系?

    如果不是,那么使用一个简单的贪心算法怎么样,从空集开始,然后为每个组添加当前解决方案中没有的元素最多的集合:

    1. T = {∅}, N = 1
    2. 选择集Sk ∈ {S1, ..., SM} 在组 N 这样Sk = ma​​xi(|Si sub> \ T|)
    3. T = TSk
    4. 如果最后一个组退出,否则 N = N + 1 并转到步骤 2。

    答案显然取决于几个问题:

    • 初始组
    • 处理组的顺序
    • ma​​x 不唯一时选择 Sk

    要缓解这些问题,您可以跟踪多个解决方案T。例如,在每一步都保留前 2 或 3 个解决方案。然后在退出时保持最大的解决方案。

    【讨论】:

    • 谢谢。是的,这是个好主意。但是(我很抱歉,但我完全忘记在最初的问题发布中提到这一点)我实际上只是在寻找上限,这似乎是一个下限。
    猜你喜欢
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 2014-02-02
    • 2018-10-27
    相关资源
    最近更新 更多