目前,我正在制作一个程序来为我的田径比赛生成最佳设置。我有类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
现在我想要使用未知数量的“任务”和人员,所以预先编程的循环看起来不像是我的解决方案。在我看来,递归是要走的路,但我还没弄明白。
将设置视为人员数组,我知道第一个指标意味着什么,所以只需打印人员名称即可。 (比如:Person1, Person2
或其他东西。)
谢谢!
答案 0 :(得分:1)
理论上,你想要的不是排列,而是combinations with repetitions。 我发现了Java的现有实现:http://code.google.com/p/combinatoricslib/
编辑(关于评论):问题比重复组合更复杂。这里将其描述为Partition of a set。
答案 1 :(得分:1)
您可能想要研究树木数据结构。如果你创建一个树列表,并认为每个树根是一个人,那么每个后续节点都是一个任务...所以这样你就可以遍历所有树和节点,找到所有组合的可能性。
答案 2 :(得分:0)
递归会完成这项工作,但请注意,它会在计算上变得非常快,所以我建议采用不同的方法,具体取决于您对这些信息的目标是什么。实际上,如果你的团队中有超过4或5个人,而且代码永远不会完成任务,那么它将变得不可行。
*约