【数据结构复习总结】算法(Algorithm)

  1. 算法的定义:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操                          作。
  2. 算法具有五个基本特性:输入,输出,有穷性,确定性和可行性

         输入输出:算法具有零个或多个输入,至少有一个或多个输出。

         有穷性:指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。

         确定性:算法的每一步骤都具有确定的含义,不会出现二义性。

         可行性:算法的每一步骤都必须是可行的,也就是说每一步都能够通过执行有限次数来完成。   

     3.算法设计的五个要求:正确性,可读性,健壮性,时间效率高,存储量低

              正确性:算法的正确性是指算法至少应该具有输入、输出和加工处理无歧义性、能正确反映问题的需求、能够得到问题的正确答案。

              可读性:算法设计的另一目的是为了便于阅读、理解与交流。

              健壮性:当输入的数据不合法时,算法也能做出相应的处理,而不是产生异常或者莫名其妙的结果。

              时间效率高、存储量低:时间效率指的是算法的执行时间,存储量低指的是算法程序运行所占据的内存或外部硬盘存储空间低。

     4 .算法效率的两种度量方法:事后统计方法,事前统计方法

             事后统计方法:简单来说,就是先根据不同算法设计好不同的代码程序,用计算机运行一遍,从而确定算法效率的高低。

             事前统计方法:在计算机程序编制前,依据统计方法对算法进行评估。     

    程序在计算机上运行的时间的多少取决于如下四个因素:

    (1)算法采用的策略、方法(取决于算法的好坏)

    (2)编译产生的代码质量   (取决于软件)

    (3)问题的输入规模          (取决于问题的复杂程度以及输入量的多少)

    (4)机器执行指令的速度   (取决于硬件性能)

      5.描述算法执行次数的函数(事前估算方法的理论依据)

        设输入规模为n,某个算法,随着n的增大,它会越来越优于另一算法,或者越来越差与另一个算法。并且,判断一个算法的效率时,函数的常数和其他次要项常常可以忽略,应该关注函数的最高阶项的阶数。

      6.算法的时间复杂度与空间复杂度

         时间复杂度:表示代码执行时间随着数据规模增长的变化趋势,也叫渐进时间复杂度

         空间复杂度:全称渐进空间复杂度,表示算法的存储空间数据规模之间的增长关系。

         大O复杂度表示法 :Tn = O (f(n)) T(n)表示代码的执行时间,n表示数据规模的大小,f(n)表示每行代码执行的次数总和用来分析算法的时间复杂度

          大O复杂度表示法操作步骤:

           (1)用常数1取代运行时间中的所有加法常数

           (2)在修改后的运行次数函数中,只保留最高阶项

           (3)如果最高阶项存在且不是1,则去除与这个项相乘的常数

           (4)完成上述步骤后,检查一遍,如无误,得到的结果就是用大O复杂度表示的该算法的时间复杂度。

       7.常见的时间复杂度

          

                                                                     常见的时间复杂度

                                                    【数据结构复习总结】算法(Algorithm)

                                                    常用的时间复杂度所耗费的时间从小到大依次是:

                                               【数据结构复习总结】算法(Algorithm)

     8.最坏情况与平均情况 

       最坏情况:指的是算法程序运行时间不会再变长了。一般在没有特别说明的情况下,都是指的最坏时间复杂度。

       平均情况:指的算法在是所有的情况中运行的平均时间,是期望的运行时间。