【数据结构和算法】时间复杂度和空间复杂度

简介: 一、前言二、时间复杂度2.1时间复杂度表示形式2.1.1规则:3.1如何计算时间复杂度3.1.1线性阶3.1.2平方阶3.1.3对数阶常见的时间复杂度排序:三、空间复杂度3.1Java的基本类型内存占用

一、前言


数据结构和算法是程序的灵魂,这是某位程序员大佬所言,学习了这门,我们便可以在


编程之路越走越远。时间复杂度一般是我们所关心的。


二、时间复杂度


时间复杂度简单的说就是一个程序运行所消耗的时间,叫做时间复杂度,我们无法目测


一个程序具体的时间复杂度,但是我们可以估计大概的时间复杂度。


一段好的代码的就根据算法的时间复杂度,即使在大量数据下也能保持高效的运行速


率,这也是我们学习算法的必要性。


2.1时间复杂度表示形式


一般用O()来表示算法的时间复杂度,我们叫做大O记法。


2.1.1规则:


①用常数1取代运行时间中的所有的加法常数。比如,一个程序中有十条输出语句


我们不会记成O(10),而是用O(1)来表示。


②如果最高阶项不是1,那么去掉最高阶阶项,因为我们认为数字在后期影响不大。


如O(8n),则时间复杂度应该为O(n)。


③只保留最高阶项,如O(3n^2+6n+2),则时间复杂度为O(n^2)


3.1如何计算时间复杂度


计算时间复杂度主要看执行的次数和输入的关系


3.1.1线性阶


顾名思义,就是输入和输出成正比。


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


当n=1,执行一次,当n=100,执行100次 ,所以当为n时,执行n次,所以时间复杂度为

O(n)


3.1.2平方阶

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


外层for循环和内层for循环都是时间复杂度时n外层循环一次,内层循环n次,所以时间复杂度是


O(n^2)。


另一种:


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


外层复杂度是n,内层是1+2+...+n-1+n,所以是n(1+n)/2,由大O法得时间复杂度是O(n^2).


3.1.3对数阶


int i=0;n=100;
while(i<n){
i=i*2;
}


满足条件时,程序运行了,先设X个2相乘后大于n,则2^X=n,解得X=log2(n),所以时间


复杂度时O(log2(n)),log以2为底,n为真数。



常见的时间复杂度排序:


O(1)< O(log2(n))< O(n)< O(nlog2(n)< O(n^2)< O(n^3)< O(2^n)< O(n!)< O(n^n)


一般来说,到了O(n^2)及以上数据量大时运行效率极低,所以数据量大时,应选用更有的算法


三、空间复杂度


简单的说就是程序运行所需要的空间。


写代码我们可以用时间换空间,也可以用空间换时间。加大空间消耗来换取运行时间


的缩短加大时间的消耗换取空间,我们一般选择空间换时间。一般说复杂度是指时间复杂度


3.1Java的基本类型内存占用


微信图片_20220106111233.png


计算机访问内存都是一次一个字节。


一个引用(机器地址)需要8个字节表示


如 Date date=new Date();则date这个变量需要8字节表示。


一般内存的使用,如果不够8字节,都会自动填充8字节(也就是8的整数倍)


目录
相关文章
|
4月前
|
存储 监控 安全
企业上网监控系统中红黑树数据结构的 Python 算法实现与应用研究
企业上网监控系统需高效处理海量数据,传统数据结构存在性能瓶颈。红黑树通过自平衡机制,确保查找、插入、删除操作的时间复杂度稳定在 O(log n),适用于网络记录存储、设备信息维护及安全事件排序等场景。本文分析红黑树的理论基础、应用场景及 Python 实现,并探讨其在企业监控系统中的实践价值,提升系统性能与稳定性。
150 1
|
4月前
|
存储 监控 算法
基于跳表数据结构的企业局域网监控异常连接实时检测 C++ 算法研究
跳表(Skip List)是一种基于概率的数据结构,适用于企业局域网监控中海量连接记录的高效处理。其通过多层索引机制实现快速查找、插入和删除操作,时间复杂度为 $O(\log n)$,优于链表和平衡树。跳表在异常连接识别、黑名单管理和历史记录溯源等场景中表现出色,具备实现简单、支持范围查询等优势,是企业网络监控中动态数据管理的理想选择。
145 0
|
8月前
|
存储 算法 Java
算法系列之数据结构-二叉树
树是一种重要的非线性数据结构,广泛应用于各种算法和应用中。本文介绍了树的基本概念、常见类型(如二叉树、满二叉树、完全二叉树、平衡二叉树、B树等)及其在Java中的实现。通过递归方法实现了二叉树的前序、中序、后序和层次遍历,并展示了具体的代码示例和运行结果。掌握树结构有助于提高编程能力,优化算法设计。
275 10
 算法系列之数据结构-二叉树
|
8月前
|
算法 Java
算法系列之数据结构-Huffman树
Huffman树(哈夫曼树)又称最优二叉树,是一种带权路径长度最短的二叉树,常用于信息传输、数据压缩等方面。它的构造基于字符出现的频率,通过将频率较低的字符组合在一起,最终形成一棵树。在Huffman树中,每个叶节点代表一个字符,而每个字符的编码则是从根节点到叶节点的路径所对应的二进制序列。
228 3
 算法系列之数据结构-Huffman树
|
8月前
|
算法 Java
算法系列之数据结构-二叉搜索树
二叉查找树(Binary Search Tree,简称BST)是一种常用的数据结构,它能够高效地进行查找、插入和删除操作。二叉查找树的特点是,对于树中的每个节点,其左子树中的所有节点都小于该节点,而右子树中的所有节点都大于该节点。
329 22
|
1月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
189 0
|
1月前
|
数据采集 分布式计算 并行计算
mRMR算法实现特征选择-MATLAB
mRMR算法实现特征选择-MATLAB
141 2
|
2月前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
193 3
|
1月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
137 8
|
1月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
146 8

热门文章

最新文章

下一篇
oss云网关配置