是否存在解决此类问题的已知算法?

时间:2019-04-01 18:46:14

标签: algorithm

如果我有一个对象,该对象存储的数字数组小于N和权重。这些示例如下:

{1,2,4} -> 10
{1,4}   -> 5
{5}     -> 4
{3}     -> 8
{2}     -> 9

因此在这种情况下N为5。我的问题是我想找到权重的最大和,以使数组中的数字仅使用一次。例如,如果我想对与{1,2,4}和{1,4}对应的权重10和5求和,这将是非法的,因为它们都包含1。

愚蠢(错误的)算法会选择{1,2,4},然后选择{3},然后选择{5},得出22。在这种情况下,这不是答案。对此的扩展是,我们可以获得正确的答案26,然后找到下一个最大和,而无需考虑已选择的对象(在这种情况下为10)。

1 个答案:

答案 0 :(得分:3)

您所描述的听起来像maximum set packing problem。寻找最优解是NP完全的,但是存在可以找到近似解的算法。有关更多信息,请参见Wikipedia文章中的参考。另外,对于像问题中显示的问题一样小的问题,穷举搜索是微不足道的。