我有一个元素列表,我想要一个对象,它给了我所有可能的方法将这些元素分成给定数量的相同大小的组.
例如,这是我的清单:
MyElements <- c(1,2,3,4)
Run Code Online (Sandbox Code Playgroud)
我希望所有可能的组合将它们分成两组:
nb.groups <- 2
Run Code Online (Sandbox Code Playgroud)
答案可能是这样的:
[[1]]
[1] 1,2
[2] 3,4
[[2]]
[1] 1,3
[2] 2,4
[[3]]
[1] 2,3
[2] 1,4
Run Code Online (Sandbox Code Playgroud)
我想避免重复那种:
[[1]]
[1] 1,2
[2] 3,4
[[2]]
[1] 3,4
[2] 1,2
Run Code Online (Sandbox Code Playgroud)
非常感谢 !
谢谢你的回答.我想我应该给你更多关于我想要实现的信息.
列表(或矢量,因为显然MyElements是一个向量)实际上是个人的ID号.我想要一个列出所有可能的方法,将这些个体分成所需数量的组,这些组都具有相同的大小.
如果我没有弄错的话,目前唯一可行的解决办法就是朱巴所谓的暴力和肮脏的解决方案.但正如朱巴所说,它很快(为了我的目的太快了!)无法使用.
再次感谢
给定 n 个用户 (u_1, u_2,..., u_n) 和 k 个组 (g_1, g_2, ..., g_k),创建所有组的所有可能组合。基本上,最后每个组合都是一个Map<Integer,Integer>,其中第一个Integer是用户ID,第二个Integer是组ID。例如,[(u_1,g_1), (u_2,g_1).. ..,(u_n, g_1)] 是一种可能的组合。
将有 k^n 个组合。
我搜索并看到了类似的问题,但他们确实有一些不适用于我的问题的额外条件。就我而言,每组都没有限制,也没有均匀分布。
您能建议一种在 Java 中执行此操作的快速方法吗?
谢谢
到目前为止我的尝试:我尝试为每个用户的每种可能性创建一个 for 循环,但我面临无法定义 for 循环次数的问题。
所以我切换到递归,但坚持为函数的内部调用创建参数。不过仍在努力。
请注意,这不是“n 选择 k”。“n选k”是指所有用户都相同的情况,但这里的用户显然不相同。
好的。我为此创建了一个解决方案。基本上,这是一个动态规划问题。假设您已经为 j 个用户和 k 个位置创建了一个地图列表(组合)。要为 j+1 个用户和 k 个位置创建,需要 2 个循环:对于每个 Map,对于每个 i=1 到 k,Map.put(user_j+1, k))。Is 既是递归的又是迭代的。递归,因为您需要将旧地图传递给新的迭代。就是这样。