算法分析第一章:分析基础

前提

    在阅读本章节之前,你应该能够

     阅读和生成算法

     阅读和生成递归算法

     识别比较和算术运算

     使用基本代数

目标

     本章节结束时你应该能够

     描述如何分析一个算法

     解释如何选择有价值的运算和解释为什么不是其它运算

     解释如何去进行一个最优情况分析、最坏情况分析的和平均情况分析

    用对数,概率和求和工作

    描述θ(f),Ω(f),Ο(f),增长率和算法顺序

    使用决策图表去判定复杂度的下界

    将一个简单的递归关系转化成它的关闭形式

学习建议

    当你在完成这个章节时,你应该重做例子以确保你理解它们。另外,你应该尝试回答问题在你继续阅读它们之前。问题的暗示或答案在紧接着它的句子。

    解决一个给定的问题有需要算法。它们会有决定着运行的效率的不同特性。当我们在分析一个算法时,我们首先得去表明这个算法可以正确地解决问题。因为如果它不能解决问题,它的效率就不重要。接着,我们要去看它可以多有效地解决问题。这个章节奠定了更加复杂的算法分析和比较的基础。

   分析一个算法决定了算法执行的使用的时间长短。这真的不是那么几秒钟或任何时钟测量而是算法执行的大致数量的操作数量。操作的次数与执行时间有关,所以我们经常使用时间去形容一个算法计算的复杂度。一个算法在计算机实际运行的秒数对于我们的分析没有什么用处。因为我们关心的算法解决特定问题的相对有效性。你也可以发现具体的执行时间对于算法效率不是一个很好的体现。因为一个算法不会仅仅因为我们把它移到更快速的计算机而变得更好,也不会因为我们把它移入更慢的计算机而变得更差。

   为特定大小的的输入数据集所做的实际数量的操作既不令人关注也不能告诉我们些什么。反而,我们的分析将会决定一个算法对输入的大小进行处理的操作的数量有关的方程式。然后,我们可以通过比较增长率去比较两种算法。增长率是关键的,因为有些例子是当输入规模小的时候,A算法比B算法用更少的操作,但是在输入规模变大时,A算法比B算法用更多的操作。

   广而言之,算法可以被归类为重复的或递归的。重复的算法有循环和条件语句作为它们的基础,所以对它们分析决定于在循环中的操作和循环运行的次数。递归算法通过将问题分解为几个小问题,在每个小问题中使用算法的方式去解决一个大的问题。这些算法通常被称之为分治算法和在解决问题上有很大的影响作用。通过将问题分解为小问题的过程可以产生更小、更直接、更容易理解的算法。分析递归算法需要决定于为生成小问题,他们每个小问题的解决方法合成整个问题的解决方法的操作的多少。结合这些信息与小问题的数量和规模,我们可以得到算法的递归关系。这个递归关系可以被转化为为可与其他方程式比较的关闭形式。

  我们从描述什么是算法分析和为什么我们要分析算法开始这个章节。我们接下来会关注什么操作将会被考虑和我们会做什么种类的分析。因为数学对于我们的分析非常重要,下面几个部分会探索用于分析迭代和递归算法的重要数学概念和性质。

1.1什么是算法分析?

         算法分析提供了一个对算法解决给定的问题集需要耗费多少时间的大致了解的背景信息。对于每个被考虑的算法,我们会想出算法解决有一组N输入值的问题的所需耗费时间的估计。所以,例如,我们可能判定将一个有N个值转为升序的排序算法中作比较的次数,或者我们可以判定将两个N*N的矩阵想成所需是的算术运算的多少。

         这里有结局一个问题的多种算法。学习算法给我们提供了选择算法的工具。例如,考虑下面两种算法,找到四个值中最大值。

           largest = a

           if b > largest then

             largest = b

           end if

           if c > largest then

             largest = c

           end if

           if d > largest then

             largest =d

           end if

           return largest

           if a > b then

              if a > c

  

    

猜你喜欢

转载自blog.csdn.net/rachel9798/article/details/82709246