如何找到给定数组的每个i和i + k(某些常数)之间的所有最大值?

时间:2016-06-24 22:28:54

标签: dynamic-programming

我需要找到每个可能集合的元素之间的所有最大值{a [i],a [i + 1],... a [i + k]}(其中i是索引,k是某个给定的常量)。为此,我正在使用。

loop(b, 1, k) {
       rloopl(i, b, n) {
           if(a[i] < a[i-1])
               a[i] = a[i-1];
       }
}

但对于大阵列而言它太慢了。还有其他更有效的方法吗?

1 个答案:

答案 0 :(得分:1)

我很遗憾地告诉你,根据提出的要求,答案是:“不。”如果“最大值可以在任何地方”,你别无选择,只能“看 ......无处不在。”

如果你是“只做一次”,对于任何特定的数据集,那么你基本上只需要采取你的肿块。你用“蛮力”卡住了

但是,如果您不止一次 ,那么和/或如果您对相关数组的进程产生影响加载,情况可能会开始好转一点。

例如,如果另一段代码一次一个地向该数组添加元素,则该段代码注意到它遇到的最大/最小值是微不足道的。加载二维数组的代码可能会收集有关每行(列)的统计信息。等等。这种“当时是免费的”策略可用于消除(或严重限制)以后进行特定暴力搜索的需要。