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

これは、これを行うために私が考えることができる最も明白な方法です。これは上記のコメントからの私のアプローチですが、1 つを除くすべてではなく、ベクトルから一意でない要素のすべてのエントリを削除しました。1 つ残していた場合、この方法ではすべてのエントリが 1 つずつ複製されます。

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 に答える