提到数据结构与算法就不得不提时间复杂度和空间复杂度,本人看大部分文章介绍都比较晦涩难懂,就想着用简单的代码示例快速让你理解数据结构与算法的时间空间复杂度。

首先,时间复杂度表示的是使用某个数据结构或者某种算法程序执行所耗费的时间,其次,空间复杂度是使用某个数据结构或者某种算法程序执行需要占用多少内存空间。通过时间复杂度和空间复杂度其实是衡量数据结构和算法执行效率好坏标准。

时间复杂度

常见的时间复杂度如下:
● O(1) 常数阶复杂度
● O(log n) O(nlogn) 对数阶复杂度
● O(n) 线性阶复杂度
● O(n^2) 平方阶复杂度
● O(n^3) 立方阶复杂度
● O(2^n) 指数阶复杂度
● O(n!) 阶乘复杂度

O(1) 常数阶复杂度

执行代码如果不是循环语句或者递归语句,那么代码时间复杂度一般都是 Ο(1)。 Ο(1) 示例代码如下所示:

String str = "我是 O(1) 复杂度"
System.out.println(str);

O(n) 线性阶复杂度

如下所示的一层循环代码程序时间复杂度是 O(n)

for(int i=1;i<n; i++){System.out.println("我是第"+n+"次执行!");
}

O(n^2) 平方阶复杂度

如下所示的二层循环代码程序时间复杂度是 O(n^2)

for(int i=1;i<n; i++){for(int j=1;j<n;j++){System.out.println("我是 O(n^2) 复杂度");}
}

O(n^3) 立方阶复杂度

for(int i=1;i<n; i++){for(int j=1;j<n;j++){for(int z=1;z<n;z++){System.out.println("我是 O(n^3) 复杂度");}}
}

O(log n) O(n logn) 对数阶复杂度

O(log n)

假设 n = 32 x结果将是 1、2 、4、8、16、32 具体执行多少次就是 2^x= n 即 x=log2n 这段代码的时间复杂度就是 O(log2n)。

for(int x=1;x<=n; x=x*2){System.out.println("我是 O(log n)复杂度");
}

O(nlogn)

for(int i=1;i<n; i++){for(int x=1;x<=n; x=x*2){System.out.println("我是 O(log n)复杂度");}
}

O(2^n) 指数阶复杂度

for(int i=1;i<=Math.pow(2,n); i++){System.out.println("我是 O(2^n)复杂度");
}

O(n!) 阶乘复杂度

一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且有0的阶乘为1。自然数n的阶乘写作n!。
亦即n!=1×2×3×…×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。

for(int i=1;i<=factorial(n); i++){System.out.println("我是 O(n!) 阶乘复杂度");
}public int factorial(int number) {if (number <= 1)return 1;elsereturn number * factorial(number - 1);
}

时间复杂度性能趋势图如下:

由上图我们可以看出算法时间复杂度由小到大依次为:Ο(1) < Ο(log2n) < Ο(n)<Ο(nlogn) <Ο(n^2) < Ο(n ^3) < Ο(2 ^n)<Ο(n!)

空间复杂度

空间复杂度比较常用的有:O(1)、O(n)、O(n²)

相对于时间复杂度,空间复杂度更简单,分析空间复杂度有2个原则:

  • 程序中数组的长度基本上就是你的空间复杂度。例如:开了一个一维的数组,那么你的空间复杂度就是O(n),如果开了一个二维的数组,数组长度是n^
    2,那么空间复杂度基本上就是 n^ 2
  • 递归算法的空间复杂度 = 每次递归的空间复杂度 * 递归深度。

斐波那契数列递归形式实现:空间复杂度为 O(n)

关于常见的算法和数据结构时间空间复杂度如下图所示:

数据结构与算法的时间空间复杂度相关推荐

  1. a*算法的时间复杂度_数据结构与算法系列——时间、空间复杂度

    数据结构和算法本质就是帮我们用最快的时间和最少的空间来执行我们的代码.所以,执行效率是衡量一个算法的非常重要的指标.那如何来计算你的算法代码的执行效率呢?这就需要时间.空间复杂度来分析了. 有人可能会 ...

  2. 一层循环时间复杂度_数据结构与算法系列——时间、空间复杂度

    数据结构和算法本质就是帮我们用最快的时间和最少的空间来执行我们的代码.所以,执行效率是衡量一个算法的非常重要的指标.那如何来计算你的算法代码的执行效率呢?这就需要时间.空间复杂度来分析了. 有人可能会 ...

  3. Algorithm Master Road:算法的时间/空间复杂度

    很多同学都觉得算法很难,难以入门,难以理解,更难以掌握和运用,其实归根溯源,我们可以把所有的问题都通过枚举法来解决,但是受困于「时间」和「空间」的因素,有的时候并不能枚举所有的情况,所以需要通过精妙的 ...

  4. 大话数据结构(1)——时间空间复杂度

    算法时间.空间复杂度 文章目录 算法时间.空间复杂度 算法时间复杂度 时间复杂度分类 常见时间复杂度 算法时间复杂度 时间复杂度分类 常数阶 顺序结构的时间复杂度为O(1) 单纯的分支结构时间复杂度为 ...

  5. 算法及时间/空间复杂度的分析

    算法(Algorithm) 对特定问题求解步骤的一种描述,是为解决一个或一类问题给出的一个确定的.有限长的操作序列 算法的基本特征 ①输入:有零个或多个输入 ②输出:有一个或多个输出 ③有穷性:在执行 ...

  6. c++算法——算法章节-时间空间复杂度

    算法开章咯 这次是csp-j组算法 枚举法 hash vector 结构体 queue stack 贪心-简单 贪心区间 递归 二分 set map 二叉树 图的遍历-邻接矩阵 迷宫问题-dfs-深度 ...

  7. 【数据结构】入门及时间空间复杂度的介绍

  8. 数据结构与算法之美-目录

    复杂度分析 数组 栈 队列 链表 递归 排序 二分查找 跳表 散列表 哈希算法 二叉树 红黑树 B+树 堆与堆排序 图的表示 深度广度优先搜索 拓扑排序 最短路径 A*算法 字符串匹配(BF RK) ...

  9. 【算法】常用的数据结构与算法

    学习了王争老师的数据结构与算法之美之后,比较有感触,他把我们常用的数据结构和算法都讲了一遍,而且讲的还不错.整理汇总一下作为笔记. 一.复杂度分析 非常重要.我们必须掌握,基本上要做到,简单代码能很快 ...

最新文章

  1. nbu 196错误和191错误解析
  2. 百亿数据量下,掌握这些Redis技巧你就能Hold全场
  3. STM32 基础系列教程 25 - USB_HID_mouse
  4. 返回后的数据处理_【掘金使用技巧2】掘金返回数据中时间的处理方法
  5. Linux命令之tree
  6. 学的php毫无兴趣,培训班学PHP,感觉兴趣越来越低,哎,真的很迷茫了!
  7. Spiral Matrix I II
  8. 10个Bug环环相扣,你能解开几个?
  9. 第10篇:Flowable-BPMN操作流程部署、启动
  10. [转载]Lua脚本与C++交互
  11. 二. 线程管理之线程池
  12. Android 渗透测试学习手册 第七章 不太知名的 Android 漏洞
  13. ubuntu搭建nfs网络文件系统
  14. 易之风门诊收费系统 v1.0 官方
  15. 速卖通尺寸表 html源码,最新!速卖通尺码表功能上线
  16. sklearn实战-----3.数据预处理和特征工程
  17. 自学python能干什么知乎_自学python能干什么
  18. 帮助新员工快速形成战斗力,Filez在入职与培训场景应用
  19. 基于Django的健身房管理系统
  20. android图标生成网址

热门文章

  1. Docker实践(六)部署redis
  2. 生成介于0.95-1的随机数MATLAB,matlab生成随机数函数
  3. php弹出是否,Javascript警报弹出窗口是否会扩展PHP会话?
  4. Django 3.0 正式发布,开始支持异步功能
  5. JUST——简单转换下的JSON
  6. 宝塔 php redis not found in_PHP之PSR-4规范:自动加载
  7. C#求两个日期之间相差的天数和当前日期+30天插入数据库
  8. 使用 file_get_contents 获取网站信息报错failed to open stream: HTTP request failed!
  9. layui 列表上面的switch开关切换
  10. html+input+hidden,input type=hidden