我们在敲出自己心爱的程序的时候,我们是否想过,自己程序的性能咋样!

今天,我们说一说对程序或者算法的性能分析!

算法复杂度

算法复杂度是算法性能最基本的评价标准,复杂度是一个算法的时间运行函数,常用大写的‘O’表示,算法复杂度都时间复杂度和空间复杂度组成

1.时间复杂度

时间复杂度描述了算法的运行时间,例如,一个算法对于输入规模n的计算,它平均需要计算6n^3+9n次才能得到问题的解,则他的时间复杂度可视为O(n^3)

常见的时间复杂度大约有6种,他们的含义如下。

1.O(1):表示在常数级别完成问题的解,如在代码程序的位置互换

int i =10; int j = 20;

int temp = i;

i = j;

j = temp;

2.O(lgn):一般采用分治思想的算法

int n=...

if(x>0){

x=x/n

}

3.O(n):可以理解为,将问题进行了常数次迭代

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

system.out.println(i)

}

4.O(nlog(n)):在数据遍历的过程中又使用了分治的思想

请参照快速排序的实现

5.O(n^2):对问题进行了两层嵌套遍历

int[] a = {3, 2, 4, 7, ..., n}

for(int i = 0; i < n - 1; i++){

for (int j = i + 1; j < n; j++){

if(a[i] > a[j]){ // do swap, f(n)= n * n

int temp = a[i]; //频度最大

a[i] = a[j];

a[j] = temp;

}

}

}

6.O(n^3):对问题进行了三层嵌套遍历

for i..n

for ...

for ...

do something...

7.O(2^n):指数型

T(n)=2T(n-1) T(1)=1;求T(n)

除了这些之外,还有O(n^n)、O(n!)等等

2.空间复杂度

空间复杂度的描述的是空间

1.O(1):表示在常数级别完成问题的解,如在代码程序的位置互换

int i =10; int j = 20;

int temp = i;

i = j;

j = temp;

空间占用情况为一个变量,所以,空间复杂度是O(1),时间复杂度O(1)

int a =0;

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

a=i;

}

空间占用情况为一个变量,所以,空间复杂度是O(1),但是时间复杂度是O(n)

2.O(n):表示在常数级别完成问题的解

List<String> list = new ArrayList<String>();

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

list[i]=i;

}

list中开辟了n个空间,所以空间复杂度是O(n),时间复杂度也是O(n)

.......其他情况以此类推


最后,来两道从网上找的关于复杂度的面试题

【腾讯】下面算法的时间复杂度是____

int foo(int n) {

if (n <= 1) {

return 1;

}

return n * foo(n - 1);

}


【京东】以下函数的时间复杂度为____

void recursive(int n, int m, int o) {

if (n <= 0) {

printf("%d, %d ", m, o);

} else {

recursive(n - 1, m + 1, o);

recursive(n - 1, m, o + 1);

}

}

不对的地方,敬请指正,下方留言。

can u get it out?

大数据与算法系列之算法性能分析相关推荐

  1. 大数据时代先要满足算法而不是客户的需求

    <如何免费获取线上流量>系列课程之一 (注:以下内容是根据张进老师在2020年12月10号在善书院举办的一期企业经营沙龙上,所做的<企业如何获取线上的免费流量>演讲整理出的部分 ...

  2. 大数据预测的基本原理_大数据需要掌握的基本算法

    大数据需要会的基本算法 前言 数学就像一条章鱼,它有触手可以触及到几乎每个学科上面.虽然大部分人在上学的时候有系统的学习,但都没有进行深入的研究和运用,只是拿来拓展自己的思维逻辑.但是如果你想从事数学 ...

  3. 【大数据入门笔记系列】第一节 大数据常用组件

    [大数据入门笔记系列]第一节 大数据常用组件 大数据释义 大数据组件 跳转 大数据释义 近些年来,坊间一直流传着这样的言论:"大数据时代,人人都在裸奔".对于外行人来说,对于&qu ...

  4. 数据结构排序算法实验报告_[数据结构与算法系列]排序算法(二)

    我的上一篇文章向大家介绍了排序算法中的冒泡排序.插入排序和选择排序.它们都是平均时间复杂度为 O(n^2) 的排序算法,同时还为大家讲解了什么是原地排序和什么是排序的稳定性.下图是这三种算法的比较,不 ...

  5. 看这里→大数据工程技术人员系列课程—《大数据工程技术人员-大数据基础技术》正式上线!...

    点击蓝字,关注我们 行业背景 据中国商业联合会数据分析专业委员会统计,未来中国基础性数据分析人才缺口将达到1400万.2025年前大数据人才需求仍将保持30%-40%的增速,需求总量将会在2000万人 ...

  6. 写文章 数据嗨客 | 第2期:线性回归 数据嗨客 | 第2期:线性回归 泊数 泊数 1 年前 普林大数据学院——“机器学习”系列 普林大数据学院依托北京大数据研究院和北京大学,为有需求的企业

    数据嗨客 | 第2期:线性回归 泊数 1 年前 普林大数据学院--"机器学习"系列 普林大数据学院依托北京大数据研究院和北京大学,为有需求的企业和用户提供线上线下结合大数据培训服务 ...

  7. 209-希尔排序算法的思想和性能分析

    1.希尔排序算法的思想和性能分析 希尔排序可以认为是插入排序的一个优化,升级. 如果数据序列从大的方向,从全局看,已经是趋于有序的,那么插入排序是所有排序算法中效率最高的. 希尔排序就是从插入排序的这 ...

  8. 大数据入门基础系列之初步认识大数据生态系统圈(博主推荐)

    不多说,直接上干货! 之前在微信公众平台里写过 大数据入门基础系列之初步认识hadoop生态系统圈 http://mp.weixin.qq.com/s/KE09U5AbFnEdwht44FGrOA 大 ...

  9. 【大数据入门笔记系列】第六节 分布式计算框架MapReduce的工作流程

    [大数据入门笔记系列]第六节 分布式计算框架MapReduce的工作流程 前言 MapReduce分布式运算 MapReduceApplication MapTask ReduceTask split ...

  10. 电商用户行为分析大数据平台相关系列1-环境介绍

    最近在自学Spark,看了一些书籍和视频,总是感觉无从下手.拿着一个想法总是无从下手.追其原因,主要是没有系统的学习和使用.对于IT,一切新技术都需要不断实践.不断动手.本着动手的原则,本人通过各种渠 ...

最新文章

  1. DispatcherServlet的启动和初始化
  2. TextMate 通用快捷键
  3. iview tooltip自动消失_惠州广日自动人行道价格大概多少
  4. Jackson相关的一些注解
  5. apache.commons.lang.StringUtils 使用心得
  6. ubantu-16+ndk-r14b 编译 ffmpeg-4.0.2+lame_mp3-3.99.5
  7. eclipse 快捷键总结
  8. 当罗密欧遇到朱丽叶... ...当指针遇到数组
  9. 实用工具类APP,海外大有可为
  10. 自己手写一个Spring MVC框架
  11. 系统板I/O端口地址分配(一)
  12. 苹果mac视频音频格式转换软件:Permute
  13. 设置windows服务依赖项
  14. 平时常见的音频文件格式有哪些呢?
  15. 关于visual studio和vc版本之间的对应关系(更新至2020.07)
  16. ceres之LM算法
  17. 阿里p6和p7的主要区别是什么?
  18. linux系统日志报错kernel,Linux 系统日志 kernel: __ratelimit: xxx callbacks suppressed-Fun言...
  19. C++ TCP 网络编程与数据通信
  20. 勒索病毒解密SQL数据库修复文档文件服务器中毒远程处理数据恢

热门文章

  1. python操作Excel的5种常用方式
  2. elementUI表格自动刷新
  3. 5G行业消费者洞察:这23个词最热
  4. html手机输入框键盘弹起顶起背景图
  5. Python网络数据采集9(译者:哈雷)
  6. java中构造方法(或者叫构造方法)
  7. 关于Reactor 模式
  8. TypeError错误解决方案
  9. 百度智能云身份证识别API的使用
  10. 社区疫情防控的微信公众号文章排版必备素材集锦