我希望找到一种解决方案,用于查找大型数集中最接近目标数字的子集。例如,我有一个数值集合:
c(55.14, 26.22, 76.69, 37.77, 32.7, 48.71, 7.59, 21.37, 33.54, 3.95, 16.41,
20.56, 24.74, 26.5, 4.72, 32.99, 130.15, 27.27, 20.56, 41.21, 13, 16.41, 88.25,
1.95, 68.2, 34.3, 51.75, 8.93, 8.38, 30.45, 34.89, 42.91, 19.42, 13.62, 9.73,
20.86, 21.5, 37.46, 14.4, 26.61, 55.31, 24.03)
我的目标是1262.2。
我该如何找到完整集合中使得子集总和与目标值1262.2之间差异最小的子集?
x
中选择多少个数字,请使用combn(x,n)
- 这将给出所有包含n个数字的x可能集合,然后对它们求和并找到最小值。重复任何n以找到最小值(准备等待!)。 - Remko Duursmasum(sapply(1:length(x), function(y) choose(length(x),y) ))
其中x
是上面的向量,将有4398046511103
种可能的组合需要检查。那是四万亿多一点。正如您所指出的,OP可能应该有一些限制来使这个过程可管理。 - thelatemail