一个组包含一组实体,每个实体都有一个值。
每个实体可以是多个组的一部分。
问题: 找到最大的N个组,其中每个实体在结果中只出现一次。如果必要,可以将一个实体从组中排除。
Example:
Entities with values:
A = 2
B = 2
C = 2
D = 3
E = 3
Groups
1: (A,B,C) total value: 2+2+2 = 6
2: (B,D) total value: 2 + 3 = 5
3: (C,E) total value: 2 + 3 = 5
4: (D) total value: 3
5: (E) total value: 3
**Answers**:
Largest 1 group is obviously (A,B,C) with total value 6
Largest 2 groups are (B,D), (C,E) with total value 10
Largest 3 groups are either {(A,B,C),(D),(E)}, {(A,B),(C,E),(D)} or {(A,C), (B,D), (E)} with total value 12
该算法的输入数据应包括:
- 一组带有值的实体 - 包含一个或多个实体的组 - 结果中所需的组的数量
如果有多个答案,则找到其中一个即可。
为了使问题更加清晰,我附带了一个示例。在实践中,实体的数量应小于大约50,并且组的数量应小于实体的数量。要查找的N组数量将介于1和10之间。
目前,我通过生成所有可能的N组组合来解决这个问题,排除包含重复实体的结果,然后选择总值最大的组合。这当然是极其低效的,但我不能理解如何以更高效的方式获得通用结果。
我的问题是是否有可能以更高效的方式解决这个问题,如果可以,该如何解决?任何提示或答案都将不胜感激。
编辑: 需要说明的是,在我的解决方案中,我生成了“虚假”组,其中从“真正”的组中排除了重复的实体。在此示例中,实体(B、C、D、E)是重复的(存在于多个组中)。然后,对于第一组(A、B、C),我将(A、B)、(A、C)和(A)等虚假组添加到我生成的组合列表中。