r
オブジェクトからオブジェクトのシーケンスを生成する方法はn
? 私は、順列または組み合わせのいずれかを、置換の有無にかかわらず、明確なアイテムと区別のないアイテム(別名マルチセット)で行う方法を探しています。
これ は 十二 正道 に 関係 し てい る。「明確な」ソリューションは 12 通りの方法で含めることができますが、「明確でない」ソリューションは含まれません。
r
オブジェクトからオブジェクトのシーケンスを生成する方法はn
? 私は、順列または組み合わせのいずれかを、置換の有無にかかわらず、明確なアイテムと区別のないアイテム(別名マルチセット)で行う方法を探しています。
これ は 十二 正道 に 関係 し てい る。「明確な」ソリューションは 12 通りの方法で含めることができますが、「明確でない」ソリューションは含まれません。
編集:より効率的なパッケージを使用するように回答を更新しましたarrangements
arrangement
アレンジメントには、順列と組み合わせのための効率的なジェネレーターとイテレーターが含まれています。arrangements
同種の既存のパッケージのほとんどよりも優れていることが実証されています。いくつかのベンチマークはここにあります。
上記の質問に対する回答は次のとおりです
# 1) combinations: without replacement: distinct items
combinations(5, 2)
[,1] [,2]
[1,] 1 2
[2,] 1 3
[3,] 1 4
[4,] 1 5
[5,] 2 3
[6,] 2 4
[7,] 2 5
[8,] 3 4
[9,] 3 5
[10,] 4 5
# 2) combinations: with replacement: distinct items
combinations(5, 2, replace=TRUE)
[,1] [,2]
[1,] 1 1
[2,] 1 2
[3,] 1 3
[4,] 1 4
[5,] 1 5
[6,] 2 2
[7,] 2 3
[8,] 2 4
[9,] 2 5
[10,] 3 3
[11,] 3 4
[12,] 3 5
[13,] 4 4
[14,] 4 5
[15,] 5 5
# 3) combinations: without replacement: non distinct items
combinations(x = c("a", "b", "c"), freq = c(2, 1, 1), k = 2)
[,1] [,2]
[1,] "a" "a"
[2,] "a" "b"
[3,] "a" "c"
[4,] "b" "c"
# 4) combinations: with replacement: non distinct items
combinations(x = c("a", "b", "c"), k = 2, replace = TRUE) # as `freq` does not matter
[,1] [,2]
[1,] "a" "a"
[2,] "a" "b"
[3,] "a" "c"
[4,] "b" "b"
[5,] "b" "c"
[6,] "c" "c"
# 5) permutations: without replacement: distinct items
permutations(5, 2)
[,1] [,2]
[1,] 1 2
[2,] 1 3
[3,] 1 4
[4,] 1 5
[5,] 2 1
[6,] 2 3
[7,] 2 4
[8,] 2 5
[9,] 3 1
[10,] 3 2
[11,] 3 4
[12,] 3 5
[13,] 4 1
[14,] 4 2
[15,] 4 3
[16,] 4 5
[17,] 5 1
[18,] 5 2
[19,] 5 3
[20,] 5 4
# 6) permutations: with replacement: distinct items
permutations(5, 2, replace = TRUE)
[,1] [,2]
[1,] 1 1
[2,] 1 2
[3,] 1 3
[4,] 1 4
[5,] 1 5
[6,] 2 1
[7,] 2 2
[8,] 2 3
[9,] 2 4
[10,] 2 5
[11,] 3 1
[12,] 3 2
[13,] 3 3
[14,] 3 4
[15,] 3 5
[16,] 4 1
[17,] 4 2
[18,] 4 3
[19,] 4 4
[20,] 4 5
[21,] 5 1
[22,] 5 2
[23,] 5 3
[24,] 5 4
[25,] 5 5
# 7) permutations: without replacement: non distinct items
permutations(x = c("a", "b", "c"), freq = c(2, 1, 1), k = 2)
[,1] [,2]
[1,] "a" "a"
[2,] "a" "b"
[3,] "a" "c"
[4,] "b" "a"
[5,] "b" "c"
[6,] "c" "a"
[7,] "c" "b"
# 8) permutations: with replacement: non distinct items
permutations(x = c("a", "b", "c"), k = 2, replace = TRUE) # as `freq` doesn't matter
[,1] [,2]
[1,] "a" "a"
[2,] "a" "b"
[3,] "a" "c"
[4,] "b" "a"
[5,] "b" "b"
[6,] "b" "c"
[7,] "c" "a"
[8,] "c" "b"
[9,] "c" "c"
arrangements
既存のパッケージを使用する利点はほとんどありません。
統合フレームワーク: メソッドごとに異なるパッケージを使用する必要はありません。
とても効率的です。いくつかのベンチマークについては、 https://randy3k.github.io/arrangements/articles/benchmark.htmlを参照してください。
メモリ効率が高く、13 個すべてを生成できます。1 から 13 の順列、既存のパッケージは行列サイズの制限により失敗します。イテレータのgetnext()
メソッドにより、ユーザーは配置を 1 つずつ取得できます。
生成された配置は、一部のユーザーにとって望ましい辞書順になっています。