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

标签 r

我希望找到最快的方法来找到最多 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/

相关文章:

r - 如何在没有可用分隔符的情况下从 mmddyyyy 字符串中分离年份?

r - 在 ffdf 上应用 tidyr 的传播

r - 使 stat_ellipse {ggplot2} 轮廓 geom_point 填充颜色

r - 如何在 R 中使用每一侧多个变量进行模糊连接

r - 如何在远程 ssh 连接中在本地绘制 R 绘图?

r - "pch"代表什么?

r - doParallel:::doParallelSNOW 在指定 foreach(..., .export) 时提示

r - 选择一个数据框中与另一数据框中的行部分匹配的行

r - 计算一行的某些单元格中有多少个值不是 NA(在 R 中)

r - 如何从一组文本和一组特定术语(标签)构建术语文档矩阵?