Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义数组的Java置换_Java_Arrays_Recursion_Permutation_Repeat - Fatal编程技术网

自定义数组的Java置换

自定义数组的Java置换,java,arrays,recursion,permutation,repeat,Java,Arrays,Recursion,Permutation,Repeat,目前,我正在制定一个计划,为我的田径比赛生成最佳设置。我有一些Person类的对象(当然是定制的),它们都有一个名称(-String)。 现在,我想生成所有可能设置的列表。把它看作是一组必须完成许多任务的人。示例(两个人,两项任务): Person1执行两项任务,Person1执行第一项任务,Person2执行第二项任务,Person2执行第一项任务,Person1执行第二项任务,Person2执行两项任务 现在我想用未知数量的“任务”和人员来解决这个问题,所以预先编程的循环对我来说并不是一个解

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

Person1执行两项任务,Person1执行第一项任务,Person2执行第二项任务,Person2执行第一项任务,Person1执行第二项任务,Person2执行两项任务

现在我想用未知数量的“任务”和人员来解决这个问题,所以预先编程的循环对我来说并不是一个解决方案。在我看来,递归是一种方法,但我还没有完全弄明白。 把这个设置看作是一个数组,我知道第一个标记是什么意思,所以只打印人的名字就可以了。(比如:
Person1、Person2
或其他什么。)


谢谢

理论上,你想要的不是排列,而是。 我找到了Java的现有实现:

编辑(关于评论):


这个问题甚至比重复组合更复杂。这里描述为

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


*大约

您可能需要研究树的数据结构。如果你做一个树的列表,并且考虑每棵树的根是一个人,每个后续的节点都是一个任务…这样你就可以遍历所有的树和节点,找到所有的组合可能性。

你说的“预编程循环”是什么意思?比如,我不能创建循环来遍历所有的可能性,因为我不知道会有多少个。你可以在for循环中使用数学表达式和函数调用,例如,
for(int i=0;i
;你不需要知道数字。从技术上讲,顺序很重要,所以对于三项任务来说,
Person1,Person2,Person1
Person1,Person1,Person2
是一种不同的解决方案。这不就是排列吗?不过,这个实现似乎很有用,所以谢谢!仅仅是顺序的重要性并不能让任何事情变得简单突变:)然而你是对的,重复的组合是不够的。我已经更新了答案,希望能有所帮助。我去年在大学编程课上就有过这样的经历。我要试试看。谢谢