【发布时间】:2021-08-19 07:20:52
【问题描述】:
我有一组集合S[i],我需要从每个对应集合中挑选C[i] 项目。有些物品可能同时属于多个套装,不允许两次选择同一个物品。
这里有一个更好解释的例子:
Set #1 [b, c, d, e], pick 2
Set #2 [a, b, c], pick 2
Set #3 [w, x, y, z], pick 1
Set #4 [a, d, e], pick 1
其中一个解决方案是:
Set #1 [b, d]
Set #2 [a, c]
Set #3 [x]
Set #4 [e]
我不需要找到所有可能的解决方案,只要满足上述条件的任何一个即可。
我的问题是:除了暴力破解所有可能的组合直到我找到一个之外,还有更好的方法吗?显然,贪心算法不起作用(为 set #1 选择 [b, c] 将无法从 set #2 中选择 2 个项目)。是否存在其他选择?我的问题是否等同于某个众所周知的问题?
如果蛮力是唯一的选择,那么实施它以避免陷入死胡同的最佳方法是什么?例如。如果我选择:
Set #1 [b, e]
Set #2 [a, d]
尝试第 3 组的所有可能组合是没有用的,因为从第 4 组中选择任何组合已经不可能了。
【问题讨论】:
-
递归+回溯可以工作。如,递归地尝试检查所有组合,并在每个步骤中检查是否有可能的解决方案。如果不是,则返回上一步并继续下一个组合。
-
这基本上是蛮力,对吧?不知道有没有更好的方法
-
看起来像这里描述的广义二分匹配simons.berkeley.edu/sites/default/files/docs/831/…,其中集合和元素是分区。
-
是的,这可以变成一个简单的二分匹配问题,只需复制你必须从中选择两个的集合。
-
@n.'pronouns'm。您为什么不发布答案以便我接受?听起来我可以用这个? en.wikipedia.org/wiki/Hopcroft%E2%80%93Karp_algorithm
标签: algorithm computer-science