《入门经典》——6.29

算法分析初步:

  在任何一本比较正经的算法书当中,第一章都会介绍算法正确性的证明方法和对算法复杂度的分析,因为算法本身两个重要的特性就是正确性和高效性,只有保证了这两部分方能设计出有实际利用价值的算法。

  那么这篇文章通过一个简单的题目来初步探讨一下如何进行算法时间复杂度的分析。

  需要指明的是,算法的复杂度分为时间复杂度和空间复杂度,而在竞赛中局限于比较抽象画的问题模型,算法分析的重点是时间复杂度。

  而所谓时间复杂度O(n)的概念,就是说对于一个算法,输入其变量n,完成运算所需要执行的语句数。这里之所以是执行语句数而不是时间是因为这能够很好的排除机器运转速度自身的因素使分析结果更具有普遍意义。

  Q:给出一个长度为n的序列,求最大连续和。

  算法设计一个很重要的科学思想就是考虑主要矛盾忽略次要矛盾,这在给出时间复杂度的初始公式和最终的简化公式都起着重要作用。

  这里我们抓住主要矛盾,即程序本身大量执行的语句,即我们设置的双层循环中对该区间和的计算,我们不难列出如下的原始公式:

                           

  这样的式子对我们说并不够直观,因此我们需要进一步的进行简化运算。这里依然会用到一个近似处理的情况,非常类似高等数学我们用到的算法。我们去掉第二和式之后,并将其展开,我们忽略的常数项、i,因为他们相对于i^2都可以忽略,因此我们可以近似的看成,最终的时间复杂度是如下的结果。

   

原文地址:https://www.cnblogs.com/rhythmic/p/5627534.html