【发布时间】: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(集合可以包含j 、j+1、j-1、j+2 或 j-2)。
我认为我不能足够快地完美解决这些问题。所以我想出了以下启发式方法:
- 大小的上限是每个组中每个集合的并集大小(上例中为 8)
- 大小的上限是每个组中最大集合的大小之和。 (上面的例子会给出 7)
- 大小上限为 min(heuristic1, heuristic2)
我认为没有一种有效的算法可以准确计算尺寸(尽管我很想被证明是错误的)。但是,如果有人能看到一个可以给出更严格界限(并且计算效率高)的启发式算法,那就太棒了。
编辑:对于我的特定用例,我只对上限感兴趣。我需要能够肯定地说大小不超过一个特定的数字,否则启发式对我来说毫无用处。
【问题讨论】:
标签: algorithm set heuristics