如何有效地找到网格范围内的元素总和?

时间:2017-08-02 03:18:59

标签: algorithm performance

给定n乘以n正数的网格,获得由被认为给定的区域的矩形的角所描述的范围内的元素之和可以实现的最佳复杂性是什么? (x1,y1)(x2,y2)?会有q个此类查询。

PS:考虑到天真的解决方案,复杂性为O(q*n^2)

1 个答案:

答案 0 :(得分:3)

假设您按照m69注释中的行进行求和,以生成矩阵,其中每个元素都是原始矩阵中相应元素与其左侧所有元素之和。然后你做同样的事情,总结那个和的矩阵的列,你得到一个矩阵,其中每个元素是左边和上面的元素的矩形子数组的总和。

现在在这个数组中取四点:

A B

C D

值D - B - C + A包含一个矩形区域的总和,一个角在D处,另一个角在D,B和C的D侧,正如您可以看到的那样添加和减去各个区域中的点数。因此,在O(n ^ 2)预处理之后,您可以在时间O(1)

中回答查询