3

假设我有 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),]

但这似乎非常不必要。

4

1 回答 1

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)

于 2012-08-23T13:55:44.580 回答