如何找出总和最接近给定数字的给定向量的最佳组合

泰尔西

我的问题与这个问题非常相似:从一组整数中找到一个子集,其总和最接近一个值

它只讨论了算法,但我想用 R 解决它。我对 R 很陌生,并试图找出一个解决方案,但我想知道是否有更有效的方法。

这是我的例子:

# Define a vector, to findout a subset whose sum is closest to the reference number 20. 
A <- c(2,5,6,3,7)

# display all the possible combinations
y1 <- combn(A,1)
y2 <- combn(A,2)
y3 <- combn(A,3)
y4 <- combn(A,4)
y5 <- combn(A,5)
Y <- list(y1,y2,y3,y4,y5)

# calculate the distance to the reference number of each combination
s1 <- abs(apply(y1,2,sum)-20)
s2 <- abs(apply(y2,2,sum)-20)
s3 <- abs(apply(y3,2,sum)-20)
s4 <- abs(apply(y4,2,sum)-20)
s5 <- abs(apply(y5,2,sum)-20)
S <- list(s1,s2,s3,s4,s5)

# find the minimum difference
M <- sapply(S,FUN=function(x) list(which.min(x),min(x)))
Mm <- which.min(as.numeric(M[2,]))

# return the right combination
data.frame(Y[Mm])[as.numeric(M[,Mm[1]])]

所以答案是 2,5,6,7。

我怎样才能改进这个程序?尤其是五个combn()s和​​五个apply()s,有没有办法可以同时处理它们?我希望当 A 中有更多项时,我可以使用 length(A) 来覆盖它。

索托斯

这是另一种方法,

l1 <- sapply(seq_along(A), function(i) combn(A, i))
l2 <- sapply(l1, function(i) abs(colSums(i) - 20))

Filter(length, Map(function(x, y)x[,y], l1, sapply(l2, function(i) i == Reduce(min, l2))))
#[[1]]
#[1] 2 5 6 7

最后一行用于根据通过从 list 中查找最小值创建的逻辑列表Map进行索引l1l2

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

查找与给定数字最接近的数字总和

来自分类Dev

排序最接近给定数字的数字

来自分类Dev

在列表中找到与给定数字最接近的较小和较大值的最佳方法是什么

来自分类Dev

查找与给定数字最接近的k个数字

来自分类Dev

如何在距x的距离处找到与给定数字最接近的n个数字?

来自分类Dev

如何在距x的距离处找到与给定数字最接近的n个数字?

来自分类Dev

如何在数组中查找最接近给定数字的值

来自分类Dev

如何在数组中找到最接近给定数字的值?

来自分类Dev

如何使用C中的for循环找到给定数字的最接近素数?

来自分类Dev

查找总和为给定数字的值组合的函数

来自分类Dev

查找给定数字的总和

来自分类Dev

用于检查给定数字的算法是给定数组中组合的总和

来自分类Dev

如何使用熊猫将给定数字四舍五入到最接近的指定倍数?

来自分类Dev

通过总和最接近给定数的2D数组查找路径

来自分类Dev

通过总和最接近给定数的2D数组查找路径

来自分类Dev

舍入到给定数字数组中最接近的数字

来自分类Dev

在 Matlab 中找到线性方程的给定向量的最接近解

来自分类Dev

获取列表中某个给定数字的 3 个最接近的值?

来自分类Dev

获取给定数字的所有可能组合以达到给定总和

来自分类Dev

查找最接近特定数字的数字总和

来自分类Dev

查找给定数字集的排列,其总和接近目标数

来自分类Dev

在大于给定数字的数字列表中找到元素的最佳总和

来自分类Dev

给定数字的置换和组合

来自分类Dev

给定目标总和和一组整数,找到添加到该目标的最接近的数字子集

来自分类Dev

SQL:通过关系查找最接近给定值的数字

来自分类Dev

如果没有子集总和等于给定值,则返回最接近该值的子集总和

来自分类Dev

如何找到与给定浮点数最接近的行

来自分类Dev

如何从列表中找到最接近给定Rect的Rect?

来自分类Dev

找到仅具有单个设置位并且总和等于给定数字的数字的最佳算法是什么?

Related 相关文章

  1. 1

    查找与给定数字最接近的数字总和

  2. 2

    排序最接近给定数字的数字

  3. 3

    在列表中找到与给定数字最接近的较小和较大值的最佳方法是什么

  4. 4

    查找与给定数字最接近的k个数字

  5. 5

    如何在距x的距离处找到与给定数字最接近的n个数字?

  6. 6

    如何在距x的距离处找到与给定数字最接近的n个数字?

  7. 7

    如何在数组中查找最接近给定数字的值

  8. 8

    如何在数组中找到最接近给定数字的值?

  9. 9

    如何使用C中的for循环找到给定数字的最接近素数?

  10. 10

    查找总和为给定数字的值组合的函数

  11. 11

    查找给定数字的总和

  12. 12

    用于检查给定数字的算法是给定数组中组合的总和

  13. 13

    如何使用熊猫将给定数字四舍五入到最接近的指定倍数?

  14. 14

    通过总和最接近给定数的2D数组查找路径

  15. 15

    通过总和最接近给定数的2D数组查找路径

  16. 16

    舍入到给定数字数组中最接近的数字

  17. 17

    在 Matlab 中找到线性方程的给定向量的最接近解

  18. 18

    获取列表中某个给定数字的 3 个最接近的值?

  19. 19

    获取给定数字的所有可能组合以达到给定总和

  20. 20

    查找最接近特定数字的数字总和

  21. 21

    查找给定数字集的排列,其总和接近目标数

  22. 22

    在大于给定数字的数字列表中找到元素的最佳总和

  23. 23

    给定数字的置换和组合

  24. 24

    给定目标总和和一组整数,找到添加到该目标的最接近的数字子集

  25. 25

    SQL:通过关系查找最接近给定值的数字

  26. 26

    如果没有子集总和等于给定值,则返回最接近该值的子集总和

  27. 27

    如何找到与给定浮点数最接近的行

  28. 28

    如何从列表中找到最接近给定Rect的Rect?

  29. 29

    找到仅具有单个设置位并且总和等于给定数字的数字的最佳算法是什么?

热门标签

归档