【发布时间】:2015-09-10 19:10:06
【问题描述】:
我正在尝试实现具有以下要求的功能,但很难提出算法。
我的数据包含一个正整数值和一个日期。数据的数量从 100 ~ 10,000 不等。
-------------------------
id | value | date
-------------------------
1 | 10 | 2015-01-01
2 | 10 | 2015-01-02
3 | 20 | 2015-01-02
....................
960 | 30 | 2015-09-10
961 | 15 | 2015-09-10
还有一个指定的目标值,即 5,000。
我想找到一个数据的组合,使它们的值之和等于目标,并且它们包含尽可能多的旧数据。 (目标数必须匹配,不先用最旧数据有组合也可以)
谁能告诉我如何实现它?
【问题讨论】:
-
很难判断数据的年龄是否比与目标总和的接近匹配更重要。对于第一次尝试,我会按年龄(或首先按年龄,然后按大小,以便较大的项目首先出现)对数据进行排序,然后以贪婪的方式获取该序列中的元素;如果不合适,请跳过一个项目。
-
请注意,这是 Subset-Sum(NP-Complete)的一种变体,但有“首选旧数据”的限制
-
@Codor > 这就是我首先提出的,但两种方式都有其缺陷。仅按年龄可能不会导致实际组合。先选择大值可能会导致从未(或需要很长时间)选择较小的值。
-
让我们这样问 - 哪个更好:5 件物品的确切数量,或 1 件的数量,4 件相同的物品和五分之一,比 oe 更旧?
-
@shapiro.yaacov > 目标编号必须匹配。我更新了问题。
标签: algorithm