我们在这个算法中确实有案例吗?

时间:2014-02-07 00:16:58

标签: algorithm

我无法解决以下算法的运行时间

enter image description here

现在首先我的问题是,这里的情况非常重要(我不能提出相同大小的两个不同的输入,彼此不同)?

其次,我认为该算法在O(n^2)中运行。我是对的吗?

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)

只是给你一些提示:

  • 您有多少个循环以及它们是如何嵌套的?
  • 每个循环的运行频率(从外循环到内循环开始解决)
  • 如果有疑问,请尝试n = 4或5并计算每一步。在此之后,你会对正在发生的事情有一个很好的感觉。
相关问题