我需要找到每个可能集合的元素之间的所有最大值{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];
}
}
但对于大阵列而言它太慢了。还有其他更有效的方法吗?
答案 0 :(得分:1)
我很遗憾地告诉你,根据提出的要求,答案是:“不。”如果“最大值可以在任何地方”,你别无选择,只能“看 ......无处不在。”
如果你是“只做一次”,对于任何特定的数据集,那么你基本上只需要采取你的肿块。你用“蛮力”卡住了。
但是,如果您不止一次 ,那么和/或如果您对相关数组的进程产生影响加载,情况可能会开始好转一点。
例如,如果另一段代码一次一个地向该数组添加元素,则该段代码注意到它遇到的最大/最小值是微不足道的。加载二维数组的代码可能会收集有关每行(列)的统计信息。等等。这种“当时是免费的”策略可用于消除(或严重限制)以后进行特定暴力搜索的需要。