我遇到了一个问题,我认为这是背包问题的一个变种。基本上我有一个大小为A的集合,我必须从中选择大小为n的组的最佳组合。组内项目的顺序无关紧要。同样,组的顺序也无关紧要。
因此,这两组人群将被视为等同:
{ a, b }, { a, c }
{ c, a }, { a, b }
例如,集合A = {a,a,b,b,c}和n = 2会给出这些组合:
{ a, a }, { b, b }
{ a, a }, { b, c }
{ a, b }, { a, b }
{ a, b }, { a, c }
{ a, c }, { b, b }
从这些组中我选择具有最佳价值的组。我一直在采取一些蛮力的方法解决这个问题,但我很快就遇到了性能问题。我的策略基本上包括以下步骤:
对于一组非常好的5或6个项目,排列的数量仍然非常易于管理。在那之后,事情变得无法控制,排列的数量是s!。
我可以使用一些关于如何以更有效的方式解决这个问题的指示。