从一组聚合(总和,平均等)构建具体列表

时间:2014-02-14 01:20:58

标签: java algorithm list statistics aggregate

我正在尝试编写一个函数来获取有关数字列表(货币)的一些汇总信息,并返回包含这些属性的具体列表。例如,我会要求一份平均价格为265.43美元,总额为6,000美元,最高金额为1,000美元等的清单。我将获得一份完整清单作为回报,其价值平均为265.43美元,总计为6,000美元等。可能有许多列表满足属性,但我不需要全部枚举它们,我只需要返回其中任何一个。

以下是列表的属性:

  • 长度为 N
  • 总结为 S
  • 平均值 A
  • 最低的数字是 L
  • 最高的数字是 H
  • 符合美元范围的细分:
    • X 值小于$ 75
    • Y 值介于$ 75和$ 200
    • 之间
    • Z 值大于$ 200

我想为每个参数传递值,并返回一个匹配它们的列表。我有几百个这样的集合{N,S,A,L,H,X,Y,Z}但我没有任何用于生成它们的支持列表。我不需要生成的列表与原始列表完全相同,从集合的角度来看,我只需要它们与原始列表相同。

我想这样称呼它 - > list = gimmeThatList(N,S,A,L,H,X,Y,Z)

我不确定从哪里开始查找有关此信息,所以任何帮助都会受到赞赏,即使它只是一个链接或谷歌搜索词。一些真正的代码会很好,如果你可以节省时间,但我会采取我能得到的。

1 个答案:

答案 0 :(得分:0)

一些想法:

  • N是多余的,因为它是X,Y和Z的总和
  • A是多余的,因为它等于S / N
  • LH可以替换为X,Y和Z子集的广义价格范围条件。您可以假设这些值出现在列表中并解决减少的问题(S' = S - L - H, X', Y', Z'),其中X,Y和Z相应地适应,并且限制列表中的所有数字都落入[L,R]

对于X'值,我们的范围为[L,min(75,H)],对于Y'值[max(75,L),min(H,200)],对于Z'[max(L) ,200),H]

我们可以轻松地计算下限X' * L + Y' * max (75, L) + Z' * max(L, 200)和我们可以创建的可能总和的上限。使用简单的贪婪算法(留给读者练习,考虑X,Y和Z范围的各个下限/上限),我们也可以生成该范围内的每个总和,包括S'