【发布时间】:2014-07-28 18:32:02
【问题描述】:
我有一个像这样 (vec) 的美元值向量:
[1] 460.08 3220.56 1506.20 1363.76 1838.00 1838.00 3684.94 2352.66 1606.02
[10] 1840.05 518.98 1603.53 1556.94 347.32 253.16 12.95 1828.81 1896.32
[19] 4962.60 426.33 3237.04 1601.40 2004.57 183.80 1570.75 3622.96 230.04
[28] 426.33 3237.04 1601.40 2004.57 183.80
如果我有一笔费用来自这些数字的总和,我怎么能找到它?例如,如果电荷是 6747.81,那么它一定是由 1506.20 + 3237.04 + 2004.57(第 3、29 和 31 个向量元素)产生的。给定总和,我如何解决这些向量元素?
我想找到所有可能的总和就是答案,然后将其与导致它的向量元素相匹配。
我玩过使用 combn(vec, 3) 来查找所有 3 个,但这并不能完全满足我的要求。
【问题讨论】:
-
似乎是背包问题的一个特例,你必须完美地填充它。这是一个 NP 问题,你可能只需要暴力破解它。找到你选择 3 个值的所有组合是行不通的;您需要每个不超过目标值的组合。 IE,有可能你有 10 件便宜的商品或 2 件贵的商品。
-
除非您的问题仅限于要添加在一起的少量术语,否则这个问题会变得非常有趣。即使只有 32 个数字向量,您也需要计算 43 亿个唯一和(32 选择 1 到 32)。
-
vec <- c(460.08, 3220.56, 1506.20, 1363.76, 1838.00 ,1838.00, 684.94, 2352.66, 1606.02, 1840.05, 518.98, 1603.53, 1556.94, 347.32, 253.16, 12.95, 1828.81, 1896.32, 4962.60, 426.33, 3237.04, 1601.40, 2004.57, 183.80, 1570.75, 3622.96, 230.04, 426.33, 3237.04, 1601.40, 2004.57, 183.80)我的编辑被三次拒绝,因为“原始帖子中的更改太多”,但这里是易于访问格式的示例数据。
标签: r combinations