我有很多很多值,并将其存储在row-major 1d array
。
ex:
1 2 3
4 5 6
将存储在int* array = {1,2,3,4,5,6};
我需要做的是row1, row2, column1, column2
,然后打印出该区域的总和,它会要求多次注意不同区域。
我想到的是首先使用嵌套循环遍历数组并将每行的总和存储在sum_row
中,并将每列的总和存储在sum_column
中并存储总元素的总和im {{1 }}
然后totalSum
。
但它似乎足够快,是否有任何算法可以做得更快或一些编码风格的提示可以使因素很少?
提前谢谢。答案 0 :(得分:1)
在我看来,你已经用另一个迭代替换了一个双重迭代。问题在于减去“the elemnts that has been minus twice
”;除非我弄错了,否则这涉及迭代这些元素来总结它们。
相反,只需迭代需要求和的矩形区域。我怀疑它会慢一些。
通过生成求和的左上矩阵的矩阵,可以获得更有效的算法。 (请参阅summed area table上的维基百科文章。)然后,您可以通过查找四个面积总和来计算任何子矩阵总和。