我无法解决以下算法的运行时间
现在首先我的问题是,这里的情况非常重要(我不能提出相同大小的两个不同的输入,彼此不同)?
其次,我认为该算法在O(n^2)
中运行。我是对的吗?
答案 0 :(得分:1)
你在@ OBu的答案中写的评论只有四分之一左右: 1 * n + 2 *(n-1)+ 3 *(n-2)+ ... + n * 1
等于:
Sum(i = 1..n,i *(n-i + 1))= n * Sum(i) - Sum(i * i)+ n = n * [n(n + 1)/ 2 ] - [n(n + 1)(2n + 1)/ 6] + n
如果您愿意,可以随意计算确切的公式,但总体复杂度为O(n ^ 3)。
作为一个经验法则(更像是一个背后的计算技巧,我已经选择了...只是为了给你一个快速的想法):如果你不确定算法有多个for(有不同的)长度,但都与n有关,如上所述)尝试计算围绕算法中间执行的操作数(n / 2)。这通常可以让您了解整个事物的运行时间复杂度如何 - 您基本上计算总和中的最大元素,因此整体复杂度总是> = =比您计算的东西(在大多数情况下它是虽然如此。
答案 1 :(得分:0)
只是给你一些提示: