gpt4 book ai didi

r - 生成 M 个箱中 N 个球的所有排列

转载 作者:行者123 更新时间:2023-12-02 17:48:08 26 4
gpt4 key购买 nike

我想在 m 个箱子中生成一组 n 个球的排列。以下一组嵌套列表生成这些排列。

n <- 3
m <- 4
v <- rep(0,m)
for (i in n:0){
for (j in (n-sum(i)):0){
for (k in (n-sum(i,j)):0){
for (l in (n - sum(i,j,k)):0){
v <- c(i,j,k,l)
print(v)
if (sum(v) == n){ break }
}
}
}
}

打印解决方案:

[1] 3 0 0 0
[1] 2 1 0 0
[1] 2 0 1 0
[1] 2 0 0 1
[1] 1 2 0 0
[1] 1 1 1 0
[1] 1 1 0 1
[1] 1 0 2 0
[1] 1 0 1 1
[1] 1 0 0 2
[1] 0 3 0 0
[1] 0 2 1 0
[1] 0 2 0 1
[1] 0 1 2 0
[1] 0 1 1 1
[1] 0 1 0 2
[1] 0 0 3 0
[1] 0 0 2 1
[1] 0 0 1 2
[1] 0 0 0 3

排列的总数将为choose(n+m-1,m-1),排列的顺序对我来说并不重要。但我很难将其变成一个可以接受任意数量的垃圾箱的函数。 (我不会因为我的尝试而破坏它,但这只是嵌套循环的困惑。)因此,如果比我更聪明的人可以将上面的嵌套循环转换为函数,我将不胜感激。

或者,如果已经有一个函数可用于进行此类排列(或遵循不同的算法),我将不胜感激。我更喜欢一种不会生成多余排列的方法(这里的排列不等于 n),然后丢弃它们,但对于像这样的小问题,这样做的解决方案是可以接受的。

最佳答案

library(partitions)
compositions(3,4)

# [1,] 3 2 1 0 2 1 0 1 0 0 2 1 0 1 0 0 1 0 0 0
# [2,] 0 1 2 3 0 1 2 0 1 0 0 1 2 0 1 0 0 1 0 0
# [3,] 0 0 0 0 1 1 1 2 2 3 0 0 0 1 1 2 0 0 1 0
# [4,] 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 2 2 2 3

关于r - 生成 M 个箱中 N 个球的所有排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27064675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com