面试-算法的空间和时间复杂度

本文介绍了如何衡量不同算法的效率,主要关注时间复杂度和空间复杂度。时间复杂度通过渐进分析来评估算法执行所需时间,如常数阶O(1)、线性阶O(n)、对数阶O(logN)等。空间复杂度则关注算法执行过程中所需的内存空间,例如数组分配。通过对各种复杂度级别的实例分析,阐述了如何计算和理解这两种度量标准。
摘要由CSDN通过智能技术生成

时间和空间复杂度

简介

使用不同的算法,得到的结果可能是一致的,但是其消耗的时间和空间可能大不相同,如何去衡量不同算法的优劣呢?

  • 时间复杂度:是指执行当前算法所消耗的时间
  • 空间复杂度:是指执行当前算法需要占用多少内存空间

时间复杂度

一般我们去测试程序算法的优劣,在同一台机器上跑一次就可以了,但是不同的机器配置得到的结果是不一样的,而且受限于程序环境的影响,有没有通用的方法呢:算法的渐进时间复杂度
T ( n ) = O ( f ( n ) ) T(n)=O(f(n)) T(n)=O(f(n))

常见的时间复杂度有

  • 常数阶O(1)
  • 对数阶O(logN)
  • 线性阶O(n)
  • 线性对数阶O(nlogN)
  • 平方阶O(n²)
  • 立方阶O(n³)
  • K次方阶O(nk)
  • 指数阶O(2n)

常数阶O(1)

int i = 1;
int j = 2;
++i;
j++;
int m = i + j;

无论代码有多少行,,只要是顺序执行,没有循环等复杂结构,那复杂度为O(1)

他消耗的时间不会随着系数变化而变化

线性阶O(n)

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

假定每行代码执行时间一致为1, 那么执行上述代码一次时间为1+2, 执行n次为 1+2n, 当n趋于无穷,
有 T ( n ) = O ( 1 + 2 n ) 当 n − > ∞ 得 T ( n ) = O ( n ) 有\quad T(n) = O(1+2n) \\ 当 \quad n->\infty \\ 得\quad T(n) = O(n) T(n)=O(1+2n)n>T(n)=O(n)

对数阶O(logN)

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

根据定义, 假设循环了x次, 就有2x = n , 有x = log2n 得出
T ( n ) = O ( l o g n ) T(n) = O(logn) T(n)=O(logn)

线性对数阶O(nlogN)

for(m=1; m<n; m++)
{
    i = 1;
    while(i<n)
    {
        i = i * 2;
    }
}

显而易见将 O(logn)循环了n遍, 所以时间复杂度为:
T ( n ) = O ( n l o g n ) T(n) = O(nlogn) T(n)=O(nlogn)

平方阶O(n²)

for(x=1; i<=n; x++)
{
   for(i=1; i<=n; i++)
    {
       j = i;
       j++;
    }
}

O(n)的代码循环了n遍, 时间复杂度为:
T ( n ) = O ( n 2 ) T(n) = O(n^2) T(n)=O(n2)

空间复杂度

int[] m = new int[n]
for(i=1; i<=n; ++i)
{
   j = i;
   j++;
}

代码中只有第一行申请空间,其他代码没有, 因此空间复杂度只需要看第一行代码就行,其时间复杂度为:
T ( n ) = O ( n ) T(n) = O(n) T(n)=O(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值