考虑这个存储两个股票变量A和B在每个时间点的值的表:
A B
day 1 10 0
day 2 0 10
day 3 7 7
day 4 7 7
我们想回答以下问题:
在给定的天数范围内,变量A达到的最大值是多少?
在给定的天数范围内,变量A和B的总和达到的最大值是多少?
然而,实际的表可能有数十亿行和许多变量。为了更快地得到答案,我们计划预先计算一个时间粒度较低的汇总表。
问题是天真地分别计算A和B的新时间粒度的最大值不足以回答第二个问题。例如:
Max-A Max-B
day 1&2 10 10
day 3&4 7 7
我们已经失去了在第 3 天和第 4天达到A + B最大值的事实。
我们可以在汇总表中添加一个新的Max-(A+B)列。但如果有许多不同的变量,我们将面临组合爆炸。汇总表最终可能会比原来的大!
是否有一种算法/数据结构可以有效地存储这些预先计算的最大值,以一种让我们对变量的任意组合提出问题的方式,同时避免组合爆炸?我的猜测是,它可以假设数据中的一些规律性并尝试利用它们——以牺牲一些普遍性为代价。