我目前正在参加算法课程的介绍,我需要帮助解决这个问题。由于我对此持怀疑态度并且不那么确定,所以上面显示的是。 :)我有两个问题:
问题1: 根据我从算法书中的理解,我相信这个问题的运行时复杂性是f(n)= 3n。为什么?好吧因为while循环将继续运行n次,并且对于循环的每次迭代,你有3个操作(1个减法,1个乘法和1个加法)我的过程是正确还是错误?由于赋值语句,它真的应该是f(n)= 5n吗?我知道两者都是相同的复杂性,但我真的很想明确确定。
问题2: 至于显示算法是否找到多项式的值,足以让我只给出一个例子,找出特定多项式的值,即3n ^ 2 + 2n + 1来证明算法有效或有更好的效果这样做的方法。
答案 0 :(得分:1)
对于第一个问题,复杂性确实是O(n)。
如果你想要更准确地确定你似乎要求的东西,在每个循环中,你的算法将需要一定的操作(我的复杂性课程有点老,我希望我不会错过任何;) ):
您的程序还将执行3项额外操作:
您还可以考虑计算机必须为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) }
我没有找到该程序的任何必要前提条件,我之前刚才提到它,因为考虑其他类似作品很重要。 如图所示,我们的想法是在每个点显示程序的状态,因此我们知道它到达终点时的状态。