Algorithm 降低嵌套循环算法的时间复杂度

Algorithm 降低嵌套循环算法的时间复杂度,algorithm,time-complexity,big-o,nested-loops,Algorithm,Time Complexity,Big O,Nested Loops,我有下面的算法,我想重写,所以它的时间复杂度为O(n)。我对算法不熟悉,但根据我的理解,因为两个for循环都进行了n次迭代,所以复杂度总是O(n2)。甚至有可能降低这个问题的复杂性吗 Algorithm example(ArrayA, ArrayB, n) Input: 2 arrays of integers, ArrayA and ArrayB, both length n Output

我有下面的算法,我想重写,所以它的时间复杂度为O(n)。我对算法不熟悉,但根据我的理解,因为两个
for
循环都进行了n次迭代,所以复杂度总是O(n2)。甚至有可能降低这个问题的复杂性吗

Algorithm example(ArrayA, ArrayB, n)                                           
Input: 2 arrays of integers, ArrayA and ArrayB, both length n          
Output: integer

value <- 0                                                    1 operation
for i <- 0 to n-1                                             n-1 operations
    for j <- 0 to n-1                                         (n-1)^2 operations
        value <- value + (ArrayA[i] * ArrayB[j])              3(n-1)^2 operations
return value                                                  1 operation
算法示例(ArrayA,ArrayB,n)
输入:2个整数数组,ArrayA和ArrayB,长度均为n
输出:整数

值此类型的操作将仅在n2时间内运行。原因是你必须比较i的每个元素和j的每个元素。例如:

i*j, i*j+1,...,i*j+(n-1)
(i+1)*j, (i+1)*(j+1),...,(i+1)*(j+n-1)
.
.
.
(i+n-1)*j, (i+n-1)*(j+1),...,(i+n-1)*(j+n-1)

没有办法降低复杂性。

通过应用一点代数:

因此,这里有一个算法,它在O(n)时间内计算相同的结果:

sum\u A← 0
因为我← 0到n-1
总结← 求和A+ArrayA[i]
总和← 0
对于j← 0到n-1
总和← 和B+ArrayB[j]
返回和A*和B
一般来说,具有嵌套循环的算法不能总是改变以降低时间复杂度;但在某些情况下,如果你能确定计算的某些特定方面,这意味着它可以以不同的方式完成,你就可以做到


对于这样的求和,有时可以通过写一些代数等价的东西来更有效地计算结果。所以,面对这样的问题,请戴上你的数学家的帽子。

@MooingDuck你是对的。您可以限制数据集。谢谢您的帮助,这更有意义。作为一个数学技能有点欠缺的人,你对我在哪里可以学到更多关于这种代数的知识有什么建议吗?针对高中后期/大学早期学生的数学学习资源可能是你应该寻找的。这本教科书是针对CS本科生的,有一章是关于总结的,但它不是最容易理解的数学教科书。有几种可能适合你。