2

考虑这个存储两个股票变量AB在每个时间点的值的表:

         A   B
day 1   10   0 
day 2    0  10
day 3    7   7
day 4    7   7

我们想回答以下问题:

  • 在给定的天数范围内,变量A达到的最大值是多少?

  • 在给定的天数范围内,变量AB的总和达到的最大值是多少?

然而,实际的表可能有数十亿行和许多变量。为了更快地得到答案,我们计划预先计算一个时间粒度较低的汇总表。

问题是天真地分别计算AB的新时间粒度的最大值不足以回答第二个问题。例如:

         Max-A  Max-B
day 1&2     10     10
day 3&4      7      7

我们已经失去了在第 3 天和第 4天达到A + B最大值的事实。

我们可以在汇总表中添加一个新的Max-(A+B)列。但如果有许多不同的变量,我们将面临组合爆炸。汇总表最终可能会比原来的大!

是否有一种算法/数据结构可以有效地存储这些预先计算的最大值,以一种让我们对变量的任意组合提出问题的方式,同时避免组合爆炸?我的猜测是,它可以假设数据中的一些规律性并尝试利用它们——以牺牲一些普遍性为代价。

4

1 回答 1

2

对于你想要的一切,没有真正好的数据结构......但你知道一年只有 365 天,也就是说,你的表不会有数十亿行。

该表最多只有几千行,因此只需对其进行迭代以计算您喜欢的任何统计信息都不会花费任何大量时间。

于 2019-05-04T16:42:08.190 回答