现在的位置: 首页 > 综合 > 正文

(二) 算法分析基础

2014年09月05日 ⁄ 综合 ⁄ 共 1243字 ⁄ 字号 评论关闭



1.1 算法的时间复杂度性分析


        算法是解决问题的方法,一个问题可以有多种解决方法,不同的算法之间就有了优劣之分。如何对算法进行比较呢?算法可以比较的方面很多,如易读性、健壮性、可扩展性等,但不是最关键的方面,算法的核心和灵魂是效率,也就是解决问题的速度。试想,一个需要运行很多年才能给出正确结果的算法,就是其他方面的性能再好,也是一个不实用的算法。


算法的时间复杂性。


        算法的时间复杂性是以后总事前分析估算的方法,它是对算法所消耗资源的一种渐进分析方法,所谓渐进分析方法是指忽略具体机器、编程语言和编译器的影响,只关注在输入规模增大时算法运行时间的增长趋势。渐进分析的好处是大大降低了算法的分析难度,是从数量级的角度评价算法的效率。


输入规模和基本语句。


        基本语句是执行次数与整个算法执行次数成正比的语句,基本语句对算法运行时间的贡献最大,是算法中最重要的操作。


        int SeqSearch(int A[] ,int n, int k)  //在数组a[n]中查找值为k的记录。

        {

                for(int i=0;i<n;i++)

                {

                        if(A[i]==k)  break;

               }

                if(i==n) return 0;   //查找失败,返回失败标志0;

                else return (i+1);  //查找成功返回记录序号。

        }


        算法的运行时间主要消耗在循环语句,循环语句执行次数取决于带查找记录个数n和待查找值k在数组中的位置,每执行一次for循环,都要执行一次元素比较。因此,输入规模是带查找记录个数n,基本语句是比较操作(A[i] ==k)。


最好、最坏和平均情况。


        最好情况(best case)不能作为算法性能的代表,因为发生的概览太小,对于条件的考虑太乐观了,当最好情况出现的概览较大时候,应该分析最好情况。

        最坏情况(worst case):可以知道算法的运行时间,最坏情况坏到什么程度,这一点实时系统中尤其重要。

        平均情况(average case):考虑各种情况发生的概率。


1.2 算法的空间复杂性分析

        算法在运行过程中所需的存储空间包括:
        (1)输入输出所占用的空间。
        (2)算法本身所占用的空间。
        (3)执行算法所要的辅助空间。
        算法的空间复杂性: 是指算法的执行过程中需要的辅助空间的数量,也就是除算法本身和输入输出数据所占用的空间外,算法临时开辟的存储空间,这个辅助空间数量也应该是输入规模的函数。通常记作: S(n) =O(f(n))

        例如,在合并算法的执行过程中,可能会破坏原有的有序序列,因此,合并不能就地进行需要将合并结果存入另外一个数组中。设序列A的长度为n,序列B的长度为m,则合并后的有序序列的长度为m+n,因此算法的空间复杂性为O(n+m)。


本节完毕,下一节 蛮力法。




抱歉!评论已关闭.