【算法】算法复杂度

算法通俗的来说就是解决一些问题方法和步骤,那么衡量算法的标准有如下:

  1.时间复杂度

          时间复杂度也就是通常所说的算法执行所需要耗费的时间,时间越短,算法越好,当然也有解释是程序要执行的次数,而不是程序执行的时间,因为有些机器性能高,程序执行的速度快,二有些机器性能一般执行就慢,所以这里就不能用时间来衡量一个算法的好坏。一个算法执行的时间往往无法精确估计,通常需要在实际的计算机中运行才能够知道。但是,我们也可以对算法代码进行估计,而得到算法的时间复杂度。首先,算法代码执行的时间往往和算法代码中语句执行的数量有关。由于每条语句执行都是需要时间的,语句执行的次数越多,整个程序所耗费的时间就越长。因北,筒短、精悍的算法程序往往执行速度快。另外,算法的时间复杂度还与问题的规模有关。

  所以评估时间复杂度的算法分析有两种:

    1)事后分析评估法

      就是去执行要评估的算法代码,在代码运行的开始记下时间,然后等程序运行结束后在记下时间,这个一前一后的时间差就是该算法代码运行的总时间。

      事后分析评估法有很大缺点:必须将代码运行一遍之后才知道算法的结果,如果一个算法比较复杂,执行时间长,等运行完之后才发现是一个糟糕的算法,会消耗大量的精力和时间,并且不同的运行环境差吧也是导致测试的结果差异很大。      

    2)事前分析评估法

       在编写要测试的代码之前,根据数据统计方法对算法进行评估。我们发现编写的代码运行所消耗的时间有以下几个因素:

      (1)算法采用的策略和方案(人为掌控)。  

      (2)机器执行指令的速度(人为不可控)。

      (3)问题输入的规模(人为不可控)。

      (4)编译器是否有对代码进行的优化质量(人为不可控)。

      

   2.空间复杂度

         空间复杂度指的是算法程序在计算机中执行所需要消耗的存储空间。空间复杂度其实可以分为如下两个方面程序保存所需要的存储空间,也就是程序的大小。程序在执行过程中所需要消耗的存储空间资源,例如程字在执行过程中的中可变量等。般来说,程序的大小越小,执行过程中消耗的资源越少,这个程序越好。在算法分析中,空间复杂度有更为详细的度量。

 

下图标识了几种常用算法的复杂度:

 

 下面表格是常见排序算法的算法复杂度

算法最快时间复杂度平均时间复杂度最坏时间复杂度空间复杂度是否稳定
冒泡排序 Ω(n) Θ(n2) O(n2) O(1) 稳定
插入排序 Ω(n) Θ(n2) O(n2) O(1) 稳定
希尔排序 Ω(nlogn) Θ(n(log(n))2) O(n(log(n))2) O(1) 不稳定
选择排序 Ω(n2) Θ(n2) O(n2) O(1) 不稳定
堆排序 Ω(nlogn) Θ(nlogn) O(nlogn) O(1) 不稳定
归并排序 Ω(nlogn) Θ(nlogn) O(nlogn) O(n) 稳定
快速排序 Ω(nlogn) Θ(nlogn) O(n2) O(logn) 不稳定
基数排序 Ω(n+b) Θ(n+b) O(n+b) O(n+k) 稳定
posted @ 2018-05-05 20:11  songguojun  阅读(616)  评论(0编辑  收藏  举报