1. 算法的复杂度:
算法的复杂度分为时间复杂度和空间复杂度,时间复杂度是指衡量算法执行时间的长短;空间复杂度是指衡量算法所需存储空间的大小。
2. 时间复杂度:
2.1 时间频度:一个算法中语句执行次数称为时间频度,计为T(n)。
2.2 时间复杂度:算法的时间复杂度描述的是T(n)的变化规律,计作:T(n)
= O(f(n))。
用大写O( )来体现算法复杂度的记法称为大O记法,一般情况下随着n的增大,T(n)增长最慢的算法为最优算法。
时间频度不同,但时间复杂度可能相同。如:T(n)=n2+3n+4与T(n)=4n2+2n+1它们的频度不同,但时间复杂度相同,都为O(n2)。
2.3 推导大O阶:
(1)用常数1取代运行时间中的所有加法常数,如O(1)。
(2)在修改后的运行次数函数中,只保留最高阶数,如n²+n 为 O(n²)。
(3)如果最高阶数存在且不是1,则去除与这个项相乘的常数,如3n³ 为 O(n³)。
2.4 常见时间复杂度:
【1】常数阶:
/*
* 这个算法的运行次数是f(n)=3,与n的大小无关
* 根据推导大O阶的方法,常数项3改为1,即时间复杂度为O(1)
* 对于分支结构(不含循环结构),无论真或假,执行的次数都是恒定的
* 不会随着n的变大而发生变化,其时间复杂度也是O(1)
*/
int sum = 0, n = 100; // 执行一次
sum = (1 + n) * n / 2; // 执行一次
System.out.println(sum); // 执行一次
【2】
线性阶:
/* 时间复杂度为O(n),因为循环体中的代码要执行n次*/
for(int i = 0; i < n; i++){
;
}
【3】对数阶:
/*
* 每次count乘以2之后,就距离n更近了一分
* 有x个2相乘后大于n就会退出循环
* 由2的x次方等于n --> x = logn,时间复杂度为O(logn)
*/
int count = 1;
while(count < n){
count = count * 2;
}
【4】 平方阶:
/*
* 对应外层循环,不过是内部这个时间复杂度为O(n)的语句,在循环n次
* 所以这段代码的时间复杂度为O(n²)
*/
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
;
}
}
【5】对比图:

常用时间复杂度所耗费时间从小到大依次为:O(1)
< O(logn) < O(n) < O(nlogn) < O(n²) < O(n³) < O(2n)
< O(n!) < O(nn)
2.5 最坏时间复杂度:
最坏情况下的时间复杂度称最坏时间复杂度。一般不特别说明,讨论的时间复杂度均是最坏情况下的时间复杂度。
这样做的原因是:最坏情况下的时间复杂度是算法在任何输入实例上运行时间的上界,这就保证了算法的运行时间不会比任何更长。
3. 空间复杂度:
算法的空间复杂度通过计算算法所需的存储空间实现,算法的空间复杂度的计算公式为: S(n) = O(f(n))。
通常没有特别指明时,复杂度指的是时间复杂度,我们写代码时,要学会以空间来换取时间。
分享到:
相关推荐
大话数据结构 .pptx
《大话数据分析:Tableau数据可视化实战》的数据集是一份重要的资源,对于想要学习和提升Tableau数据可视化技能的人来说极具价值。Tableau是一款强大的商业智能工具,它允许用户通过直观的拖放界面来探索和可视化...
基于《大话数据结构》进行数据结构的学习数据结构研究基于《大话数据结构》进行数据结构的学习线性表单链表栈的顺序存储结构两栈共享空间栈的链式存储结构循环队列的顺序存储队列的链表结构串查找字符子串位置KMP...
理解和分析算法的时间复杂度和空间复杂度是评估其效率的重要标准。C和C++程序员应具备基本的复杂度分析能力,了解大O符号表示法,如O(1)、O(n)、O(log n)、O(n log n)、O(n²)等,这有助于优化算法,提高程序性能。 ...
大数据也可以定义为来自各种来源的大量非结构化或结构化数据。从学术角度而言,大数据的出现促成广泛主题的新颖研究。这也导致各种大数据统计方法的发展。大数据并没有统计学的抽样方法;它只是观察和追踪发生的事情...
大话数据结构
大话数据结构大数据结构大话数据结构
《大话数据结构》语言c参考《大话数据结构》目录博客笔记-目录注表格中note链接至博客园笔记,代码链接至本库代码笔记 代码第1章-数据结构绪论 无效的第2章-算法 无效的第3章-线性表 第3章线性表第4章-栈与阻碍 第4...
个人自用
Android之大话设计模式——:抽象工厂模式借鉴.pdf
《大话移动APP测试》是一本...总的来说,《大话移动APP测试》这本书为读者提供了一个全面的移动应用测试框架,无论是对于初学者还是经验丰富的测试工程师,都能从中获取宝贵的指导和实践经验,提升测试效率和应用质量。
《大话数据结构》源码(Python版)《大话数据结构》配套源码(Python版)该书随书源码的语言为C语言我参考了书籍内容和安装源码,写了一套Python格式的安装源码。这套安装源码并非直接翻译C语言的安装源码,而是结合...
2. **RAC架构**:详细解析RAC的内部工作原理,如节点间通信机制(Inter-Process Communication,IPC)、全局缓存服务如何处理数据一致性、节点间的选举机制和故障转移过程。 3. **高可用性设计**:讲解如何设计高...
《大话Oracle RAC:集群、高可用性、备份与恢复》以Oracle 10g为基础,对Oracle RAC进行了全面的介绍和分析。全书分为两个部分,共14章,第1部分是集群理论篇,这部分从集群基础知识入手,通过分析集群环境和单机环境...
大话Oracle RAC:集群、高可用性、备份与恢复。 此书被认为不可多得的好资料之一:大话Oracle RAC(PDF经典),看完之后深有感触,发出来共享一下。
大话数据结构 JAVA版本源代码.zip
Android之大话设计模式——:抽象工厂模式参考.pdf
大话数据结构JAVA版本源代码大话数据结构JAVA版本源代码,优化无止境,掌握基础能力配置开发IDE : IntellijJDK1.8项目管理工具: Maven安装安装 Maven,http://maven.apache.org/download.cgi跑步mvn package 然后就...
《大话设计结构代码》这本书深入浅出地探讨了数据结构这一重要计算机科学主题,它在编程和软件工程中占据着核心地位。数据结构是组织和管理数据的方式,有效地使用数据结构可以极大地提高程序的效率和可维护性。以下...