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

Algorithm 用于存储预计算最大值的高效数据结构,algorithm,data-structures,range-query,Algorithm,Data Structures,Range Query,考虑存储每个时间点两个变量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的新时间粒度的最大值不足以回答第二个问题。例如:

考虑存储每个时间点两个变量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
我们已经失去了这样一个事实,即A+B的最大值是在3天和4天内达到的

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


是否有一种算法/数据结构可以有效地存储这些类型的预计算最大值,从而让我们能够对变量的任意组合提出问题,同时避免组合爆炸?我的猜测是,它可能会假设数据中存在一些规律性,并试图以一些通用性为代价来利用它们。

没有真正好的数据结构可以满足您的所有需求。。。但是您知道一年中只有365天,也就是说,您的表不会有数十亿行


该表最多只有几千行,因此不需要花费大量时间来迭代计算您喜欢的任何统计数据。

为每个股票变量计算稀疏表怎么样?然后,对于每个时间范围,计算A和B的最大值以获得最大的A+B。您应该查找范围最大查询问题。这里有一个很好的广义处理问题,考虑OLAP系统类似的和席状席席{日期、PARAMYID、V},其中基于对{DATA,PARAMYIDID }构建索引。使用,您可以为每个日期的每个参数预先计算聚合,并动态获得所需的结果。您可以使用稀疏表,它占用O(n logn)空间并在O(1)中回答最大查询,或者使用段树,它使用O(4*n)空间并在O(logn)时间内回答最大查询