高效的数据结构,用于存储预先计算的最大值

时间:2019-05-04 07:03:53

标签: algorithm data-structures range-query

考虑该表,该表在每个时间点存储两个stock变量 A B 的值:

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

我们要回答以下问题:

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

  • 在给定的日期范围内,变量 A B sum 达到的最大值是多少?

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

问题在于,单单计算 A B 的新时间粒度的最大值不足以回答第二个问题。例如:

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

我们已经失去了在 3&4 的两天内达到最大 A + B 的事实。

我们可以在摘要表中添加新的 Max-(A + B)列。但是,如果有许多不同的变量,我们将面临组合爆炸式增长。摘要表最终可能会比原始表大!

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

1 个答案:

答案 0 :(得分:2)

您想要的所有内容都没有非常好的数据结构...但是您知道一年只有365天,即您的表将没有数十亿行。

该表最多仅包含几千行,因此仅花费大量时间进行迭代即可计算所需的统计信息。