如何计算算法的复杂性?

时间:2014-09-12 21:35:04

标签: algorithm time-complexity

Complexity Analysis Problem

我目前正在参加算法课程的介绍,我需要帮助解决这个问题。由于我对此持怀疑态度并且不那么确定,所以上面显示的是。 :)我有两个问题:

问题1: 根据我从算法书中的理解,我相信这个问题的运行时复杂性是f(n)= 3n。为什么?好吧因为while循环将继续运行n次,并且对于循环的每次迭代,你有3个操作(1个减法,1个乘法和1个加法)我的过程是正确还是错误?由于赋值语句,它真的应该是f(n)= 5n吗?我知道两者都是相同的复杂性,但我真的很想明确确定。

问题2: 至于显示算法是否找到多项式的值,足以让我只给出一个例子,找出特定多项式的值,即3n ^ 2 + 2n + 1来证明算法有效或有更好的效果这样做的方法。

1 个答案:

答案 0 :(得分:1)

对于第一个问题,复杂性确实是O(n)。

如果你想要更准确地确定你似乎要求的东西,在每个循环中,你的算法将需要一定的操作(我的复杂性课程有点老,我希望我不会错过任何;) ):

  1. 分析循环条件:i> = 0
  2. 计算x和y的乘积
  3. 将结果添加到[i]
  4. 将结果存储在y
  5. 计算i - 1
  6. 将结果存储在i
  7. 您的程序还将执行3项额外操作:

    1. y = 0
    2. i = n
    3. 最后一次将i与0进行比较,而不进入循环
    4. 您还可以考虑计算机必须为y和i等分配内存的事实

      对于第二个问题,如在数学中,证明它在一种情况下有效并不足以证明它在任何情况下都有效。

      为了证明你的算法,你首先必须写出你的前提条件(你应该在入境时有什么)。 然后你必须在你的while循环开始时指出你的程序所处的状态,并且在结束时也是如此。

      例如:     y = 0的     i = N时     而(I> = 0){         // y = Sum(a [j] + x ^ j,j> i)         y = a [i] + x ^ i //我想它是x ^ i而不是x * y         y = Sum(a [j] + x ^ j,j> i-1)         I = I-1         // y = Sum(a [j] + x ^ j,j> i)     }

      我没有找到该程序的任何必要前提条件,我之前刚才提到它,因为考虑其他类似作品很重要。 如图所示,我们的想法是在每个点显示程序的状态,因此我们知道它到达终点时的状态。