0

目前,我正在开发一个程序,为我的田径比赛生成最佳设置。我有一些 Person 类的对象(当然是定制的),它们都有一个名称(-String)。现在,我想生成所有可能设置的列表。将其视为一组必须完成多项任务的人。示例(两个人,两个任务):

Person1 doing both tasks, Person1 doing first task and Person2 doing second, Person2 doing first task and Person1 doing second, Person2 doing both tasks

现在我想用未知数量的“任务”和人员来解决这个问题,所以预编程的循环对我来说似乎不是一个解决方案。在我看来,递归是要走的路,但我还没有完全弄清楚。将设置视为一个 Persons 数组,我知道第一个索引的含义,因此只需打印 Persons 的名称即可。(比如:Person1, Person2什么的。)

谢谢!

4

3 回答 3

1

从理论上讲,您想要的不是排列,而是与重复的组合。我找到了 Java 的现有实现:http ://code.google.com/p/combinatoricslib/

编辑(关于评论):

这个问题甚至比重复的组合还要复杂。它在这里被描述为一个集合的分区

于 2013-08-06T13:47:45.677 回答
1

您可能想研究树数据结构。如果您制作一个树列表,并考虑每个树根是一个人,那么每个后续节点都是一个任务......所以这样您就可以遍历所有树和节点,找到所有组合的可能性。

于 2013-08-06T13:52:47.997 回答
0

递归可以完成这项工作,但请注意,它很快就会在计算上变得不可行,因此我会建议一种不同的方法,具体取决于您对这些信息的目标是什么。实际上,如果您的团队中有超过 4 或 5 个人和超过几个任务,那么代码将永远无法完成。

*大约

于 2013-08-06T13:51:43.207 回答