时间复杂度

本文详细介绍了如何评估程序的时间复杂度和空间复杂度。常见的时间复杂度从低到高包括O(1)、O(log(n))、O(n)、O(n^2)、O(n^3)、O(k^n)和O(n!),并举例说明了它们在不同算法中的应用。而对于空间复杂度,重点关注数组长度和递归深度。同时,对比了数组和链表在随机增加、查询和删除操作上的时间复杂度差异。
摘要由CSDN通过智能技术生成

如何判断程序的复杂程度:时间和空间复杂度 
1. 时间复杂度: 
使用大O表示法来表示程序的时间复杂度 
常见的7种时间复杂度(复杂度由低到高排序) 
 O(1):常数时间复杂度  O(log(n):

对数时间复杂度  

O(1):常数复杂度

int n = 1;
System.out.println(n);
 

O(n): 线性时间复杂度  

for (int j = 0; j < n; j++) {
    System.out.println(j);
}
 

O(n^2):平方时间复杂度  

for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        System.out.println(i + j);
    }
}
 

O(n^3):立方时间复杂度  

 for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        for (int k = 0; k < n; k++) {
            System.out.println(i + j);
        }
    }
}

O(k^n):指数时间复杂度,k表示常数  

/**
 * 递归求斐波那契数列的第n项;可以通过画运行树的方式获得时间复杂度
 */
int fib(int n) {
    if (n < 2) return n;
    return fib(n - 1) + fib(n - 2);
}
 

O(n!):阶乘时间复杂度

常用算法中的应用

算法递回关系式运算时间
二分搜寻算法在这里插入图片描述在这里插入图片描述
二叉树遍历在这里插入图片描述在这里插入图片描述
最佳排序矩阵搜索(已排好序的二维矩阵)在这里插入图片描述在这里插入图片描述
合并排序在这里插入图片描述在这里插入图片描述

所有排序的最优算法都是O(nlog(n))

 

2. 空间复杂度

如何判断一段代码的空间复杂度 
主要通过两部分进行判断: 
 数组的长度 如果代码中应用了数组,那么数组的长度,基本上就是空间复杂度; e:一维数组的空间复杂度是O(n);二维数组的空间复杂度是O(n^2)  递归的深度 如果代码中有递归,那么递归的深度,就是代码的空间复杂度的最大值  
ps:如果代码中既有数组,又有递归,那么两者的最大值就是代码的空间复杂度 
leecode有个爬楼梯的复杂度分析情况;可以进行练习 
3. 数组和链表的时间复杂度分析 
数组 
随机增加:O(n) 随机查询:O(1) 随机删除:O(n)

链表

随机增加:O(1)
随机查询:O(n)
随机删除:O(1)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值