gpt4 book ai didi

r - 查找总和为目标的所有数字组合

转载 作者:行者123 更新时间:2023-12-04 11:00:24 24 4
gpt4 key购买 nike

我希望找到最快的方法来找到最多 1000 种可能的 'n' 整数组合来找到目标整数。

例如。假设我想求和到数字“20”。我想找到最多 1000 个总和为这个数字的四个整数的组合。整数可以重复自己。我还有一个条件,即整数不得小于特定数字,在本例中为 4。

target<-20  #the number I wish to sum to
lowest<-4 #the smallest integer I allow
size<-4 #the number of integers I wish to use to sum
maxposs <- target - ((size-1) * lowest) #given the lowest, this is the max possible integer. In my example it is 8.

这就是我开始解决这个问题的方式。使用 combn找到四个选定整数的所有组合,然后按与我的目标相加的那些组合进行过滤。
m <- combn(rep(lowest:maxposs,size), size)
m1<- m[,colSums(m)==target]

这里,'m1' 有 245 列。只有这么多解决方案。最后几列:
#     [,238] [,239] [,240] [,241] [,242] [,243] [,244] [,245]
#[1,] 4 4 4 4 4 4 5 5
#[2,] 5 5 5 6 7 4 6 4
#[3,] 7 4 5 4 4 5 4 5
#[4,] 4 7 6 6 5 7 5 6

但是,在我的实际应用程序中,我可以处理非常大的整数(总和为 1000),并且希望将自己限制为 1000 种可能组合的随机样本。由于这是随机统计测试,因此速度至关重要。我想知道是否有人知道这样做的更快方法。我的方式在直觉上感觉并不快。

最佳答案

my_matrix <- matrix(nrow = 1000, ncol = 4)
i <- 1
nn <- 1000
while(i <= 1000){
x <- sample(x = 4:nn, size = 3)
y = nn - sum(x)
if(y >= 4){
my_matrix[i, ] <- c(x, y)
i <- i + 1
}
}

根据 Gavin 的建议,使用预先分配的矩阵重做。现在运行时间是 0.158 秒,速度是原来的两倍,并且可能扩展得更好。

关于r - 查找总和为目标的所有数字组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30858688/

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