说我有3个绿球,2个橙球和8个黄球。我想订购它们,我怎样才能生成所有可能的序列,因为所有相同颜色的球都是相同的。
在R中,使用gregmisc
,我可以
balls<-c('orange','orange', 'green', 'green','green','yellow'...'yellow')
然后再做
g <- permutations(length(balls),length(balls),v=balls,set=F)
g.reduced <- g[!duplicated(g),]
但这似乎非常不必要。
答案 0 :(得分:0)
这是我能想到的最明显的方法。这是我从上面的评论中的方法,但我从向量中删除了非唯一元素的所有条目,而不是除了一个之外的所有条目。如果我留下了一个,这个方法会导致每个条目都有一个副本。
arr # one of the rows of the matrix of permutations
l # the length of the original un-unique'd vector
out <- list()
vec <- vector(length=l)
find.placings <- function(start, pos, vec, m) {
if (m == 0)
return(vec)
for (i in pos:(l - m + 1)) {
vec[i] <- arr[start]
out[[length(out) + 1]] <- find.placings(start + 1, i + 1, vec, m - 1)
}
}
当然,因为这是高度递归的提防。我还没有测试过它。如果要调用该函数,请将其原始值设为(1, 1, vector(length=l), m)
。