时间&空间复杂度

  时间复杂度:

通俗来说就是随着数据量的增加,程序运行的时间花费量是怎么变化的,时间复杂度常用大o表示。举个例子,猜数字,猜10个,100个、1000个,猜数的数据量是在增加的,但是实际运行程序花费的时间是怎么变化的呢,是线性的?常数的?还是指数的,它反映的是一个趋势。简而言之,时间复杂度反映的是程序执行时间随输入规模增长的量级。从某种程度上将可以展示算法的scale ability。

  how to analyze?

   e.g1:如下,当我们不断增长i的数值,循环的次数也跟着变化,我们用o(n)进行表示

        int i=10;
for (int j = 0; j <=i ; j++) {
System.out.println("logic...");
}

  e.g2: 对于多个循环我们一般从内向外分析,按照这种方式这个算法的表达方式即为O(n^2)

        int n = 10;
// 循环次数为 n
for (int i = 0; i < n; i++){
// 循环次数为 n
for (int j = 0; j < n; j++) {
System.out.println("logic...");
}
}

  e.g3:对于一个block分析我们一般采用时间复杂度最复杂的块进行表示,即这个代码块中为O(n^2)

        int n=10;
// 第一部分时间复杂度为 O(n^2)
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.println("logic1");
}
}
// 第二部分时间复杂度为 O(n)
for (int j = 0; j < n; j++) {
System.out.println("logic2");
}

time complexity summarize:

我认为时间复杂度是每一个软件工程师发展到高级阶段需要考虑的最重要的东西之一,举个例子,使用高峰之际,数据量陡然增大,我们是否能够有信心让用户的体验度和往常一样流畅,我们是否还能对自己写的逻辑很有信心,是的,当然可以通过计算时间复杂度对我们写的东西进行一个把控,我们不能指望测试伙伴来测试出我的程序的好坏,我们需要对我们写的程序熟知它的性能,那样才能称为一个有责任的开发者。

  空间复杂度:  

同理,运行一段逻辑,空间花费的复杂度是怎么变化的?以及变化的趋势是什么样子的,用来表达这个的即为空间复杂度。通俗讲,随着数据的增大,程序运行相对应的额外的空间会不会随着数据的增大而增大,这里的额外的空间指的不是程序运行本身的空间,举个例子,一个算法,本身他的需要空间来运行的,额外空间指的是,在运行的期间他会不会开辟新的空间去处理数据,这便是空间复杂度指的的空间。换句话说,它是对一个算法在运行过程中临时占用存储空间的大小量度,我们常常用S(n)=O(f(n))

  how to analyze?

  e.g1:以下代码可知道,随着n的改变,空间不断在变大我们即可分析为S(n) = O(n)

int[] m = new int[n]
for(i=1; i<=n; ++i)
{
   j = i;
   j++;
}

  e.g2: 分析,如果n为10,那开辟的空间即为10*10即为100,可推断出开辟空间为n² ,即表示为S(n) = O(n)²

      int [][] m=new int[n][n];
for (int i = 0; i < =n ; ++i) {
System.out.println("logic...");
}

space complexity summarize:

空间复杂度和时间复杂度分析过程大致相同,我认为他们是鱼和熊掌的关系,不可能同时并存。

小结:

  trade off很关键,我认为正如CAP一样:“一个分布式系统不可能同时很好的满足 一致性,可用性和分区容错性这三个需求”,我认为在时间和空间复杂度上,一个算法也不能很完美的结合两者,重要的还是视业务情况而定。开始整合一些数据结构和算法的概念,只是按照自己的理解写的(大神请不吝指点),会在之后的章节中《算法和数据结构》进行更深层次的研究和探讨。

时间&空间(complexity)的更多相关文章

  1. TRIZ发明问题解决理论——本质是分析问题中的矛盾,利用资源(时间空间物质能量功能信息等)来解决矛盾从而解决问题——抽象出来:问题是什么,为什么?

    TRIZ意译为发明问题的解决理论.TRIZ理论成功地揭示了创造发明的 内在规律和原理,着力于澄清和强调系统中存在的矛盾,其目标是完全解决矛盾,获得最终的理想解.它不是采取折衷或者妥协的做法,而且它是基 ...

  2. layDate/DatePicker日期时间空间

    真心不错,果断收藏了. 1.示例与效果 2.更多示例与皮肤 补充说明:My97DatePicker日期时间插件 的使用 1.示例与效果 2. 更多 常用的实例:WdatePicker下载 http:/ ...

  3. S-HR之时间空间配置

    <field name="entrys.bizDate"   dataType = "DATE"  label="生效日期" year ...

  4. Redis学习笔记~关于空间换时间的查询案例

    回到目录 空间与时间 空间换时间是在数据库中经常出现的术语,简单说就是把查询需要的条件进行索引的存储,然后查询时为O(1)的时间复杂度来快速获取数据,从而达到了使用空间存储来换快速的时间响应!对于re ...

  5. Redis基础知识之————空间换时间的查询案例

    空间与时间 空间换时间是在数据库中经常出现的术语,简单说就是把查询需要的条件进行索引的存储,然后查询时为O(1)的时间复杂度来快速获取数据,从而达到了使用空间存储来换快速的时间响应!对于redis这个 ...

  6. java性能时间与空间消耗

    Java性能时间与空间消耗 一.减少时间消耗 标准代码优化 (1) 将循环不变量的计算移出循环 例如:for (int i=0; i<size()*2; i++) { ... } ------& ...

  7. My97DatePicker时间控件使用

    刚刚工作中遇到一个修改时间空间的bug,顺带学习了My97DatePicker时间空间 网上查到的资料已经很详细: http://www.360doc.com/content/14/0606/11/1 ...

  8. 时间处理总结(三)javascript与WCF

    1.WCF提交时间时,若需接受DateTime需转换为"\/Date(928120800000+0800)\/"这种格式 var DateToJson = function (js ...

  9. FS 日志空间限定

    一.说明: FS默认安装的log文件,仅仅的限制了每个文件的大小,但是没有限制文件的个数.这种情况下,在FS运行很长时间之后,会出现物理空间不够的情况,导致FS或者mysql 或者其他应用没有空间使用 ...

随机推荐

  1. Go string 一清二楚

    前言 字符串(string) 作为 go 语言的基本数据类型,在开发中必不可少,我们务必深入学习一下,做到一清二楚. 本文假设读者已经知道切片(slice)的使用,如不了解,可阅读 Go 切片 基本知 ...

  2. 前端 Web 异常监控系统 All In One

    前端 Web 异常监控系统 All In One Sentry https://sentry.io trackjs https://trackjs.com/ rollbar https://rollb ...

  3. Self-XSS All In One

    Self-XSS All In One Self-XSS(自跨站脚本)攻击 警告! 使用此控制台可能会给攻击者可乘之机,让其利用 Self-XSS(自跨站脚本)攻击来冒充您并窃取您的信息.请勿输入或粘 ...

  4. GitHub in depth

    GitHub in depth GitHub 高级玩法 / 进阶教程 https://github.com/trending/dart?since=daily https://github.com/t ...

  5. flex & flex-wrap

    flex & flex-wrap https://css-tricks.com/almanac/properties/f/flex-wrap/ https://developer.mozill ...

  6. vue常用方法封装-一键安装使用(赠送免费工具)

    相信大家在使用vue开发过程中一定遇到了各种方法的整理收集,每次遇到新的问题都需要找到合适的方法 这里我给大家封装了一些vue项目中常用到的方法合集,免费提供费大家 因此,jsoften横空出世,不为 ...

  7. 基于nginx实现上游服务器动态自动上下线——不需reload

    网上关于nginx的介绍有很多,这里讲述的是上游服务(如下图的Java1服务)在没有"网关"的情况下,如何通过nginx做到动态上下线. 传统的做法是,手动修改nginx的upst ...

  8. elasticsearch如何设计集群

    本文为博客园作者所写: 一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 在写本文时就在想,如果让你负责一个elasticsearch集群,从零开始,你会从哪些方面 ...

  9. springboot整合jsp,完成公交车站路线图

    转: springboot整合jsp,完成公交车站路线图 点赞再看,养成习惯 开发环境: jdk 8 intellij idea tomcat 8 mysql 5.7 maven 3.6 所用技术: ...

  10. Zeebe服务学习2-状态机

    1.什么是状态机? 第一次接触到这个名词,感觉自己是明白这个东东是啥的,但是后来发现,emm-,是的,只是理解了这个词而已. 贴一下官方介绍: 有限状态机,(英语:Finite-state machi ...