博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法复杂度:时间复杂度与空间复杂度
阅读量:6659 次
发布时间:2019-06-25

本文共 1193 字,大约阅读时间需要 3 分钟。

一、算法复杂度

  算法复杂度分为:时间复杂度和空间复杂度。作用: 时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。

二、时间复杂度:

  1、定义:用T(n)表示算法中基本操作重复执行的次数,其中的n是问题的规模。若用f(n)表示T(n)的同量级函数,则时间复杂度记为O(f(n))。

注:同量级函数的定义:若有某个函数f(n)、使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数c,则称f(n)是T(n)的同数量级函数,记作T(n)=O(f(n))。

  2、计算步骤:

    (1)找出算法的基本操作

    (2)根据相应的语句确定该 语句的执行次数T(n)

    (3)找出 T(n) 的同数量级f(n),则为时间复杂度 O(f(n)

  3、常见的T(n)的同数量级f(n)有以下:

    1,log2n,n,n log2n ,n^2,n^3,2^n,n!

  4、时间复杂度的计算技巧:

   (1)看看有几重for循环,只有一重则时间复杂度为O(n),二重则为O(n^2),依此类推;

   (2)如果有二分,例如快速幂、二分查找,则为O(log2n);

   (3)如果一个for循环套一个二分,那么时间复杂度则为O(nlog2n)。

  5、例子:

for(i=1; i<=n; ++i) { for(j=1; j<=n; ++j) { c[i][j] = 0;//该步骤属于基本操作执行次数:n的平方次 (即n^2)for(k=1; k<=n; ++k) c[i][j] += a[i][k] * b[k][j];//该步骤属于基本操作执行次数:n的三次方次 (即n^3)} }

上面的程序中, T(n) = n^2+n^3,根据 T(n)/f(n) 求极限可得到常数c,可以确定T(n)的同数量级 f(n) = n^3,则该算法的时间复杂度:T(n) = O(n^3)

 

三、空间复杂度:

  1、定义:

    一个算法的空间复杂度S(n)定义为该算法所耗费的存储空间,包括存储算法本身所占用的存储空间,算法的输入输出数据所占用的存储空间和算法在运行过程中临时占用的存储空间这三个方面。

四、时间复杂度与空间复杂度比较

  对于一个算法,其时间复杂度和空间复杂度往往是相互影响的。当追求一个较好的时间复杂度时,可能会使空间复杂度的性能变差,即可能导致占用较多的存储空间;反之,当追求一个较好的空间复杂度时,可能会使时间复杂度的性能变差,即可能导致占用较长的运行时间。

 

来源参考链接:

1、http://www.cnblogs.com/xiaxianfei/p/5385081.html

2、什么是时间复杂度:https://www.cnblogs.com/huangbw/p/7398418.html

 

你可能感兴趣的文章
【C#并发】00概述
查看>>
[转] Webpack的devtool和source maps
查看>>
查询表结构视图
查看>>
input type file onchange上传文件的过程中,同一个文件二次上传无效的问题。
查看>>
Java入门篇(一)——如何编写一个简单的Java程序
查看>>
Kotlin Coroutine(协程) 基本知识
查看>>
JavaScript系列-this详解
查看>>
浅谈 Objective-C Associated Objects
查看>>
陆瀚卿:非农做单十大技巧,掌握六条算你赢!
查看>>
9章 RxJava混合实战
查看>>
1002 A+B for Polynomials
查看>>
实在不能忍了,记一下浏览器事件环与node事件环的区别
查看>>
组件:Text
查看>>
第十四篇 SpringBoot2 x整合MyBatisGenerator
查看>>
js实现的大根堆算法(基于链式的m叉树)
查看>>
黑马程序员---基础加强-----------------第一天(1)
查看>>
清晨起来,几道小题
查看>>
Git最佳实践建议
查看>>
云服务器使用感受腠藦矧用渀龵烾廊鼵晅藪买濷闉涓讌灡憰樲窨
查看>>
bzoj 1013: [JSOI2008]球形空间产生器sphere
查看>>