我正在使用R来生成在其中复制的向量的排列.
在生成排列时,我使用数字来表示组.这是我能为小家伙做的事情:
unlist(unique(permn(c(1,1,2,2,3,3,4,4), paste0, collapse = "")))
Run Code Online (Sandbox Code Playgroud)
返回2520个排列的矢量(8!/ 2 ^ 4)
问题是我正在尝试将其向上滚动到11,以便我可以获得16选11的每个独特排列.为了得到我所做的每一个组合:
combs = unique(combn(c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4),11, paste0, collapse = ""))
Run Code Online (Sandbox Code Playgroud)
然后迭代它们并将它们粘贴在一起以获得所有独特的16种选择11种排列.
听起来像一个巨大的数字?
事实并非如此.理论上它是525,525行(16!/ 5!4!4!4!4!)问题是这种方法必须以3900万(11!)的组计算所有174356582400行(大约为1740亿行)并执行独特的操作.
在找到排列时,是否有一种方法可以在重复中使用快捷方式和因子?
看看其他方法,我发现这可行:
unique(permutations(16,11, c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4), set=FALSE))
Run Code Online (Sandbox Code Playgroud)
除了它花了太多时间做这件事,而且我正在做同样的事情,我正在做的是找到所有坏的,然后将它们排除在外