| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 算法复杂度分析看这一篇就够了 -> 正文阅读 |
|
[数据结构与算法]算法复杂度分析看这一篇就够了 |
目录 ??????????????导读概述
时间复杂度
如何计算一个算法的时间复杂度呢通常采用大O表示法来表示 用 T(n) = O(f(n)) 表示
????????大 O 时间复杂度表示法,实际上并不具体表示代码真正的执行时间,而是表示代码执行时间随数据规模增长的变化趋势,所以也叫渐进时间复杂度,简称时间复杂度(asymptotic time complexity)。 常见的时间复杂度大O表示法1.O(1):常量级
这种是最简单的,也是最好理解的,就是常量级 不是只执行了一行代码,只要代码的执行不随着数据规模(n)的增加而增加,就是常量级 在实际应用中,通常使用冗余字段存储来将O(n)变成O(1)。 2.线性阶:O(n)
????????上面的例子中时间复杂度T(n)=O(2n+1),当n无限大时,低阶、常量、系统都可以忽略 即上例中的时间复杂度为T(n)=O(n),也就是代码执行时间随着数据规模的增加而增长 3.线性阶O(m+n)
m和n是代码的两个数据规模,而且不能确定谁更大,此时代码的复杂度为两段时间复杂度之和,即?T(n)=O(m+n) 记作:O(m+n) 4.O(m*n)
根据乘法法则代码的复杂度为两段时间复杂度之积,即 T(n)=O(m*n) 记作:O(m*n) 当m==n时,为O() 5.平方阶 O(n^2)
上例为:T(n)=O(n^2) 也就是代码执行时间随着数据规模的增加而平方增长 依此类推,时间复杂度也成为渐进增长: 两次嵌套for时间复杂度:O(n^2) 三层嵌套for时间复杂度:O(n^3) k层嵌套for时间复杂度:O(n^k) 6.O(n^2)
时间复杂度:?T(n)=O()+O(n) 简写:T(n)=O()? 注:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积(乘法法则) 7.对数阶?O(logn)
O(logn)推导过程: 以上代码,while循环中每次将i乘以2,直到i大于n,结束此循环。 如循环n次后,i>n,循环结束,也就是2的i次方等于n即i=log2n,也就是说循环log2n次以后,代码就结束了。代码的时间复杂度为O(logn)。 ????????找出while循环中的结束条件,判断时间复杂度。带有while循环的代码,大概率是对数时间复杂度为 T(n)=O(n*logn)即O(logn) 小结: 常用的时间复杂度所耗费的时间从小到大依次是: O(1) < O(logn) <O (n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(nn) 空间复杂度
例如将一个数组拷贝到另一个数组中,就是相当于空间扩大了一倍: 记作:T(n)=O(2n),忽略系数。即为O(n) 常见的空间复杂度空间复杂度比较常用的有:O(1)、O(n)、O(n2) 1.O(1)空间复杂度
以下i,j和count变量所分配的临时空间不随处理数据量的变化而变化,因此它空间复杂度为O(1) 2.O(n)空间复杂度
上述代码中的第一行代码new了一个数组,数组中有n个数据,剩余代码中虽然有循环,但是没有再分配新的空间,因此,该代码段的空间复杂度主要体现在第一行,为O(n)。平方阶的空间复杂度与之类似,依此类推即可。 常见的空间复杂度就是O(1)、O(n)、O(n^2),而O(logn)、O(nlogn)空间复杂度平时用的少些。 ?后记???????本文对算法中的时间复杂度和空间复杂度进行了简单的分析和介绍,希望对大家有所帮助,如果感觉有所收获,可以动动小手指给点个赞,感谢阅读! 微信扫码关注公共账号,谢谢阅读! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 12:52:46- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |